Von Jeremy Cook
Der ESP32 ist ein unglaublicher Baustein. Er kann nicht nur Informationen mit Hunderten Megaherz verarbeiten sowie über WiFi und Bluetooth kommunizieren, sondern darüber hinaus mithilfe seiner GPIO-Pins auch vielfältige Aufgaben erledigen. Allerdings bedeutet die hohe Leistung auch einen hohen … Stromverbrauch.
Gerechterweise ist allerdings zu sagen, dass der Stromverbrauch des ESP32 im Vergleich zu ähnlichen Bausteinen vor einem Jahrzehnt tatsächlich äußerst gering ist. Aber für moderne IoT-Anwendungen – insbesondere mit Batteriebetrieb – sind jedoch auch die wenigen Hundert Milliampere bei voller Leistung schon viel zu viel.
Die gute Nachricht ist, dass der ESP32 auch ein System von Energiespar- und Tiefschlafmodi bereitstellt. Bei sorgfältigem Einsatz lässt sich der Stromappetit des ESPs zügeln – oder zumindest auf kurze Aktivitätszeiten beschränken.
Schlafmodi
Der Tiefschlafmodus und andere Energiesparmodi des ESP32 sind in der nachfolgenden Tabelle anhand des Datenblatts zusammengestellt:
Der ESP32 bietet fünf Energiesparmodi: ESP32-Modem-Sleep, Light-Sleep, Deep-Sleep, Hibernation und Power off. Modem-Sleep und Deep-Sleep besitzen mehrere Untermodi mit verschiedenen Stromverbrauchsraten auf der Basis aktiver Verarbeitungsfähigkeiten. Hibernation deaktiviert fast alle Funktionen des Chips außer einer Echtzeituhr (RTC) zum Aufwecken nach einer festgelegten Zeit. Der Wechsel in den Power-off-Modus erfolgt, wenn der CHIP_PU-Pin auf Low gesetzt wird. Die Wiederaufnahme der Verarbeitung ist in diesem Fall nur mit Interaktion von außen möglich.
Dank der Energiesparmodi lässt sich die Stromaufnahme des ESP32 auf Werte zwischen 68 mA und 5 µA (entsprechend 0,068 A und 0,000005 A) drosseln, ohne Berücksichtigung von Power off. Dieser Vorteil wird allerdings dadurch erkauft, dass jeder Modus auch die Nützlichkeit des ESP32 einschränkt, wie nachstehend angegeben:
Ohne Berücksichtigung von Spannungseffekten könnte ein kleiner Akku mit 3,7 V, 850 mA einen ESP32 im Modus Modem-Sleep ungefähr 12,5 Stunden versorgen. Im Modus Light-Sleep wären über 1.000 Betriebsstunden möglich. Im mittleren Deep-Sleep-Modus wären 8.500 Stunden (rund ein Jahr) möglich. Der Hibernation-Zustand würde theoretisch fast 20 Jahre reichen. Selbstverständlich muss sich der Baustein unmittelbar wieder reaktivieren lassen, um nützlich zu sein. Aber mit sorgfältiger Planung erreicht ein ESP32-Setup eine extrem lange Nutzungszeit mit einer Akkuladung.
Deep-Sleep-Unterschiede von ESP32-Entwicklungsplatinen
Bei der Betrachtung des Stromverbrauchs, ist ein ESP32-Chip oder -Modul nur ein Teil des elektronischen Gesamtbilds. Für Versuchszwecke werden Sie wahrscheinlich eine Experimentierplatine verwenden. Für ausgereiftere Elektronikdesigns ist eine Anordnung verbundener Teile zum Ausführen eines IoT-Geräts erforderlich. Mit sorgfältiger Programmierung lässt sich die Verwendung eines ESP32 sehr energieeffizient realisieren. Allerdings erfordern auch die umgebenden Elektronikbauteile eine sorgfältige Überlegung.
Zur Veranschaulichung dieses Aspekts habe ich eine Experimentierplatine Adafruit HUZZAH32 ESP32 an eine Spannungsversorgung und ein Strommessgerät angeschlossen, zusammen mit dem einer DFRobot-Platine DFR0478 ESP32. Beide wurden in diesem Posting zur Realisierung einer Uhr mit dem Composite-Video des ESP32 vorgestellt und verhielten in diesem eher als Nischenprojekt zu bezeichnenden Anwendungsfall unterschiedlich. Vielleicht wäre die Energieeffizienz auch ein Unterscheidungsmerkmal zwischen den beiden.
Um dies zu testen, verwendete ich eine modifizierte ESP32-Arduino-Beispielskizze „TimerWakeUp“, die in den Sleep-Modus wechselt, aufwacht, die auf der Platine befindliche LED-Beleuchtung einschaltet und danach wieder in den Sleep-Modus wechselt und den Vorgang zyklisch wiederholt. Jede Platine wurde mit 5,3 V versorgt, die auf die für den ESP32 benötigte Spannung von ~3,3 V umgewandelt werden musste. Die Verbrauchswerte sind nachfolgend dargestellt:
HUZZAH32: | Sleep = 6,6 mA | Wake = 43,2 mA Wake + LED = 44,6 mA |
DFR0478: | Sleep = 0,02 mA | Wake = 39,7 mA Wake + LED = 40,0 mA |
Fairerweise muss gesagt werden, dass die Strommessung am Akkuanschluss vielleicht eine bessere Simulation der tatsächlichen IoT-Nutzung gewesen sein könnte. Dennoch zeigt dieses Szenario offensichtlich, dass das DFR0478 FireBeetle Board im Sleep-Modus weitaus effizienter ist als sein Gegenspieler.
Der HUZZAH32 verbraucht im Deep-Sleep-Modus 7000 µA (7 mA) Batteriestrom, was ungefähr der Messung in meinem Experiment entspricht. Andreas Spiess maß für den DFR0478 im Deep-Sleep-Modus einen Stromverbrauch von 53 µA (0,053 mA) an der Batterie. Dies ist erheblich mehr, als ich beim DFR0478 gemessen habe. Er verwendet in seinem Bericht allerdings einen anderen Spannungseingang und eine frühere Version der Platine (2.0 gegenüber 4.0 der in meinem Test verwendeten). Diese Werte bewegen sich auch an der Messgrenze meines Multimeters, was Einfluss auf dessen Genauigkeit haben könnte. Als letztes Caveat verwendet das getestete FireBeetle ein ESP32-Modul WROOM-32D, das HUZZAH32 dagegen ein WROOM-32E.
Aus dem oben Gesagten geht hervor, dass sich die beiden getesteten Platinen um Größenordnungen unterscheiden. Dies ist eine gute Illustration dafür, dass die unterstützende Beschaltung eines ESP32 eine drastische Auswirkung auf den Stromverbrauch haben kann.
Stromversorgung des ESP32 durch Sleep-Modi gezähmt
Der ESP32 ist ein unglaublich leistungsstarker Baustein, der zum Betrieb aber auch relativ viel Strom benötigen kann. Mit sorgfältiger Programmierung ist es aber möglich, den Baustein über Wochen, Monate oder noch länger mit Batteriestrom zu betreiben. Der Schlüssel dazu liegt in der Kenntnis der Vor- und Nachteile von energieeffizienten Designs und den Funktionen, die ohne nennenswerte Leistungseinbußen weggelassen werden können.