Forum: Mikrocontroller und Digitale Elektronik Wemos D1 Mini Light startet nicht nach DeepSleep


von Daniel E. (danebn)


Lesenswert?

Hallo Leute,

ich habe ein Problem mit meinem Wemos D1 mini light.

Ich arbeite gerade an einem kleinen Projekt, bei dem ich den Controller 
über einen 18650 3,7V Li-Ion Akku betreibe.
Dabei sind noch Sensoren und Taster angeschlossen und auch ein 
GSM-Modul, welches über SoftwareSerial kommuniziert.
Und noch ein DS3231 RTC Modul an SCL und SDA.

Ich brauche nur jede Stunde Daten, deswegen versetze ich den Controller 
in DeepSleep. D0 und RST Pin sind miteinander verbunden.

Leider blinkt der Controller am Ende des DeepSleeps nur kurz auf aber 
macht nichts. Danach passiert gar nichts mehr.
Er verhält sich genau so, wie wenn D0 und RST nicht verbunden wären.
Erst, wenn ich auf den Reset Button am Wemos drücke, startet er neu und 
arbeitet normal (bis zum nächsten DeepSleep).

Wenn ich allerdings alles vom Wemos abschließe und ihn alleine, nur mit 
Stromversorgung über 18650 und Verbindung zwischen D0 und RST, laufen 
lasse, dann klappt der Neustart nach dem DeepSleep jedes Mal ohne 
Probleme.

Am GSM Modul liegt es glaube ich nicht, da es nur mit Wemos und GSM auch 
schon bei Tests funktioniert hat.
Das GSM Modul wird durch einen MOSFET vom Wemos eingeschaltet, wodurch 
ich auch (fast) ausschließen kann das zu viel Strom gezogen wird. (Falls 
das Probleme machen könnte beim Reset)

Kennt dieses Problem jemand?

Danke im Voraus

von Michael U. (amiga)


Lesenswert?

Hallo,

das Problem kenne ich nicht. Einen D1 mini schicke ich schon deshalb 
nicht schlafen, weil auf dem Modul für mich zuviele unnötige 
Stromverbraucher sind.

Möglich wäre, daß der 100n, der laut Schaltplan am Reset parallel zum 
Taster liegt, stört. Wenn der Impuls an GPIO16 sehr kurz ist, könnte der 
Reset nicht sauber starten.
Man könnte den einfach mal vom Modul runterlöten.

Gruß aus Berlin
Michael

von Daniel E. (danebn)


Lesenswert?

Danke für die schnelle Antwort.

Wenn du es schon ansprichst...Welches Modul wäre für solche Zwecke 
besser geeignet?

Das komische ist, dass es ohne angeschlossenen Geräten funktioniert.
Ich glaube ich versuche nochmal alles Angeschlossene nacheinander 
abzulöten und jedesmal probiere ich, ob sich sein Verhalten verändert.
Und wenn das auch nicht klappt entferne ich den 100n.

mfg
Daniel

von G. H. (schufti)


Lesenswert?

du solltest mal die ser. Ausgabe beim Aufwachen kontrollieren.
Möglicherweise hat eine der angeschlossenen Komponenten nach dem 
Deepsleep einen anderen Zustand und hängt an einem der "empfindlichen" 
gpios, als da wären: gpio0, gpio2, rxd, gpio15

Für Anwendungen mit deepsleep immer nur Einzelmodule (esp-01, esp-12, 
etc) die ganzen "Entwickler"boards haben mit billigst 3V3 Regler und 
USB/seriell Wandler einen x-fach höheren Ruhestromverbrauch. Wenn es 
wirklich darauf ankommt: LiFePO4 Zelle verwenden und ganz ohne ldo 
auskommen.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

G. H. schrieb:
> gpios, als da wären: gpio0, gpio2, rxd, gpio15
hatte ich auch zuerst überlegt, aber dann dürfte er nach Reset per Taste 
eigentlich auch nicht sabuer starten.

Ansonsten auch Zustimmung, LiFePO4 ist hier auch Akku der Wahl, 
allerdings ist bei ihm ja ein GSM-Modul im Spiel, da weiß ich die nötige 
Spannung nicht.

Der DS3231 kann doch eigentlich einen Alarm per INT melden, da kann man 
den doch vermutlich soagr nutzen.
Kleinen StepDown mit Enable-Eingang und den samt ESP komplett 
abschalten.
Mit der RTC den Wandler starten und alles erledigen und vom ESP wieder 
abschalten? Müßte ich jetzt aber das Datenblatt der RTC befragen.

Gruß aus Berlin
Michael

von Daniel E. (danebn)


Lesenswert?

Kenne mich leider bei Akkus nicht so aus.
Was ist der Vorteil eines LiFePO4 gegen einen Li-Ion?

An GPIO0 und GPIO2 betreibe ich mein GSM-Modul über SoftwareSerial.
Und über GPIO15 schalte ich den MOSFET für mein GSM Modul.

Alles über die RTC steuern habe ich noch garnicht überlegt.
Kenne mich damit aber auch viel zu wenig aus.

Wie würdet ihr die Module mit Spannung versorgen, um möglichst wenig 
Verlustleistung zu haben?
GSM: 4V
ESP: 3,3V

von G. H. (schufti)


Lesenswert?

benutzt du eigentlich WLAN neben GSM? Wenn nicht, versuche doch einmal 
einen AVR Arduino, der ist im Standby wesentlich genügsamer, läuft auch 
mit 3.3V und zickt nicht so rum wie der esp. Den esp nehme ich 
eigentlich nur dort wo ich WLAN oder die Rechenleistung brauche.
LiFePo4 hat den Vorteil, dass die Ladung wesentlich unkomplizierter, die 
Zellchemie nicht "reaktionsfreudig" und die Spannung über großen Bereich 
(>95% Kapazität) zw. 3.6 und 3.2V stabil ist.
Bei Vorhandensein einer RTC als "Wecker" und MOSFET zur Versorgung würde 
ich tatsächlich auch ein externes Energiemanagement bevorzugen.
Sind die 4V für GSM eine "Mindestspannung" weil intern ein 3.3V Regler 
sitzt? 4V ist irgendwie ... krumm.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

Daniel E. schrieb:
> Kenne mich leider bei Akkus nicht so aus.
> Was ist der Vorteil eines LiFePO4 gegen einen Li-Ion?
Vorteil: eigensicher (brennen also nicht ab)
Spannung sehr konstant bei ca. 3,3V über die gesammte Zeit.
Ladeentspannung ust 3,6V, wenige Minuten nach Entnahme aus dem Ladegerät 
ist die Spannung bei ca. 3,4V und fällt erst am Ende der Kapazität unter 
3,15V.
Recht unempfindlich gegen Überladung und Tiefentladung.
Nachteile: Preis ist höher, Kapazität nur ca. 50% von LiIO bei gelicher 
Baugröße.

> An GPIO0 und GPIO2 betreibe ich mein GSM-Modul über SoftwareSerial.
Da Du das GSM-Modul von der Spannung trennst, ist das Verhalten da etwas 
unbestimmt... Eigentlich müßteman auch die Datenleitungen trennen, da 
üblicherweise die Spannung an den IO des GSM-Moduls auch nicht höher 
als Ub +0,5V sein sollte (darf), also die müßte dann auch nahe 0V sein. 
Sonst kann das Modul über die internen Schutzdioden Strom über die 
Eingänge ziehen.
Das hängt aber sehr stark vom Modul und dessen Datenblatt ab.

> Und über GPIO15 schalte ich den MOSFET für mein GSM Modul.
GPIO15 muß beim Reset auf L liegen, der interne PullDown des D1 mini ist 
wohl 12k. Wie schaltest Du das GSM-Modul? Low-Side oder High-Side?
GND schaltet man ohnehin nie, weil dann die Spannungsverhältnisse völlig 
unduchschaubar sind.

> Alles über die RTC steuern habe ich noch garnicht überlegt.
> Kenne mich damit aber auch viel zu wenig aus.

> Wie würdet ihr die Module mit Spannung versorgen, um möglichst wenig
> Verlustleistung zu haben?
> GSM: 4V
4V bekommst Du real doch sowieso nicht aus einer LiIO-Zelle, sinnvoller 
Entladeschluß bei LiIO ist irgendwo bei 3,0V. Kommt denn Dein GSM-Modul 
damit klar?
> ESP: 3,3V
Vermutlich 2 LiIO in Reihe, StepDown mit Enable und kleinem 
StandBy-Strom auf 4V. Für den ESP müßte man da mal Nachdenken.

1 Zelle LiFEPO4 direkt für den ESP und StepUp mit Enable auf 4V für das 
GSM-Modul wäre auch denkbar.

1 Zelle LiIO dürfte für das GSM-Modul einen Buck-Boost von den 
4,2...3,0V auf die 4V erfordern.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Daniel E. (danebn)


Lesenswert?

Michael U. schrieb:

> GPIO15 muß beim Reset auf L liegen, der interne PullDown des D1 mini ist
> wohl 12k. Wie schaltest Du das GSM-Modul? Low-Side oder High-Side?
> GND schaltet man ohnehin nie, weil dann die Spannungsverhältnisse völlig
> unduchschaubar sind.
Wie meinst du das auf L liegen?
Ich schalte GPIO15 einfach als Ausgang auf HIGH

von Daniel E. (danebn)


Lesenswert?

G. H. schrieb:
> benutzt du eigentlich WLAN neben GSM? Wenn nicht, versuche doch einmal
> einen AVR Arduino, der ist im Standby wesentlich genügsamer, läuft auch
> mit 3.3V und zickt nicht so rum wie der esp. Den esp nehme ich
> eigentlich nur dort wo ich WLAN oder die Rechenleistung brauche.
> LiFePo4 hat den Vorteil, dass die Ladung wesentlich unkomplizierter, die
> Zellchemie nicht "reaktionsfreudig" und die Spannung über großen Bereich
> (>95% Kapazität) zw. 3.6 und 3.2V stabil ist.
> Bei Vorhandensein einer RTC als "Wecker" und MOSFET zur Versorgung würde
> ich tatsächlich auch ein externes Energiemanagement bevorzugen.
> Sind die 4V für GSM eine "Mindestspannung" weil intern ein 3.3V Regler
> sitzt? 4V ist irgendwie ... krumm.

Nein benutze kein WLAN.
Werde mir den AVR mal ansehen.

Das GSM Modul ist ein SIM800L und hat eine Betriebsspannung von 3,7 - 
4,2V
Unter 3,7V wäre für mich der Akku so zu sagen leer gewesen.

von G. H. (schufti)


Lesenswert?

noch mehr Grund, einen AVR (Arduino) zu verwenden. Dann passt die LiIon 
Zelle als direkte Versorgung für µC und GSM Modul schon mal bestens ohne 
zusätzlichen Regler. Für i2c Module einfach den üblichen Pegelwandler 
dazwischen, wenn es denn sein muss und die Teile nicht mit der 
Versorgung kompatibel sind.

von Daniel E. (danebn)


Lesenswert?

Was würdest du dafür genau für einen µC empfehlen?

Ich werde es aber glaube ich trotzdem noch mit dem Wemos fertig machen 
und Version 2 komplett überdenken.
Ich hoffe allerdings ich finde den Fehler vom DeepSleep.

von Michael U. (amiga)


Lesenswert?

Hallo,

Daniel E. schrieb:
> Wie meinst du das auf L liegen?

GPIO15 muß beim Reset auf Low-Pegel liegen damit der ESP aus dem Flash 
bootet. GPIO0 muß auf High-Pegel liegen, damit er nicht nicht vom UART 
gebootet wird ("programmiermode").

> Ich schalte GPIO15 einfach als Ausgang auf HIGH

was Du hinterher machst ist beim Reset egal, GPIO15 als Ausgang geht 
problemlos. Intern hat der auf dem D1 mini einen PullDown Widerstand 
dran damit er im richtigen Bootmode srtate. Wenn jetzt im Reset-Moment 
von Außen eine Spannung an GPIO15 kommt (egal, auf welchen Weg) und an 
den 12k auf dem Modul mehr als ca. 1,5V abfallen, erkennt er im Reset 
kein Low und bootet im falschen Mode. Bei den 12k reicht dazu von Außen 
ja bereits ein Strom von 100µA. Dehslab meine Frage nach der genauen 
Schaltung.

Ich hatte auch schon überlegt weshalb ESP8266 und GSM. Hast Du ja schon 
beantwortet, da würde ich auch einen AVR nehmen. Keine Ahung, welche 
Sensoren Du dran hast, aber ein Mega328 (Arduino Pro Mini) sollte sich 
nahezu ohne Änderungen Deiner Software einsetzen lassen. Einen 
USB-TTL-Adatper brauchst Du dann natürlich noch oder erstmal einen 
Ardunino Nano zum Test nehmen.

Gruß aus Berlin
Michael

von Daniel E. (danebn)


Lesenswert?

Hätte nie gedacht, dass die Lösung meines Problems so einfach ist.

Widerstand zwischen GPIO15 & GND und schon funktioniert es.

Ich werde mich aber sicher nochmal schlau machen und mich nach 
Alternativen umschauen.

Danke für eure Antworten

von Stefan F. (Gast)


Lesenswert?

> Leider blinkt der Controller

Das ist krass, normalerweise können nur LEDs und Glühlampen blinken. :-)

> Möglicherweise hat eine der angeschlossenen Komponenten nach dem
> Deepsleep einen anderen Zustand und hängt an einem der "empfindlichen"
> gpios, als da wären: gpio0, gpio2, rxd, gpio15

Ein manuell ausgelöster Reset Impuls dauert viel länger, als der 
Reset-Impuls des Sleep-Timers. Somit haben diese Pins mehr Zeit, auf die 
nötigen Signalpegel zu wechseln. Ich denke damit ist erklärt, warum es 
bie Dir mit einem manuellen Reset funktioniert hat.

GPIO1 und 2 enthalten intern schwache Pull-Up Widerstände. Wenn diese 
kapazitiv belastet sind, kommen sie beim Aufwachen womöglich nicht 
schnell genug auf High Pegel.

GPIO 0 und 15 müssen beim Start (und Aufwachen) durch einen externen 
Widerstand auf Low gezogen werden. Auch hier gilt: Wenn der Widerstand 
zu hochohmig ist und der Pin kapazitiv belastet ist, kommt das Signal 
nicht schnell genug auf Low.

MOSFET Transistoren haben mitunter eine beträchtliche Kapazität, oft 
mehr als 1nF.

von Michael U. (amiga)


Lesenswert?

Hallo,

Stefanus F. schrieb:
> GPIO 0 und 15 müssen beim Start (und Aufwachen) durch einen externen
> Widerstand auf Low gezogen werden.

wenn Du GPIO beim Reset auf Low ziehst, landest Du im Programmiermode...

Gruß aus Berlin
Michael

von Stefan F. (Gast)


Lesenswert?

Sorry stimmt. Ich habe vom falschen Absatz abgeguckt. GPIO 0 muss 
natürlich high sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.