Forum: Mikrocontroller und Digitale Elektronik ESP8266 startet Code nach Deepsleep nicht mehr


von Leon (leeonn)


Lesenswert?

Hallo zusammen,

ich baue mir aktuell einen Temperatursensor, was eigentlich ein relativ 
einfaches Projekt sein sollte. Dachte ich zumindest :^) - Mein ESP8266 
(NodeMCU) geht in den Deepsleep, wacht auch wieder auf (zumindest zeigt 
die Konsole bzw. der Bootloader das an), aber der Code wird nicht 
ausgeführt. Ich habe lediglich eine LED an Pin D8, einen DS18B20 an Pin 
D1 und den Pin D0 mit RST verbunden.

Mein Code sieht wie folgt aus (Beispielcode, ohne die Temperaturmessung 
etc...):
1
void setup() {
2
  // put your setup code here, to run once:
3
  Serial.begin(9600);
4
  while (!Serial);
5
  Serial.println("Waking up...");
6
}
7
8
void loop() {
9
  // put your main code here, to run repeatedly:
10
  Serial.println("Looping...");
11
  startDeepSleep();
12
}
13
14
void startDeepSleep(){
15
  Serial.println("Going to deep sleep...");
16
  ESP.deepSleep(5 * 1000000); yield();
17
}

Danke schonmal im Vorraus!

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Lässt er sich nach dem DeepSleep durch einen Druck auf die Reset Taste 
wieder starten?

D8 (GPIO15) muss beim Booten auf LOW gezogen werden. Dazu hat das Board 
einen 12k Ohm Pulldown Widerstand.

> Ich habe lediglich eine LED an Pin D8

Schaltplan?

: Bearbeitet durch User
von Leon (leeonn)


Lesenswert?

Ja, das funktioniert. Er wacht ja auch 'normal' auf, jedoch wird der 
Code einfach nicht ausgeführt.

von Leon (leeonn)


Angehängte Dateien:

Lesenswert?

Anbei meine Schaltung

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Und was macht?
> yield();

Wird die noch ausgeführt oder nicht? Bleibt eventuell diese Funktion 
"hängen"?

von Leon (leeonn)


Lesenswert?

Ich glaube, diese hat nichts damit zu tun. Ein anderer Code aus dem Netz 
macht genau das selbe. Auch hier bleibt der Fehler bestehen

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Leon schrieb:
> Ja, das funktioniert. Er wacht ja auch 'normal' auf, jedoch wird der
> Code einfach nicht ausgeführt.

Unklare Antwort. Wird der Code ausgeführt, wenn du während der Blockade 
den Reset Taster antippst?

> Anbei meine Schaltung

Die LED braucht einen Vorwiderstand.

Versuche es ohne die LED und ohne den Temperatursensor.

: Bearbeitet durch User
von Mario M. (thelonging)


Lesenswert?

Leon schrieb:
> aber der Code wird nicht ausgeführt

WELCHER Code wird nicht ausgeführt? Nach deepSleep wird nichts mehr 
ausgeführt und irgendwann kommt ein Reset und alles startet von vorn mit 
setup().

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Da ich gleich uns Bett gehe, nich eine verfrühte Info:

Das NodeMCU Board taugt nur schlecht für den Deep Sleep, weil due 
Bauteile um den ESP herum einige Milliampere aufnehmen.

Und es gibt ESP Module, die mit Flash Chips bestückt sind, die im Deep 
Sleep Modus ausfallen. Beim danach folgenden Reset kommt es zu 
Lesefehlern. Ob das bei dir zutrifft weiß ich nicht. Das ergäbe sich aus 
den Antworten zu meinen Rückfragen.

von Leon (leeonn)


Lesenswert?

Der Code wird nach dem Reset nicht mehr ausgeführt. Der Reset wird 
allerdings durchgeführt. Seltsamerweise scheint es allerdings im Moment 
zu funktionieren. Ich melde mich voraussichtlich morgen noch einmal.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Wenn du die Baudrte im Sketch auf 74880 stellst, kannst du bequem sowohl 
die Meldungen des Bootloaders als auch die eigenen Textausgaben sehen.

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Leon schrieb:
> Der Code wird nach dem Reset nicht mehr ausgeführt. Der Reset wird
> allerdings durchgeführt

Zeige die Meldungen vom Bootloader. Und teste wie gesagt ohne LED und 
ohne Sensor, um diese als Fehlerquelle auszuschließen.

von Mike J. (linuxmint_user)


Lesenswert?

Leon schrieb:
> aber der Code wird nicht
> ausgeführt. Ich habe lediglich eine LED an Pin D8, einen DS18B20 an Pin
> D1 und den Pin D0 mit RST verbunden.

Verbinde mal SDD0 (Pin10) über 20kOhm mit Vcc (Pin8).

von Peter D. (peda)


Lesenswert?

Deep Sleep beim ESP8266 ist a pain in the ass.
Das Portpin an Reset ist ein Würgaround und funktioniert eher zufällig, 
da Reset alle Portpins sofort wieder abschaltet. Da muß man also noch 
mit einem RC-Glied rumexperimentieren, bis das Resetsignal lang genug 
ist.

Will man Deep Sleep zuverlässig verwenden, sollte man unbedingt den 
ESP32 nehmen, der kann direkt aufwachen, ohne den Resetpin zu 
vergewaltigen. Und dann bleiben auch alle IO-Pins ungeändert.

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.