Sleep Timer ESP32

Hello everybody,

As many people know, the ESPR32 dev board supports deep sleep mode. Unfortunately, this function was not implemented well, there are several weaknesses to be considered. First, the content of all variables is lost in a deep sleep, second, the ESP32 starts again in the void setup () loop after a deep sleep wakeup. In addition, there is an even worse problem: the wakeup does not work reliably. If the ESP has gone to sleep a few times, it may just not wake up. Without these pitfalls, deep sleep mode would only be a three-liner. However, since many customers have problems with this, I would like to provide a sketch here and briefly comment on what is important.

Hardware:

  • ESP32 Dev Board C
  • LED red
  • LED blue

The wiring:

Dev board LED red LED blue
22 +
23 +
GND GND GND

 

Series resistors are recommended for the LEDs, they are not required :)

 

The code:

 

#define uS_TO_S_FACTOR 1000000  // we have from the example
#define TIME_TO_SLEEP  10 // nomen est ....

RTC_DATA_ATTR int bootCount = 0; // only values ​​in the RTC memory
// remain
which is why we all
// Write variables to this memory area
// Leds to check if it works: int REBOOT_LED = 23; //blue int BOOT_LED = 22; //red void set up(){ // every wakeup starts here  pinMode(REBOOT_LED,OUTPUT); // at every start  pinMode(BOOT_LED,OUTPUT); // at the first start  delay(500); // do not remove delay!  // He wakes up reliably only with delay at this point    if(bootCount == 0) // When the counter in the RTC memory is at zero  {      digitalWrite(BOOT_LED,HIGH);      bootCount = bootCount+1;  }else // with every wakeup  {      digitalWrite(REBOOT_LED,HIGH);  }    delay(1000); // LEDs light up for 1 second  digitalWrite(REBOOT_LED,LOW);  digitalWrite(BOOT_LED,LOW);  // before you go out again  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// sets the timer  esp_deep_sleep_start(); //Good night! } void loop(){ //For the sake of completeness   }

 

Esp-32Basics software

4 comments

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. Install ESP32 now from the board manager
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP programming via WLAN