ESP8266 wacht aus dem deepsleep nicht auf

OP #7701130
Lesenswert?

Hallo,

ich habe mir bei AZ-Delivery ein paar ESP8266 geholt. Quasi die Wemos D1 Mini clones.

Nun wollte ich den deepsleep aktivieren, allerdings wachen die Teile nicht wieder auf, bzw mit viel Glück nur einmal. Zuerst habe ich einen Sketch verwendet, der schon auf anderen D1 läuft. Als das nicht funktionierte, habe ich mich an ein einfaches Beispiel gehalten (https://randomnerdtutorials.com/esp8266-deep-sleep-with-arduino-ide/) und einen einfachen Sketch aufgespielt.

/*

void setup() { Serial.begin(115200); Serial.setTimeout(2000);

// Wait for serial to initialize. while(!Serial) { }

// Deep sleep mode for 30 seconds, the ESP8266 wakes up by itself when GPIO 16 (D0 in NodeMCU board) is connected to the RESET pin Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds"); ESP.deepSleep(30e6);

// Deep sleep mode until RESET pin is connected to a LOW signal (for example pushbutton or magnetic reed switch) //Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal"); //ESP.deepSleep(0); }

void loop() { }

Egal wie viele Sekunden ich auswähle, nach Ablauf der Schlafzeit leuchtet die blaue LED kurz auf, wie als würde ich den Kontroller an den Strom hängen. Mehr passiert nicht, auf der console erscheinen nur kryptische Zeichen und das war's. Kein nächster deepsleep.

Ich habe RST und D0 mit einem Draht verbunden. Strom bekommt das ganze gerade über USB vom PC.

Wie gesagt, das gleiche Setup funktioniert mit einem D1 von einem anderen Anbieter ohne Probleme seit Wochen.

Habt ihr noch eine Idee, wo ich ansetzen muss?

Gast #7701224
Lesenswert?

Zwischen den Timer Ausgang und dem Reset Eingang gehört ein 470 Ohm Widerstand. Wenn du dazu die Lötbrücke auf der Rückseite der Platine verwendest hast du ihn dabei.

Und füge hinter deepsleep einen delay(100) ein, das soll manchmal auch helfen.

OP #7701992
Lesenswert?

Ich habe den Code wie von euch geschrieben angepasst. Serielle Geschwindigkeit auf 74880, den Pull-up gesetzt und am Ende nach ESP.sleep einen Delay eingebaut.

Nun sehe ich zwar etwas auf der Konsole, aber der Controller wacht nur einmal nach 30 Sekunden auf.

Das erscheint, nachdem das Teil Strom bekommen bzw. über den Reset Knopf gestartet wurde:

1
load 0x4010f000, len 3584, room 16 
2
tail 0
3
chksum 0xb0
4
csum 0xb0
5
v2843a5ac
6
~ld
7
I'm awake, but I'm going into deep sleep mode for 30 seconds

Und das erscheint nach 30 Sekunden:

1
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

Im Anschluss habe ich noch einen 470 Ohm Widerstand zwischen die beiden Pins gesteckt. Erstmal nur auf einem Steckbrett, aber es hat nichts an dem o.g. Ergebnis geändert.

#7702266
Lesenswert?

Hallo,

ich bin vor einigen Monaten in die gleiche Falle getappt, ebenfalls bestellt bei AZ Delivery. Und ja, es scheint etwas mit der Flash-Bestückung zu tun zu haben. Hab auch ewig mit Oszi und unterschiedlichsten R,C Bestückungen am besagten GPIO16-Kanal rumgespielt, ohne Erfolg. Daraufhin hab ich testweise nochmal eine Handvoll ESP01-S diesmal bei Roboter-Bausatz Dot de bestellt. Und mit denen funktionierte der DeepSleep!

Ich habe mal zwei Bilder der unterschiedlichen Versender angehängt. Auffällig ist der unterschiedliche Aufdruck (sowohl Bottom als auch Top). Ausserdem wurden die ESPs von R-B einzeln in ESD Blistergurtstücken geliefert.

Steve

PS: nicht wundern, ich hab ein unmodifiziertes Modul von AZ für das Foto verwendet.

PPS: ok, sehe grade, dass es sich um ein D1 mini handelt und nicht um ein ESP01-S

Angehängte Dateien:
#7702489
Lesenswert?

Wie ich bisher sehen konnte, ist das Deep-Sleep des ESP eine absolute Krücke und überhaupt nicht vergleichbar, z.B. mit dem Power-Down eines AVR. Eine genaue Beschreibung des Deep-Sleep konnte ich leider nirgends finden, sondern nur rudimentäre Beispiele.

Wie es aussieht, muß man den Resetpin über einen IO-Pin für eine bestimmte Zeit extern ziehen und darin liegt wohl das Hauptproblem. Der Pin schaltet sich durch das Reset natürlich selber wieder ab, d.h. der Puls wäre zu kurz und daher bleibt der ESP im Nirwana hängen. Empfohlen wird ein RC-Glied (470R+100nF) zur Verlängerung. Ob das immer sicher ausreicht, um vom Flash neu in den RAM zu booten, wissen die Götter. Das könnte jedenfalls die Abhängigkeit vom Flash-Typ erklären, daß manche etwas länger brauchen zu Aufwachen. Bei Problemen würde ich daher erstmal das RC-Glied vergrößern.

Ich würde zum Stromsparen einen erheblich besser ausgerüsteten µC benutzen (z.B. AVR) und nur zum Funken den ESP unter Strom setzen.

Falls jemand einen Link zum Datenblatt des ESP8266 kennt, welches die Bezeichnung auch verdient, immer her damit. Das mit nur 117 Seiten verdient es jedenfalls nicht.

#7702701
Lesenswert?

Ich würde mal versuchen GPIO7 mit einem Pull-up high zu ziehen, das ist der zweite Kontakt unten, nicht nach außen geführt da verbunden mit dem Flash Speicher.

https://github.com/esp8266/Arduino/issues/6007#issuecomment-2024041618

andere Möglichkeit: im Deep Sleep muss ja eine RTC aktiv sein. der Reset wird ja auch direkt nach 30 sek getriggert. kann es sein dass es so konzipiert ist dass das setup() im RAM den (zu kurzen) Reset überlebt? Dein loop() ist ja leer, also weißt Du nicht ob er wach ist oder sich aufgehängt hat. It's not a bug it's a feature. Ich würde das testen.

OP #7702759
Lesenswert?

Die nächsten Tage werde ich eure Tipps und Vorschläge mal testen, ich komme leider nicht jeden Tag dazu.

Zwischenzeitlich habe ich mich mit AZ Delivery in Verbindung gesetzt und das Fehlerbild geschildert. Als Antwort kam folgendes:

"Unsere technische Abteilung geht von einem Hardwaredefekt aus." Ich bekomme jetzt eine Rückerstattung.

Was ich noch hinzufügen möchte: Mit anderen ESP8266, bestellt beim schnellen Ali, habe ich überhaupt keine Probleme mit dem DeepSleep. Nur habe ich da inzwischen leider 2 von 5 defekten Kontrollern. Sie lassen sich nicht mehr flashen. Deshalb habe ich mich diesmal für "Markenteile" entschieden. ;-)

#7702839
Lesenswert?

Carsten schrieb:

Nur habe ich da inzwischen leider 2 von 5 defekten Kontrollern. Sie lassen sich nicht mehr flashen.

Ich denke mal nicht, daß die wirklich defekt sind. Da wirds irgendwie die Bootfunktion im Flash gerissen haben. Viele ARM haben einen Ur-Bootloader über die UART, der über bestimmte Pins aktiviert wird. Damit kann man einen defekten Custom-Bootloader im Flash wieder reparieren, d.h. neu programmieren. Dazu müßte man aber ein Datenblatt haben, wo beschrieben steht, wie das geht. Die ESP scheinen doch ziemlich mit der heißen Nadel gestrickt worden zu sein.

(Firma: Gast) #7702909
Lesenswert?

Peter D. schrieb:

Da wirds irgendwie die Bootfunktion im Flash gerissen haben.

Der Bereich wird als ROM bezeichnet. Ob das in Realität ein Flash ist, weiß ich nicht. Es liegt auf jeden Fall nicht in dem Flash Baustein, in dem das Programm oder SPIFFS steckt. Habe aber noch nie davon gehört, dass "eingebaute Bootloader" kaputt geht, oder gar repariert werden könnte. Einen Weiteren Bootloader gibt es üblicher weise nicht, wenn man von dem OTA Verfahren mal absieht.

Gast #7702936
Lesenswert?

Der Bootloader ist unveränderlich. Das esptool lädt zunächst einen "Stub" von der Festplatte des PC in den RAM des ESP und startet ihn. Dieser übertragt dann erst die Firmware in den Flash Speicher.

Laut Doku von ESP dient der Stub auch dazu, Bugs des festen Bootloaders zu umgehen.

https://docs.espressif.com/projects/esptool/en/latest/esp8266/esptool/flasher-stub.html

Peter D. schrieb:

Die ESP scheinen doch ziemlich mit der heißen Nadel gestrickt worden zu sein.

Den Eindruck habe ich auch.

OP #7703908
Lesenswert?

Zuerst einmal möchte ich mich bedanken, wie ich hier aufgenommen wurde und dass ihr euch so rege beteiligt. Das kenne ich von anderen Foren leider nicht.

Mit dem Codebeispiel, welches @jackfrost verlinkt hat, funktioniert der Sleep. Allerdings habe ich noch nicht verstanden, wie ich eine andere Zeit zum Schlafen übergebe. Ich habe den Wert im Aufruf der Funktion

1
 nk_deep_sleep(2000000);

verändert, allerdings wacht der ESP immer nach ca. 28 Sekunden wieder auf. Mal ein paar mehr oder weniger Sekunden. Ich möchte es gerne auf 15 Minuten verlängern, aber egal, was ich als größere Zahl eingebe, es ändert nichts. Habt ihr da vielleicht noch eine Idee?

Jetzt werde ich mich noch damit beschäftigen, wie ich die nicht mehr funktionierenden ESPs wieder flashen kann. Auch ein neues Gebiet für mich, aber man lernt ja nie aus. ;-)

#7704080
Lesenswert?

Ja, wenn es bloß ein Datenblatt gäbe, wo die Register beschrieben sind, die an den magischen Adressen liegen. Daß ein 64Bit Wert übergeben wird, heißt noch lange nicht, daß auch 64 Bit signifikant sind. Hast Du mal mit verschiedenen Werten probiert, ob der Parameter überhaupt einen Einfluß hat?

#7704290
Lesenswert?

Carsten schrieb:

allerdings wacht der ESP immer nach ca. 28 Sekunden wieder auf. Mal ein paar mehr oder weniger Sekunden. Ich möchte es gerne auf 15 Minuten verlängern, aber egal, was ich als größere Zahl eingebe, es ändert nichts. Habt ihr da vielleicht noch eine Idee?

Ob er tatsächlich nur 30s kann, musst Du anhand seines Datenblattes klären.

Wenn dem so ist, dann bei jedem Aufwachen eine Variable erhöhen und bei Wert größer 30 die gewünschten Dinge ausführen.

Der G* fördert anderes zutage:

https://thingpulse.com/max-deep-sleep-for-esp8266/

Beitrag "ESP8266 - maximale deep-sleep Zeit?"

Gast #7704306
Lesenswert?

Manfred P. schrieb:

Ob er tatsächlich nur 30s kann, musst Du anhand seines Datenblattes klären.

Kann ich auch so beantworten: Ohne Tricks sind maximal 71 Minuten möglich.

Wenn dem so ist, dann bei jedem Aufwachen eine Variable erhöhen

Nein, denn der RAM Inhalt geht bei jedem Aufwachen verloren. Man kann dazu allerdings (mit etwas mehr Aufwand als eine simple Variable) Flash oder Speicher der internen RTC verwenden.

OP #7708071
Lesenswert?

Nachdem ich in o.g. Github-Link noch einmal nachgefragt habe, hat mir folgender Aufruf geholfen:

1
nk_deep_sleep(300*1000000);

Wobei 300 die Sekunden sind. Nachdem ich es gerade auf 900 geändert habe, schläft der ESP ca. 15 Minuten. Das passt für mich.

Danke euch für die Denkanstöße.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren