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. /* * ESP8266 Deep sleep mode example * Rui Santos * Complete Project Details https://randomnerdtutorials.com */ 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?
ändere mal auf 74880 baud und setze den Pull-up
1 | Serial.begin(74880); |
2 | pinMode(D0, WAKEUP_PULLUP); |
:
Bearbeitet durch User
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.
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.
Monk schrieb: > Und füge hinter deepsleep einen delay(100) ein, das soll manchmal auch > helfen. versuch's mal andersrum bzw im void loop() { }
:
Bearbeitet durch User
Ist das ein originales Wemos D1 Mini Board? Wenn nicht, haben die vielleicht Bauteile um den Reset Pin herum eingespart. Siehe http://stefanfrings.de/esp8266/index.html#deepsleep
Mir fällt da gerade ein, dass hier mal jemand von Flash Speichern berichtete, mit denen der Chip aus dem Deep-Sleep Modus nicht mehr richtig aufwachen konnte. Das Fehlerbild war das gleiche, wie bei dir. Siehe Beitrag "ESP01s + deepsleep"
Das hier steht in der Beschreibung der Bestellung: "Der AZ-Delivery D1 mini ist ein Mini-NodeMcu WiFi Board basierend auf einem ESP-8266-12F mit Micro-USB-Anschluss." Morgen schreibe ich dem Anbieter mal eine Mail mit dem Fehlerbild.
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
:
Bearbeitet durch User
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.
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.
:
Bearbeitet durch User
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. ;-)
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.
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.
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.
Hi, Bei meinen ESPs lag es am Flash, der ist nach dem Deep Sleep nicht mehr aufgewacht und das Programm konnte vom Bootloader nicht geladen werden. Das Fehlerbild war wie beim TO. Geholfen hat der Sleep Modus von https://github.com/esp8266/Arduino/issues/6318#issuecomment-706386677 Gruß JackFrost
Bastian W. schrieb: > Geholfen hat der Sleep Modus von > https://github.com/esp8266/Arduino/issues/6318#issuecomment-706386677 Also magische Zahlen an magische Adressen schreiben. Einfach nur gruselig. Da bin ich ja heilfroh, keinen ESP gekauft zu haben.
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. ;-)
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?
Ja, ich habe den Wert mal 5 genommen und auch mal 10, allerdings bleibt es immer bei Sleep Zeiten zwischen 25 und 32 Sekunden. Wenigsten bei mal 10 hätte ich einen spürbaren Unterschied erwartet. Ich spiele mal noch ein wenig rum.
ansonsten teste auch noch mal die Lösung mit dem Widerstand
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?"
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.
Monk schrieb: > 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. Das wird auch auf der Webseite gesagt, deren link ich angehängt hatte. Wäre es Dir jetzt zu aufwendig, ihm den Lösungsweg aufzuzeigen?
Manfred P. schrieb: > Wäre es Dir jetzt zu aufwendig, ihm den Lösungsweg aufzuzeigen? Der normale Weg funktioniert halt bei ihm nicht, wegen fehlerhafter Hardware. Er bekommt bereits Ersatz.
Monk schrieb: > Der normale Weg funktioniert halt bei ihm nicht, wegen fehlerhafter > Hardware. was man ja korrigieren könnte https://www.mikrocontroller.net/topic/goto_post/7702701
:
Bearbeitet durch User
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.