ESP8266 Deep-Sleep - Alles was du über den Stromsparmodus wissen musst

von cooper.bin
veröffentlicht am 30.07.2024 aktualisiert am 30.07.2024

Stell dir vor, du baust einen wetterfesten Außensensor, der einmal täglich die Temperatur misst und die Daten an deinen Server sendet. Oder du entwickelst einen Bewegungssensor für dein Smart-Home-System, der nur aktiviert wird, wenn jemand den Raum betritt. Vielleicht planst du auch eine batteriebetriebene Wildtierkamera, die nur bei Bewegungserkennung Bilder aufnimmt. In all diesen Fällen sorgt Deep-Sleep dafür, dass der Stromverbrauch minimiert wird und deine Sensoren monatelang ohne Batteriewechsel laufen können.

Produktempfehlungen in Verbindung mit dem Amazon Partnerprogramm:

¹ Der angegebene Preis ist eine Schätzung und kann von den Tagesaktuellen Preisen auf Amazon abweichen.

Mit Deep-Sleep kannst du deinen ESP besonders energieeffizient betreiben und die Batterielaufzeit erheblich verlängern. Aber Achtung: Nicht alle Boards sind gleich effizient im Deep-Sleep-Modus.

Zum Kapitel springen Was ist Deep Sleep?

Deep-Sleep ist ein Zustand des Boards, in dem es einen sehr geringen Stromverbrauch aufweist. Grund dafür ist, dass so gut wie alle Funktionen des Boards außer Betrieb sind. Besser gesagt: Alle Funktionen bis auf die RTC (Real-Time Clock).

Hier mal eine Übersicht, welche Funktionen des Boards im Deep-Sleep Modus betroffen sind:

Funktion Zustand
WLAN aus
System clock aus
CPU aus
RTC an

Wir erkennen, dass der Deep-Sleep-Modus tatsächlich ein Standby-Modus ist, in dem nur begrenzte Funktionen verfügbar sind. Dieser Modus ist jedoch entscheidend, um den Stromverbrauch zu minimieren und die Batterielaufzeit zu verlängern.

Zum Kapitel springen Stromverbrauch im Deep-Sleep

Laut verschiedenen Angaben im Netz beträgt der Stromverbrauch während dem Deep-Sleep zwischen 10 und 20 µA. Das entspricht gerade einmal 0,01 - 0,02 mA. Das ist der Wahnsinn! Im Datenblatt ist der Deep-Sleep mit 20 µA angegeben, und damit kann der ESP, je nach Aufgabe, monatelang mit einer einzigen Batterie betrieben werden.

Mehr dazu findest du im Datenblatt des ESP8266 0a-esp8266ex_datasheet_en.pdf im Kapitel Table 3-4. Power Consumption by Power Modes.

Produktempfehlungen in Verbindung mit dem Amazon Partnerprogramm:

¹ Der angegebene Preis ist eine Schätzung und kann von den Tagesaktuellen Preisen auf Amazon abweichen.

Allerdings ist hier Vorsicht geboten. Der Deep-Sleep ist nicht in allen Fällen gleich effizient. In Verbindung mit Entwicklerboards wie zum Beispiel dem D1 Mini kann es zu einem erhöhten Stromverbrauch kommen. Damit ist der Deep-Sleep bei diesen Boards unter Umständen nicht wirklich brauchbar. Entwicklerboards haben zusätzliche Bauteile wie unter anderem den Serial-Konverter, der zusätzlich Strom verbraucht und so die Akkulaufzeit erheblich verringert. In der Messung sind das bei einem ESP8266 D1 Mini etwa 0,001A (1000 µA). Eine Messung des Stromverbrauchs war mir mit dem ESP01-S im Deep-Sleep nicht möglich.

Zum Kapitel springen Vergleich des Stromverbrauchs im Deep-Sleep

Gerät Stromverbrauch im Deep-Sleep Stromverbrauch in mA
ESP8266 (Datenblatt) 20 µA 0,02 mA
ESP8266 D1 Mini 1000 µA 1,0 mA

Zum Kapitel springen Beispielrechnung mit einem 300mAh Akku

Angenommen, wir verwenden einen 300mAh Akku. Um zu berechnen, wie lange der Akku hält, verwenden wir die folgende Formel: Batterielaufzeit (in Stunden) = Batteriekapazität (in mAh) / Stromverbrauch (in mA)

  • ESP8266 (Datenblatt):
    Batterielaufzeit = 300mAh / 0,02mA = 15000 Stunden
    Das sind etwa 625 Tage oder knapp 1,7 Jahre.

  • ESP8266 D1 Mini:
    Batterielaufzeit = 300mAh \ 0,02mA = 300 Stunden
    Das sind etwa 12,5 Tage.

Diese einfache Rechnung zeigt, wie wichtig es ist, den Stromverbrauch genau zu kennen, um die Batterielaufzeit optimal zu nutzen. Natürlich sind diese Werte rein theoretisch und in der Praxis kann es definitiv zu anderen Werten kommen. Jedoch zeigt der Vergleich deutlich, dass Deep-Sleep nicht immer gleich effizient ist.

Zum Kapitel springen Möglichkeiten zum Aufwecken

Zum Aufwecken des ESP8266 während eines Deep-Sleeps gibt es zwei Möglichkeiten:

  1. Aufwecken per Knopfdruck
    Eine Möglichkeit, den ESP aus dem Schlaf zu holen, ist der Knopfdruck. Hierbei gibt es keine Zeitbeschränkung. Das Aufwecken per Knopfdruck könnte zum Beispiel für Fernbedienungen jeglicher Art verwendet werden.

  2. Automatisch nach Ablauf einer bestimmten Zeit
    Der ESP kann auch für eine bestimmte Zeit in den Deep-Sleep versetzt werden. Die maximal mögliche Dauer beträgt hierbei 71 Minuten. Diese Methode eignet sich unter anderem für Sensoren, die regelmäßig einen Wert liefern oder abfragen sollen.

Die Beschränkung auf 71 Minuten liegt an der Größe der Variable, die die Zeit im Deep-Sleep speichert. Der Wert wird in Mikrosekunden angegeben und die maximale Größe eines 32-Bit-Integers beträgt 4.294.967.295. Wenn man diesen Wert in Mikrosekunden umrechnet, erhält man etwa 71 Minuten.

Zum Kapitel springen Deep Sleep mit Aufwachen per Knopfdruck

Um den ESP auf unbestimmte Zeit in den Deep-Sleep zu schicken, wird lediglich eine Zeile Code benötigt.

ESP.deepSleep();

In einem Programm könnte das so aussehen:

void setup() {  
   pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
   digitalWrite(LED_BUILTIN, LOW);
   delay(5000);
   ESP.deepSleep();
}

Sobald der ESP mit Strom versorgt wird, leuchtet die blaue LED für 5 Sekunden. Nach Ablauf des delay(5000); schicken wir den ESP auf unbestimmte Dauer in den Deep-Sleep-Modus. Zum Aufwecken muss der Pin RST kurz mit GND verbunden werden.

ESP8266 -01s - Pinout Minimal ><

ESP-01 Deep Sleep Autowakeup Brücke ><

Sobald RST nicht mehr mit GND verbunden ist, startet der ESP und führt den gespeicherten Programmcode aus. Die Zeile ESP.deepSleep(); schickt den ESP anschließend wieder schlafen, bis wir ihn erneut aufwecken.

Fertig ist der ESP, der auf Knopfdruck startet, das Programm ausführt, und danach wieder pennen geht.

Zum Kapitel springen Deep Sleep mit Aufwachen per Zeit

Um den ESP für eine bestimmte Zeit in den Deep-Sleep zu schicken, wird die selbe Zeile Code benötigt, diesmal aber mit Zeitangabe. Die Angabe der Zeit erfolgt in Mikrosekunden.

ESP.deepSleep(5000000);

Diese Zeile schickt den ESP für 5 Sekunden in den Deep-Sleep. In der Funktion können auch mathematische Bezeichnungen verwendet werden. Folgende Zeile schickt den ESP ebenfalls für 5 Sekunden in den Deep-Sleep.

ESP.deepSleep(5e6);
void setup() {
   pinMode(LED_BUILTIN, OUTPUT);  
}

void loop() {
   digitalWrite(LED_BUILTIN, LOW); 
   delay(5000);
   ESP.deepSleep(5e6);
}

Auch hier gilt: Der ESP führt das Programm aus und wird anschließend in den Deep-Sleep geschickt, diesmal aber nur für 5 Sekunden. Leider geht das Aufwecken nicht ohne Weiteres automatisch.

Damit sich der ESP nach Ablauf der 5 Sekunden selbst wecken kann, muss eine dauerhafte Verbindung zwischen RST und GPIO16 hergestellt werden. Erst diese Verbindung automatisiert den Vorgang des Weckens.

ESP-01 Deep Sleep Autowakeup Brücke ><

ESP-01 Deep Sleep Autowakeup Brücke ><

Sobald die Verbindung steht, haben wir einen ESP, der alle 5 Sekunden das gespeicherte Programm ausführt und sich anschließend selbst wieder in den Deep-Sleep versetzt. Übrigens: Der ESP kann auch bei der letzteren Methode jederzeit durch die Verbindung von RST und GND manuell oder per Knopfdruck aufgeweckt werden.


cooper.bin Avatar

cooper.bin

Unterstütze mich und meine Arbeit, so kann ich weiter meiner Leidenschaft nachgehen. Ich lege viel Wert auf Qualität und stecke daher sehr viel Zeit in meine Beiträge. Wenn sie dir gefallen kannst du dir gerne auch meine anderen Artikel anschauen.

Mit PayPal unterstützen

Ich bin auf dem makesmart Discord-Server aktiv. Dort bin ich auch relativ gut erreichbar.

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

cooper.bin am 05.03.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

cooper.bin am 12.03.2024

ESP8266 - Ein einfacher Webserver mit mDNS

Während Webserver wie Apache2 oder NGNIX auf Rechnern laufen, kann man auch auf einem ESP8266 einen Webserver verwenden. In diesem Tutorial werden wir ein Grundgerüst implementieren.

cooper.bin am 13.02.2024

ESP8266 D1 Mini programmieren - Der Start mit der Arduino IDE

Erfahre, wie du den ESP8266 D1 Mini mit der Arduino IDE programmierst. Dank den kostenlosen Entwicklungswerkzeugen und der microUSB-Buchse ist das für jeden ein Kinderspiel.

cooper.bin am 10.02.2024

HC-SR04 und JSN-SR04T - Entfernungen messen mit Ultraschallsensoren am ESP8266

Lerne in diesem Tutorial, wie die Ultraschallsensoren HC-SR04 und JSN-SR04T mit ESP8266 D1 Mini für Distanzmessungen eingesetzt werden, die Grundlagen, Anwendungen und mehr.

cooper.bin am 09.03.2024