Sleep Timer ESP32 - AZ-Delivery

Hallo zusammen,

wie viele vll. wissen unterstützt das Dev Board mit ESP32 von Espressif den Deep Sleep Modus. Leider wurde diese Funktion nicht gut implementiert, es gibt gleich mehrere Schwächen die es zu beachten gilt. Zum ersten geht bei einem Deep Sleep der Inhalt aller Variablen verloren, zum zweiten startet der ESP32 nach einem Deep Sleep wakeup wieder in die void setup() Schleife. Hinzukommt ein noch schlimmeres Problem: Der Wakeup funktioniert nicht zuverlässig. Hat sich der ESP ein paar mal schlafen gelegt, kann es passieren das er einfach nicht mehr aufwacht. Ohne diese Fallstricke währe der Deep Sleep Modus nur ein Dreizeiler. Da jedoch viele Kunden damit Probleme haben möchte ich hier einen Sketch zur Verfügung stellen und kurz kommentieren worauf es ankommt.

Hardware:

  • ESP32 Dev Board C
  • LED rot
  • LED blau

Die Verdrahtung:

 Dev Board LED rot LED blau
22 +
23 +
GND GND GND

 

Für die LEDs werden Vorwiderstände empfohlen, erforderlich sind sie nicht :)

 

Der Code:

 

#define uS_TO_S_FACTOR 1000000  //haben wir aus dem Beispiel
#define TIME_TO_SLEEP  10 //nomen est....

RTC_DATA_ATTR int bootCount = 0; //nur Werte im RTC-Speicher
//bleiben erhalten
weshalb wir alle
//Variablen in diesen Speicherbereich schreiben
//Leds zur Überprüfung ob es funktioniert: int REBOOT_LED = 23; //blau int BOOT_LED = 22; //rot void setup(){ //bei jedem Wakeup geht es hier los  pinMode(REBOOT_LED,OUTPUT); //bei jedem Start  pinMode(BOOT_LED,OUTPUT); //beim ersten Start  delay(500); //delay nicht entfernen!  //Nur mit delay an dieser Stelle wacht er zuverlässig auf    if(bootCount == 0) //Wenn der Counter im RTC-Speicher auf Null steht  {      digitalWrite(BOOT_LED,HIGH);      bootCount = bootCount+1;  }else //bei jedem wakeup  {      digitalWrite(REBOOT_LED,HIGH);  }    delay(1000); //LEDs leuchten 1 Sekunde  digitalWrite(REBOOT_LED,LOW);  digitalWrite(BOOT_LED,LOW);  // bevor Sie wieder aus gehen  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
//stellt den Timer  esp_deep_sleep_start(); //Gute Nacht! } void loop(){ //der Vollständigkeit halber   }

 

Esp-32Grundlagen software

5 comments

Bruno

Bruno

Hallo,
der Source-Code des c‘t Projektes findet sich dort ( https://github.com/ct-Open-Source/ESP-Doorsensor ).

Peter N.

Peter N.

Ich habe diesen Aufbau getestet. Die Strommessung ergab folgende Werte:
Aufwachmodus 50mA mit zwei LEDs. Ohne 48mA. Der Schlafmodus hat erschreckende 9mA!
Dieser Wert ist einfach nicht für Batteriebetrieb geeignet.
Wenn ich den Wroom 32 Mini einsetze, komm ich auf 41mA aufgewacht und 1,6mA
im Sleepmodus. Das könnte man eventuell durch Entfernen der roten LED noch weiter senken.

Markus W

Markus W

@Piet
Ist hier nicht eher das Problem die Selbstentladung der Batterien und dass diese nach der Woche einfach nicht mehr die notwendige Spannung besitzen? Wie sind denn deine Werte an den Batterien gemessen?
Ich selbst bin gerade in der letzten Phase meine ePaper-Display-Projektes. Das betreibe ich mit einem 18650-Akku mit 3000mAh. Laut Logik und Theorie sollte ich damit Jahre hinkommen. Zumal ich den ESP32 nur 1x täglich aufwecke.

Piet

Piet

ich habe da ein ganz anderes Problem … Ich versorge den ESP32 mit zweimal 2200 mAh Batterien. Der Chip ist im deep sleep modus (hibernation state), wacht alle 2 Stunden auf misst die Feuchtigkeit (capacitive sensor), sendet sie via Bluetooth Low Energy und geht wieder schlafen. Funktioniert soweit gut.
In dieser Konfiguation sollte der Chip Monate (mal liest sogar von Jahre) laufen. Tatsächlich bringt er es gerade mal auf eine Woche.

Veit

Veit

puh 500ms ist aber schon recht lang wenn man einen quick-wakeup haben will …. in der ct gabs mal einen türsensor mit esp32 der sich immer schlafen gelegt hat, da war sicherlich keine 500ms pause drin. wäre vielleicht mal interessant ob die auch das problem hatten bzw wie sie es gelöst haben.

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery