ESP Energiebedarf

Der Bau von kleinen Computern eröffnet viele Wege und ein wichtiger Aspekt ist auch das Thema Energieverbrauch. Auch der kleinste Schaltkreis braucht Strom und so gibt es einige Dinge zu überlegen. Der ESP8266 braucht nach dem "PowerUp" oder "WakeUp" einige Sekunden um per WiFi wieder im Netzwerk angemeldet zu sein und das kostet schon um die 200mA für einige Sekunden. Wer damit auf einer Batterie arbeitet, kann nicht alle 10 Minuten einen Messwert erfassen und ins LAN senden. Dafür gibt es dann andere Techniken (ZigBee etc.), die viel schneller einfach "senden".

Achtung bei Boards wie dem WeMOS oder NodeMCU / LUA. Der Chip zieht manchmal mehr als die am Standard USB-Port erlaubten 500mA. Die Spannungsregler können zwar aus 5V aus einem Akkupack die 3,3V erzeugen aber der ESP01 hat durchaus auch höhere Stromstärken beim Senden. Ein großer Pufferkondensator kann das etwas mindern oder sie achten auf "gut gespeiste USB-Ports". An diversen Notebooks gibt es oft Hochstrom-Anschlüsse die "gelb" gekennzeichnet sind oder sie schalten einen USB-Hub mit eigenem Netzteil dazwischen.

Mittlerweile gibt es verschiedene ESP32-Module die auch mit unter 0,1mA auskommen und von einer 1000mA1 Akku damit monatelang funktionieren.

Energiequelle

Wenn der ESP8266 aber im "Deep Sleep"-Mode ist, braucht er laut Datenblatt typischerweise 10µA und mit zwei AA-Batterien (a 2600mAh) sollten damit auch 3 Jahre möglich sein. Bedenken Sie aber auch den Stromverbrauch einer externen Beschaltung und die Alterung der Batterien.

  • Netzteil
    Fast überall haben wir 220V aber selbst wenn ein Modul nur ganz wenig Leistung benötigt, so hat ein Netzteil immer auch eine Verlustleistung. Sicher gehen beim WiFi-Betrieb mit 200mA bei 3V schon 0,6W durch die Leitung aber das ist ja meist immer noch weniger als die Verlustleistung des Netzteils.
  • Klassische Batterien
    Theoretisch lassen sich 3V mit 2x 1,5 AA recht schnell bereit stellen. Die Entladekurve einer Batterie zeigt aber, dass die 1,5 Volt sehr schnell abbauen und damit ein langer stabiler Betrieb nicht möglich ist.

    Quelle https://de.wikipedia.org/wiki/Datei:Aa-alkaline-100_c-v.png
    Wer nun 3x1,5V in Reihe schaltet, muss sich zumindest am Anfang mit der Überspannung von 4,5 Volt Gedanken machen.
  • CR2032 Knopfzelle
    Diese Standardbatterie liefert leider nicht genug Strom, um den ESP im WLAN sicher zu betrieben. Laut Datenblatt kann die Zelle bis 210mA liefern, was aber für WLAN nicht genug ist.
  • Lithium-ManganDioxid Batterien (häufiger Typ CR123)
    Eine CR123 kostet zwischen 1-2€ und liefert nicht nur ca. 800mAh sondern behält ihre Spannung von 3,5-3,7V über lange Zeit und selbst bei niedrigeren Temperaturen und kurzfristig höheren Strömen. Laufzeiten von einem Jahr könnten damit aber schon erreicht werden. Natürlich nur, wenn der ESP8266 auch wirklich oft genug im "Deep Sleep" verharrt, sonst ist nach wenigen Stunden schon die Energie aufgebraucht. Manchmal gibt es aber auch schlechte Exemplare, wie ein Test von "Hiltihome" mit 40 verschiedenen CR123-Herstellern zeigt

    https://www.messerforum.net/threads/cr123-im-vergleich-messergebnisse.74499/
    Bei den meisten Zellen lassen sich aber schon bis zu 500mAh entnehmen, bis die 2,4 Volt unterschritten werden. Wann genau ihr ESP aber nicht mehr zuverlässig funktioniert, hängt auch von dem Board ab
  • Solar + GoldCAP
    Ausprobiert habe ich es noch nicht, aber eine Solarzelle könnte zumindest zur Speisung beitragen. Allerdings sind auch hier die Spitzenströme nur durch größere Zellen zu erreichen. Aber wenn lange genug Licht auf das Gerät fällt, könnte eine Solarzelle mit einem Gold-CAP (Kondensator mit hoher Kapazität) eine Lösung darstellen. Aufgrund der Entladekurve eines Goldcap muss ein Spannungsregler aber mächtig arbeiten. Er ist also eher eine kleine "USV" aber kein Dauerspeicher.
    https://de.wikipedia.org/wiki/Superkondensator
  • Solar + Akku
    Wenn Sie ihren Lieblingslieferanten besuchen, dann finden Sie dort sicher auch Akku-Packs mit Solarzellen. Als Campingbedarf soll man damit auch "Outdoor" sein Smartphone aufladen können. Das klappt oft aber nicht, da die Erwartungen an die Leistung einer Solarzelle im direkten Sonnenlicht nicht immer realistisch sind. 5V und 1A -Ladestrom ist unrealistisch mit einer Solarzelle in den Abmessungen eines 5"-Smartphone. Schauen Sie sich mal die "Gartenleuchten" mit Solarzelle und AA-Zelle an. Das Licht des Tages kann schon für ein paar Stunden "LED-Betrieb" reichen.

Wenn die Aufgabenstellung wirklich so ist, dass nur ganz selten mal ein Wert zu ermitteln ist und keine aktive vom ESP8266 hin aufgebaut werden muss, dann kann der Baustein vermutlich am günstigsten mit Batterien betrieben werden. Selbst die 0,9mA im Standby können z.B. durch einen Akku mit Solarspeisung einen günstigen Betrieb z.B. im Garten erlauben. Von SparkFun gibt es sogar ein Modul mit integriertem LiPO-Laderegler und entsprechenden Anschlüssen:

Leider ist der USB-Anschluss nicht auch zugleich Programmierzugang. Aber so spart man sich nicht nur Teile sondern auch den Stromverbrauch eines USB/Seriell-Wandlers

Sleep Modes und Energiebedarf

Ich habe leider kein hochgenaues Volt/Ampere-Meter mit zuverlässiger Messung im Bereich von Milliampere. Aber andere Blogger haben hier schon viel Vorarbeit geleistet.

#47 Power Saving with ESP8266 (Sleep Mode) Tutorial with some Tricks
https://www.youtube.com/watch?v=6SdyImetbp8

ESP8266 Sensor läuft 17 Tage mit einer Knopfzelle und sendet Daten zu sparkfun.com and ubidots.com
https://www.youtube.com/watch?v=IYuYTfO6iOs

Tech Note 131 - ESP32/8266 Reducing Battery Load Hints & Tips
https://www.youtube.com/watch?v=kUHEHTev3UE

Low Energy Boards

Kaum jemand wird den ESP8266 selbst als Modul verlöten, sondern NodeMCU, Wemos und andere Board tragen schon das Modul samt Spannungsregler und vielleicht auch Programmieradapter mit. Diese Komponenten benötigen aber alles auch Energie, selbst wenn Sie nicht genutzt werden. Daher gibt es aber auch Boards, die mit dem Ziel eines minimalen Energiebedarfs konstruiert wurden, z.B.: indem die ganze USB-Seriell-Schnittstelle entfällt oder deaktivierbar ist oder besonders effektive Spannungswandler verwendet wurden.

Mittlerweile gibt es einige ESP32-Boards die direkt mit Ladeelektronik und minimalen Energiebedarf ausgestattet sind.

Ausschnitt von Andreas Spiess

#366 9 New ESP32 Boards: Comparison and Tests (Min 9:18)
https://youtu.be/mnoZYlyebBc?t=558
Vollständige Vergleichstabelle: http://bit.ly/2J9jpdu

#193 Comparison of 10 ESP32 Battery powered Boards without display (incl. deep-sleep)
https://www.youtube.com/watch?v=-769_YIeGmI

ESP01 "nackt"

Wer wirklich niedrigsten Stromverbrauch sucht, kann auch das nackte ESP01-Board nutzen. Es hat natürlich keinen USB/Seriell-Adapter, keinen Spannungsregler, keine Status-LED etc. Aber damit auch keine Komponenten, die Strom brauchen.

Die WIFI-LED kann ja ruhig bei Aktivität "blinken" aber die Power-LED würde ich dann ablöten. Die Programmierung sollte in einem eigenen Socket erfolgen, damit die wenigen GPIO-Ports nicht durch externe Beschaltungen belastet sind.

Der "Deep-Sleep" benötigt aber eine besondere Beschaltung, da auf dem Board der "Wakup Pin" GPIO16, nicht herausgeführt ist. Der muss mit einem ganz reinen Draht auf "RESET" verbunden werden.

Solarzelle und Akku/SuperCap

Wenn der Einsatzort nicht in einer Kiste oder Schrank drin ist, sondern sie irgendwo "Licht" her bekommt, dann kann eine Solarzelle mit einem Akku die Einsatzzeit des ESP-Projekts unabhängig vom Netzwerk machen. Auch hier ist wieder die Spannung ein wichtiges Kriterium:

  • ESP8266 brauchen VCC, Spannung (+3,3 V bis 3,6 V)
    Quelle: https://de.wikipedia.org/wiki/ESP8266#Pinbelegung_des_ESP-01
    Wobei oft externe Beschaltungen auf einen Board die Bandreite erweitern
  • Ströme
    Speziell wenn der ESP per WLAN kommuniziert, dann brauchen wir deutlich mehr mA und einige Quellen brechen dann schnell ein. Kondensatoren können hier kurze Spitzen überbrücken.
  • Überspannung
    Die Digitaleingänge sind wohl je nach Modul etwas besser gegen Überspannungen abgesichert aber auch hier müssen wir einen Blick drauf haben
  • Charakteristik von Solarzellen
    Es gibt einen "MPP" (Maximum Power Point) bei der eine Solarzelle die maximale Energie liefert und das ist immer ein Kompromiss zwischen maximalem Kurzschlussstrom und maximaler Leerlaufspannung. Die Spannung einer unbelasteten Solarzelle ist abhängig vom Licht oft viel zu hoch. Ohne Regelung und bei vollem Akku würde ein ESP sterben.

All digital IO pins are protected from over-voltage with a snap-back circuit connected between the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V. This provides protection from over-voltages and ESD. The output devices are also protected from reversed voltages with diodes.
Quelle: https://www.adafruit.com/images/product-files/2471/0A-ESP8266__Datasheet__EN_v4.3.pdf)) 

Ein Regler hat aber auch einen Eigenverbrauch und Ruhestrom. Er muss den Akku schützen, wobei ein LiPo-Akkus selbst nur 3,7V liefert aber mit bis zu 4,2 Volt geladen werden kann. Daher darf Solarzelle, Akku und ESP nicht direkt verbunden werden.

Eine LiPo Zelle darf nicht tiefentladen werden. NiCD und NiMH-Akkus waren das deutlich toleranter. Aber normale LiPo-Akkus halten recht gut ihre Spannung bis kurz vor Schluss. Für den ESP ist also eher der Start mit "Überspannung" und natürlich eine ungefilterte Ladespannung gefährlich.


Quelle: https://www.rclineforum.de/forum/board49-zubeh%C3%B6r-elektronik-usw/board53-akkus-ladeger%C3%A4te/319473-lipo-welche-spannung-entspricht-welchem-f%C3%BCllstand/

Zum Ende zu wird der ESP natürlich unter 3,3 Volt die Arbeit einstellen. Das bedeutet aber nicht, dass er dann keinen Strom mehr bezieht. Eine aktive Abschaltung bei Unterspannung ist weiterhin notwendig.

Zum Glück gibt es fertige Bausteine, die auf der einen Seite die Ladung von LiPo-Akkus mit Solarzellen oder anderen Quellen für kleines Geld erlauben und den Akku vor Überladung sichern. Auf der anderen Seite brauchen wir aber einen LowDrop Spannungsregler, der den ESP vor den höheren Ladespannungen schützt. Natürlich sollte der Laderegler auch Tiefentladungen verhindern, indem der Verbrauche notfalls ganz abgeschaltet wird. Wenn dann noch die Akku-Spannung durch den ESP (z.B. Analogport A0) gemessen werden kann, wäre das System komplett.

Aufgrund der niedrigen Kosten wird es aber oft auf einen Kompromiss hinaus laufen. Die Überspannung eines ESP könnte über einen Z-Diode gesichert werden, die aber keine Tiefentladung verhindert. Das wäre dann der Job des Laderegler. Wenn Sie aber all die "Gartenleuchten" mit LED und Solarzellen anschauen, dann ist es wohl gelebte Praxis, hier weniger perfekt zu arbeiten.

Nicht alle LiPo Lader habe auch einen Tiefentladeschutz, der für LiPo-Zellen aber genauso wichtig ist, wie der Überladeschutz.  Es gibt aber auch LiPo-Zellen, die schon direkt einen Überladeschutz und Tiefentladeschutz eingebaut haben. Wir brauchen dann aber immer noch eine Spannungsregelung für den ESP.

The 5 Best Solar ChargerBoards for Arduino and ESP8266
https://www.youtube.com/watch?v=ttyKZnVzic4

The Best Power Source for ESP32/ ESP8266 Projects
https://youtu.be/FrCgQgahzsI

ESP Stromsparen

Dass die Netzwerkkommunikation per WLAN die meiste Energie braucht, ist mittlerweile klar. Daher gibt es einige Tipps, um den Energieverbrauch zu reduzieren. Aber auch andere Besonderheiten im Code oder externer Beschaltung können wahre Wunder vollbringen, wenn es im Bruchteile von mA geht.

Aktion Beschreibung  

LEDs abgeklemmen

Die meisten ESP-Boards haben eine oder zwei LEDs. eine LED, die WLAN-Aktivitäten anzeigt, kann man dran lassen aber eine dauerhaft leuchtende LED als "Spannungsanzeige" ist keine gute Idee. Sie braucht meist 2mA und das ist beim Batteriebetrieb schädlich.

Spannungsteiler

Wer die Batteriespannung mit überwachen will, nutzt meist den ADC-Port, der aber nur 1V verträgt. Daher ist ein Spannungsteiler vorzusehen, der aber auch einen Ruhestrom hat. zwei Widerstände a 1kOhm hören sich nach viel an aber bei 6V Batteriespannung fließen hier auch 3mA. Es spricht nichts dagegen, hier mit 100kOhm, 220kOhm oder 470kOhm zu arbeiten und damit den Ruhestrom zu verringern.

Hinweis: Einige Boards haben schon einen 1:3 Spannungsteiler mit 220kOhm und 100kOhm eingebaut um 3V-tolerant zu sein. Dann müssen Sie dies mit einbeziehen.

Seriel Debugging und "Delay"

Jede gesparte CPU-Sekunde spart Strom. Ich nutze auch gerne zum Debugging die serielle Ausgabe und vor allem "Delay"-Befehle um z.B. LEDs langsam blinken zu lassen. Anstatt die Sekunden fest zu hinterlegen, kann man den Wert als Konstanten definieren.

Aus dem gleichen Grund sollte man die Baudrate nicht bei 9600 Bit/Se lassen sondern gerne hochstellen. 115200 Bit/Sek ist ein guter Wert.

Die Profis arbeiten mit bedingter Kompilierung, um solchen Debug-Code gleich ganz aus dem "finalen Code" entfernen.

Interne PullUPs

Beim ESP kann ich die Digitaleingänge auch als Ausgang konfigurieren und sogar einen internen Pullup-Widerstand einschalten. Auch hier können je nach externe Verschaltung ein paar mA verloren gehen. Es ist daher ratsam, die Ausgänge nur dann als Ausgang zu schalten, wenn sie auch gebraucht werden und ansonsten einfach als Eingang zu betreiben.

WLAN dynamisch ein/ausschalten

In vielen wird die WLAN-Verbindung schon im "SETUP"-Abschnitt aktiviert, die beim Einschalten des Systems erfolgt. Besser ist es, zuerst die Daten von den Sensoren alle einzulesen und erst zum eigentlichen Versand dann WAN zu starten. Verlagern Sie "WiFi_ON()" und "WiFiOFF()" einfach in den aktiven Code im Bereich "loop()"

// Abschalten von WLAN
WiFi.mode(WIFI_OFF);
WiFi.forceSleepBegin(); 
delay(1); 
// Einschalten WLAN
char ssid[] = "wlanssid";     // WLan SSID
char pass[] = "wlanwpakey";   // WLAN WPA Key

WiFi.forceSleepWake()
delay(1); 
WiFi.mode(WIFI_STA); 
WiFi.begin(ssid, pass);

Oder Sie verzichten auf klassisches WLAN und Nutzen z.B. ESP-Now

Verzicht auf DHCP

Wenn ihre Sensoren eh alle statische Adressen haben, dann müssen Sie nicht erst per DHCP einen Request senden und die Antwort abwarten.

IPAddress ip(192, 168, 178, 101)
IPAddress dns(192, 168, 178, 1)
IPAddress gateway(192, 168, 178, 1)
IPAddress subnet(255, 255, 255, 0)


WiFi.config(ip, dns, gateway, subnet);

Kanäle vorbelegen

Wer noch weiter "sparen" will und kann, darf bei WIFI.begin auch noch die SSID und die MAC-Adresse des AccessPoints vorgeben. Das spart weitere Zeit ein. Die Daten müssen natürlich "passen".

char ssid[] = "wlanssid";     // WLan SSID
char pass[] = "wlanwpakey";   // WLAN WPA Key
uint8_t bssid[] = {0x12,0x34,0x56,0x78,0x9A,0xBC};
int32_t channel = 4;

WiFi.begin(ssid, pass, channel, bssid, true);

WLAN beim Wakeup auslassen

Normalerweise aktiviert der ESP die WLAN-Komponenten beim "Aufwecken" alleine. Auch das kann man beim "Schlafen gehen" unterbinden.

WiFi.disconnect(true); 
delay(1);
ESP.deepSleep(60e6 , WAKE_RF_DISABLED );   // ca. 60 Sek schlafen

Tech Note 131 - ESP32/8266 Reducing Battery Load Hints & Tips
https://www.youtube.com/watch?v=kUHEHTev3UE

Weitere Links