ESP8266 - weckt sich nicht mehr auf

  • Hallo,

    ich beschäftige mich seit ein paar Wochen mit dem ESP8266. Zunächst habe ich mit dem dev Board gebastelt und wollte jetzt meine Sensoren final auf den esp12-f bringen.

    Mein Ziel den alt bekannten Temperatur Logger (Raspi MQTT Broker) und diverse Sensoren die die Daten liefern.


    Eigentlich funktioniert es ja.. Nur halt eigentlich..

    Sprich die Temperatur und Luftfeuchte wird nach dem Start übertragen und die Daten werden dann erfolgreich in die MySQL DB geschrieben.

    Danach legt sich der ESP schlafen (DeepSleep).

    Wenn ich ihn für 30 Minuten schlafen lege, passt es und er weckt sich selber wieder auf und macht weiter.

    Wenn ich die Zeit auf 45 Minuten bzw, mein Plan ist 60 Minuten ändere dann weckt er sich nicht mehr auf.

    60 Minuten ist mein Ziel und 71 sind ja das Maximum somit kann das ja nicht das Problem sein.


    Beim testen ist mir aufgefallen, das der ESP schon relativ warm wird (Batterie Betrieb), bis gerade eben habe ich nicht dran gedacht die Temp mit dem Sensor zu messenX/...

    Es ist aber für meinen Geschmack bei Batteriebetrieb und Minutenlangen deepsleep zu warm, Er ist ja gerade mal für ein paar Sekunden im wachen Zustand.


    Der ESP scheint ein Macke zu haben oder gibt es ein paar Vorschläge?


    Besten Dank!

  • Go to Best Answer
  • Moin tenor,


    ich kann auf der Schnelle auch nichts negatives finden.

    Was mir aufgefallen ist, warum ist GPIO00 an einem Pullup? Er sollte beim Flashen auf Masse liegen. Ansonsten kann man ihn als Pin nutzen.


    Beim testen ist mir aufgefallen, das der ESP schon relativ warm wird

    Bei mir rennt ein NodeMCU permanent. Habe eben den Finger drauf gehabt. Da wird nix warm!


    Hast du mal einen Test programmiert, der ohne externer Hardware, nur den deepsleep testet?

    Ich habe mir eben einen Wemos D1 mini genommen, macht nun 10 Minuten Pause. Der wird aber auch nicht warm.

    Werde ihn morgen mal auf eine Stunde bringen.


    So, mehr fällt mir auch nicht ein...


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Könnte es sein, dass es hier zum "Überlauf" kommt?


    Code
    ESP.deepSleep(1 * 60 * 1000000);


    Code
    ESP.deepSleep(1 * 60l * 1000000l);

    bzw für "unsigned long"

    Code
    ESP.deepSleep(1 * 60ul * 1000000ul);
  • Hallo Zusammen, besten Dank für die Anmerkungen!


    GPIO 0 hatte ich vorher auch frei gelassen, nur ganz am Anfang konnte die Software den Prozessor nicht finden, da habe ich etwas experimentiert und es dann so gelassen.


    Die Codebeispiele zum DeepSleep sehen bei mir so aus, da denke ich nicht das der zum überlaufen kommt, ich werde das heute Abend noch mal testen und den Typ mit angeben.


    Ups, da hast du einen Fehler in meiner Skizze entdeckt :) Diese Linie sollte natürlich nach dem Spannungsregler eingezeichnet sein, so dass überall nur 3,3V hin geht.


    Grüße tenor

  • Moin tenor,


    ich habe hier noch was.


    Quote


    ESP.deepSleep(microseconds, mode) will put the chip into deep sleep. mode is one of WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. (GPIO16 needs to be tied to RST to wake from deepSleep.) The chip can sleep for at most ESP.deepSleepMax() microseconds. If you implement deep sleep with WAKE_RF_DISABLED and require WiFi functionality on wake up, you will need to implement an additional WAKE_RF_DEFAULT before WiFi functionality is available.

    Entnommen aus dem Handbuch ESP8266 Core for Arduino: https://arduino-esp8266.readth…/en/latest/libraries.html


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Moin!

    danke fürs checken, da ich den mode nicht angebe sollte es ja passen, so dass ich den WAKE_RF_DISABLED nicht benötige.

    So funktioniert es ja auch für 30 Minuten. Den ESP.deepSleepMax() werde ich mal testen um auszuschließen das es nicht doch an Zahlen typen liegt ;)


    Ich befürchte jedoch einen defekt da der Chip ja warm wird, das ist denke ich kein gute Zeichen.

    Ich teste das erstmal, ansonsten werde ich das einmal mit einem anderen Chip neu auflöten müssen.

  • Moin tenor,


    mach dir wegen der Größe des Übergabewertes keine Gedanken.

    Aus der esp.h

    Quote


    void deepSleep(uint64_t time_us, RFMode mode = RF_DEFAULT);

    Das sollte reichen. 71 Minuten == 0xFFFFFFFF das ist ein uint32_t


    Ich vermute auch eine defekten ESP...


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

    • Best Answer

    Wenn es wirklich so ist, dass er überhitzt und deshalb nicht mehr aufwacht, dann wäre interessant, woran es liegt.

    - überhitzt er auch im normalen Betrieb, also, wenn er nicht schläft?

    - Überhitzt er nur im Sleep und wenn ja - ist intern was kaputt, das nur im Sleep Modus wirkt, oder hast du vielleicht irgendwas so geschaltet, dass er im Sleep hohe Stromlast hat?

    Hast du mal gemessen, ob irgendein Pin im Sleep viel Strom zieht oder abgibt?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ist der ESP noch auf 160 MHz getaktet? Um die Batterie zu schonen und womöglich auch der Wärme etwas entgegenzuwirken, kannst du den Takt herabsetzen.

    Kelvin

  • Ich meinte der Überlauf findet ggf. beim prä-prozessor-lauf statt - bei der Berechung der Konstanten.

    Ich dachte, oder habe es mir eingebildet, dass ich ein ähnliches Problem hatte - vor Jahren. Entweder Einbildung oder es ist gefixt worden -


    Hier ein kleiner Test


  • Ich habe folgendes getestet, ebenso mit fixen Wert auf 1 Stunde. Der steht einfach nicht mehr auf.

    Code
    uint64_t deepSleepMax = ESP.deepSleepMax();    
    ESP.deepSleep(deepSleepMax, WAKE_RF_DISABLED);

    Du scheinst aber generell mit deiner Vermutung recht zu haben, habe folgendes noch gefunden:

    https://community.platformio.o…p-maximum-time-8266/15281

    Er hatte das Problem das mehr als 37 Minuten nicht funktionieren, konnte es dadurch aber lösen.


    Unter Arduino ist er mit 80MHz eingetragen, habe ihn also nicht übertaktet.

    Im normalen Betrieb wird er auch warm, das halte ich auch für normal, nur im DeepSleep halt nicht mehr.

    Den Sensor hatte ich beim letzten Test nicht mehr dran, so kann es auch nicht an der Beschaltung liegen.


    Ich werde dann wohl oder über dann mal neu auflöten.


    Gibt es noch Verbesserungen an meinem Diagramm? (Abgesehen von der falschen Spannungsversorgung am HTU).

    Den Pull am Reset (nicht eingezeichnet) werde ich wieder weglassen, wie auch den 510 ohm Widerstand am Reset S1.


    Ich hatte am Anfang Problem den Controller zu flashen, deswegen hatte ich den Pullup auch an GPIO 0 dran gemacht und den an RESET.

    Vermutlich lag das auch an dem Controller und ich werde nur die Jumper Richtung Masse realisieren.

    Viele Grüße

    Tenor

  • Nach deinem Schaltplan betreibst du alle I/Os mit den 5 bis 6 Volt Batteriespannung. Nur der VCC vom ESP bekommt 3,3 Volt. Das würde auch erklären warum der so warm wird.

    Du musst alle komponenten an die 3,3 Volt spannung hängen. Ansonsten kann das den ESP töten.

  • Nach deinem Schaltplan betreibst du alle I/Os mit den 5 bis 6 Volt Batteriespannung. Nur der VCC vom ESP bekommt 3,3 Volt. Das würde auch erklären warum der so warm wird.

    Du musst alle komponenten an die 3,3 Volt spannung hängen. Ansonsten kann das den ESP töten.

    Wenn du den Thread erst mal lesen würdest... das wurde bereits in #5 geklärt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Moin tenor und Mitlesende,


    nun kann ich auch 1 Stunde den ESP8266 schlafen legen. Die maximale Schlafenszeit betrug 3 Stunden und 20 Minuten.


    Der Sourcecode des Testes.

    Nachfolgend die "Beweise".


    Danke an tenor für die spannende Anfrage. Hat mir viel Spaß gemacht!


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Guter Ansatz zum langen schlafen legen!

    Ich hätte vermutlich einen externen Speicher benötigt und ein kleines Eeprom mit angeschlossen :)


    Ich werde heute noch den Rest zusammen löten, wegen der Wartezeit kann ich vermutlich erst morgen sehen ob der 2. Versuch besser klappt,

  • Bzgl. zwischenspeichern der Ergebnisse:


    Ich hatte meinen ESP auch Batteriebetrieben. Ich habe den ESP geweckt, die Temperatur/Feuchtigkeit/etc. gelesen und mit den alten Werten verglichen. Bei größeren Änderungen habe ich den Wert via Wifi verschickt, andernfalls hat sich der ESP wieder schlafen gelegt.


    Man kann die Werte im RTC memory des ESPs speichern. Dieser Speicher überlebt einen Reset. Das Problem: Nach einem SW update/aufspielen stehen uninitialisierte Werte im Speicher. Ich habe es so gelöst, dass ich neben den Daten auch eine Checksumme abgespeichert habe. Checksumme ok => Daten ok.



    Das kann man auch für WLAN Parameter verwenden, BSSID, Kanal etc. wodurch die Verbindung schneller aufgebaut werden soll. => Kurze Wachzeit => weniger Batterieverbrauch.


    Aktuell läuft mein ESP allerdings mit Stromkabel, da ich noch einen Feinstaubsensor angeschlossen habe (der allerdings seit gut einem Monat defekt ist und keine Daten mehr liefert :()

  • Sehr gute Idee!

    Ich glaube das nutze ich auch um meine Batterielaufzeit etwas zu strecken.

    Für die ersten Tests habe ich 4 AA in Reihe, die werde ich wohl noch durch einen LiPo ersetzen.


    Auf der anderen Seite kann ich mit der Technik auch das Zeitintervall reduzieren, :)

  • Ich hab nicht verstanden, wo jetzt eigentlich das Problem lag bzw. was denn nun die Lösung war?

    Kann mir das noch mal jemand erklären?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!