NodeMCU: ESP8266 mit Solarzelle und Akku mit Strom versorgen

Wer eine Wetterstation betreiben will, der muss sich auch um die Stromversorgung Gedanken machen. Ideal ist eine autonome Versorgung mit Strom mittels Akkus. Da ist die ESP8266 Solar-Panel Stromversorgung natürlich naheliegend. Tagsüber wird der Mikrocontroller mit dem Strom der Solarzelle versorgt und gleichzeitig wird ein Akku geladen. In der Nacht kommt dann dieser Energiespeicher zum Einsatz.

In diesem Tutorial schauen wir uns an, wie wir den ESP8266 mit der Solarzelle verbinden und was wir für den Akkubetrieb brauchen.

 

Zubehör

Der ESP8266 kann mit 5V per USB, als auch mit 3.3V mit Strom versorgt werden. Damit wir eine lange Akkulaufzeit erreichen, nutzen wir 3.3V und entsprechende Akkus mit höherer Spannung. Anschließend drosseln wir diese. Die Solarpanels sollten mindestens 5V liefern, besser sind 6V. Dabei empfehle ich, dass jedes Solarmodul mindestens 500mA (besser 750mA) liefern kann.

In meinem Fall habe ich folgende Bauteile verwendet:

Alternativ zu den 3.7V Panasonic NCR18650B Batterien kannst du auch normale 1.2V Akkus in Reihe schalten, wobei diese weniger Kapazität (mAh) haben. Als Alternative oder zum Testen sind sie (mit einem Batteriehalter) dennoch zu gebrauchen.

 

Aufbau und Anschluss der Solarpanels am ESP8266

Damit wir mit dem ESP8266 Solar-Panele nutzen können, brauchen wir eine konstante Spannung von 3.3V. Hier könnten wir einfach nur einen linearen Spannungsregler zwischen Solarzelle und ESP verwenden. Das hat allerdings den Nachteil, dass die Stromverbindung abbricht, sobald die Sonne nicht mehr scheint.

Aus diesem Grund muss ein Akku dazwischengeschaltet werden. Sofern das Solarpanel genügend Strom generiert, soll der ESP davon versorgt und gleichzeitig der Akku geladen werden. In der Nacht soll der Akku dann seine Energie an den ESP8266 abgeben. So ist die konstante Stromversorgung sichergestellt. Hierfür gibt es spezielle Lademodule, wie den TP4056, die diese Aufgabe übernehmen.

MCP1700-3302E Pinout

Blick auf den MCP1700-3302E von vorne (flache Seite vorn)

Das Lademodul hat insgesamt drei Slots (jeweils mit Plus und Minus Pol). Zunächst schließen wir an + und  (neben dem USB-Port) die Solarzelle an. Falls du mehrere Solarzellen verwendest, kannst du diese parallel anschließen (alle Plus-Pole an +, alle Minus-Pole an ). An B+ und B- wird der Akku bzw. die Akkuhalterung angeschlossen (Plus an Plus, Minus an Minus). Auch hier kannst du mehrere Batterien parallel verbinden, sodass längere Dunkelphasen besser überstanden werden können, ohne dass der Strom aus geht. Gerade im Winter ist dies sehr nützlich

Bleibt noch der OUT+/OUT- Anschluss. Hieran schließen wir den ESP8266 an, jedoch brauchen wir davor noch den Spannungsregler, damit konstant 3.3V abgegeben werden. Dieser hat 3 Anschlüsse (VIN, VOUT, GND) und wir schließen ihn entsprechend dem folgenden (Schaubilds) an. Zwischen GND und VOUT kommt der Kondensator (kürzerer Pin an GND):

ESP8266 Solarzelle Pinout Steckplatine

Bei dem Elektrolytkondensator (100uF) ist es wichtig, dass die längere Seite (+) an VOUT angeschlossen wird und die kürzere Seite an GND. Du kannst nun mit dem Multimeter nachmessen. Die Spannung sollte konstant bei 3.3V liegen, auch wenn die Solarzellen verdeckt sind.

Zu guter Letzt schließen wir VOUT und GND noch an den ESP-01/NodeMCU an (hierbei nehmen wir den 3.3V Pin sowie GND.

ESP8266 NodeMCU ESP-01 Pinout

ESP8266 ESP-01 Pinout

NodeMCU Dev Board Pinout

NodeMCU Dev Board Pinout

 

 

Mit dem ESP8266 Solarzellen- und Batteriespannung messen

Je nach Wetter und Jahreszeit wird die Batterie mehr oder weniger gut aufgeladen. Damit die Spannung nicht zu sehr sinkt, ist es sinnvoll den Batteriestand zu kennen und ggf. die Leistung zu reduzieren oder sogar den ESP in einen Standby-Modus zu versetzen.

Die ESPs mit mehr Pins haben oft auch einen analogen Pin, mit dem wir Spannungen bis zu 3.3V messen können. Das Problem ist allerdings, dass der Li-Ion Akku bis zu 3.7V ausgeben kann (manche Quellen sprechen sogar von bis zu 4.2V). Diese Spannung kann den ESP beschädigen, deshalb müssen wir die Spannung niedriger bekommen. Dazu nutzen wir einen Spannungsteiler, den wir mit zwei Widerständen einfach selbst bauen können:

Einfacher Spannungsteiler (Quelle: Wikipedia)

Wir wissen hier, dass sie maximale Spannung U = 3.7V ist und wollen eine Ausgangsspannung U2 = 3.3V erreichen. Dies geht laut Gleichung folgendermaßen:

U2 = (U * R2) / (R1 + R2)

Wir können die beiden Widerstände R1 und R2 also frei wählen. Hier kannst du entweder deine eigenen Werte berechnen, oder R1 = 12k Ω, R2 = 100k Ω nehmen.

3.3V = (3.7V * 100kΩ) / (12kΩ + 100kΩ)

Falls die maximale Spannung deiner Batterie mehr oder weniger als 3.7V beträgt, musst du die Werte entsprechend anpassen.

Nun schließen wir den den analogen ESP Pin zwischen die beiden Widerstände, wobei R1 an VOUT des MCP1700-3302E angeschlossen wird und das andere Ende von R2 an GND.

Anschließend können wir den analogen Spannungswert am ESP32 / NodeMCU Development Board abfragen. Dies geht mit dem analogen Pin 10 / ADC0 (siehe oberes Pin Schaubild). Beim ESP32 ist es GPIO 33.

analogRead(0);

Der Wert ist ein 12Bit Wert (0 bis 4095) und gibt den Pegel an. Um die Spannung festzustellen, müssen wir also durch 4095 dividieren und mit 3.3 multiplizieren.

 

Strom sparen mit Deepsleep

Falls der ESP8266 nur durch ein Solarpanel mit Strom versorgt, so ist es umso wichtiger, dass der Verbrauch nicht allzu hoch ist. Natürlich hängt das von verschiedenen Faktoren ab. Du solltest die Solarzellen an Orten mit möglichst langer und hoher Lichteinstrahlung stellen. Außerdem sind rechenintensive Aufgaben am ESP8266 nicht zu empfehlen.

Um also möglichst sparsam zu sein, gibt es einige Möglichkeiten:

  1. Deepsleep: Die einfachste Methode ist den ESP „schlafen zu lassen„, sofern er nichts berechnen muss. Dabei wird allerdings auch die Wifi Verbindung getrennt und der ESP ist in dieser Zeit nicht von außen ansprechbar. Es eignet sich vor allem, wenn kontinuierlich Werte erfasst (bspw. alle 30 Minuten) und an einen Server gesendet werden sollen.
  2. Berechnungen auslagern: Nicht alle Berechnungen müssen auf dem ESP / NodeMCU stattfinden. Sofern möglich kannst du rechenintensive Aktionen von anderen ausführen lassen, wie z.B. von einem Raspberry Pi. Ein gutes Beispiel hierfür ist die Gesichtserkennung bzw. Machine Learning Algorithmen.
  3. Bei niedrigem Akku schlafen gehen: Sofern die Leistung des ESP benötigt wird, können wir auch den Akkustand in einem Intervall messen und erst bei Unterschreiten eines bestimmten Werts den Deep-Sleep aktivieren. Auch können wir nur bei Sonnenstrahlung aktiv sein und die Messungen/Funktionen in der Nacht vermindern.
  4. Andere Funkprotokolle verwenden: Das Verbinden mit einem WLan Netzwerk braucht bis zu 200mA, weshalb es im Solarbetrieb bessere Alternativen gibt. Über Protokolle wie Zigbee können auch ohne Wifi Verbindung Werte an eine Hauptstation gesendet werden.

Gerne kannst du weitere Möglichkeiten, um Strom beim ESP8266 Solar-Betrieb zu sparen, in einem Kommentar nennen.

17 Kommentare

  1. Klasse tutorial, ich denke an einen regensensor nach mit dem esp. Da dieser möglichst autark arbeiten soll auf dem Dach ist das eine gute Konstellation. Größtenteils soll es zur Vermeidung der durchnässung der markiese kommen, an nicht sonnigen Tagen ist die eh nicht ausgefahren daher wäre es nicht schlimm wenn der mal nicht läuft.
    Aber das der esp auch zigbee kann ist interessant! Gibt es dazu schon ein tutorial

    Antworten
    • An einer Regensensor-Anleitung mit Messung des Niederschlags arbeite ich bereits, soviel kann ich verraten 🙂 Es wird wohl eines der nächsten Tutorials.

      Antworten
  2. Ich finde diese Site sehr informativ und habe schon einige nützliche Informationen bekommen, habe aber den Eindruck, dass die Community nur aus der Person „Felix“ besteht. Ist an sich nichts Schlimmes, aber schade, dass sich nicht mehr beteiligen. Ich selbst bin leider noch nicht so weit, dass ich etwas Sinnvolles beitragen könnte.
    In Bezug auf diesen Solar-Lader hätte ich allerdings einen Hinweis. Ich weiß nicht, ob die Ladeschaltung verhindert, dass Strom aus dem Akku in die Solarzelle zurück fließen kann wenn deren Spannung niedriger ist als die Akkuspannung. Kann man ja ggf. messen. Ich würde sicherheitshalber eine Diode in Reihe zu der Solarzelle schalten, die natürlich den max. Ladestrom aushalten muss und die abgegebene Spannung um ca 0,7 V reduziert, was man ggf. bei der Auswahl der Solarzelle(n) berücksichtigen sollte. Solarzellen mögen es nicht, wenn Strom in sie hinein fließt.

    Antworten
    • Du hast recht, denn die Seite entstand aus meinem Hobby am Raspberry Pi und Mikrocontrollern. Das Wissen wollte ich dann entsprechend mit anderen teilen. Mehr oder weniger erstelle und schreibe ich die Tutorials im Moment alleine, wobei es schon einige Beiträge von Lesern gab. Ich bin diesbezüglich offen und freue mich natürlich über eine Beteiligung der Community.
      Viele Grüße,
      Felix

      Antworten
      • Mir hat die Einfachheit des Aufbaues gefallen. Ich habe auch schon die Teile bestellt, habe aber jetzt folgenden Artikel gelesen und bin verunsichert ob ich dieses Konzept weiter verfolgen kann.Hier der Link: best-microcontroller-projects.com/tp4056.html
        Hauptaussage ist: wenn geladen wird, dann keine Verbraucher….wenn Verbraucher an Batterie hängt nicht laden!

        Bitte um Eure Ideen und Hinweise. Ich möchte mit diesen LiIonen Akkus nichts falsch machen.
        Beste Grüße
        Gerald

  3. Sehr gutes Tutorial – werde es bestimmt mit meinen Kindern nachbauen!
    Da der Nachbau dieses Schaltung aber auch Kosten verursacht, wünschte ich mir
    die Beifügung einer Preisliste für die verwendeten Bauteile. Ich hoffe, diese Preisliste wird noch nachgereicht! Danke dafür

    Antworten
    • Hi,
      das kommt darauf an, wo du die Komponenten kaufst (im Elektrofachmarkt sind die Preise meist etwas höher, als bei der Bestellung im Internet). Und es kommt auch auf das genaue Bauteil an (Auswahl der Solarzellen-Leistung, ESP Modell, etc.). Grob würde ich allerdings sagen:
      – 5W Solarzelle: 10-15€
      – Li-Ion Batterie + Halter: etwa 10€

      Antworten
  4. Eindeutig Daumen runter ! Der Regler ist ein Typ der in Reihe zur Last liegt. Die Differenz zwischen Batteriespannung und Betriebsspannung des ESP wird als Wärme verbraten und verschlechtert die Energiebilanz und damit auch die Laufzeit. Ein größeres Solarmodul und ein größerer Akku um eine ineffiziente Stromversorgung auszugleichen, ist doch keine Lösung!
    Dafür verwendet man Schaltregler.

    Antworten
    • Eindeutige Daumen runter ist in einer solchen Community kein sehr produktiver Kommentar. Wie wäre es mit einem konkreten Verbesserungsvorschlag. Diese Vorschläge werden häufig von Newbies gelesen, die dabei eventuell auch noch etwas lernen ( wollen).

      Antworten
      • Für den Kommentar von Manylomy: Eindeutig Daumen hoch!
        Ich würde es mir auch einen konkreten Verbesserungsvorschlag wünschen, an Stelle der Kritik, die uns keinen Schritt weiter bringt!

  5. Ich habe mir den Laderegler erspart und NCR18650B mit integrierter Schutzelektronik verwendet.
    Wobei ich 2 Stück in Serie geschaltet habe und ein 12V Solarpanel angeschlossen.
    Die Spannung (3.3V) wird mittels Stepdown Konverter hergestellt.
    Damit die Panels nicht im Leerlauf arbeiten, wenn die Akkus aushängen (bei voll-Ladung), habe ich eine 12.5W 9.1V Zenerdiode (mit Aluklotz als Kühlkörper!!) parallel zu diesen reingehängt.
    Aufgepasst: Zumindest bei mir ist der ADC Eingang am ESP für max 1V ausgelegt.
    Ich lasse den ESP bei Spannungen unter 7.9V in den Deepsleep für 2min und dann für 20sek laufen.
    Habe aber auch eine Aufweckautomatik mit Opamp und CMOS NAND-Gattern erstellt, falls das Anemometer während dem Deepsleep gefährlich hohe Windgeschwindigkeiten misst.
    Hier sind alle und weitere Einzelheiten zu finden:
    https://www.ltspiceusers.ch/threads/opensource-wettersensor.392/

    PS:
    Finde es immer toll, wenn jemand seine Erfahrungen veröffentlicht.
    Danke dafür an den Ersteller

    Antworten
  6. 18650 LiIon Akkus arbeiten mit einer Nennspannung von ca. 3,6-3,7V je nach konkretem Modell. voll geladen sollte die Spannung 4,2V nicht überschreiten um den Akku nicht zu beschädigen. „Leer“ beträgt die Spannung je nach Modell zwischen 2,8 und 3,2V. Wer sich nicht sicher ist sollte besser geschützte Akkus verwenden, die verhindern selbständig dass sie zu hoch aufgeladen oder zu tief entladen werden.

    Antworten
  7. Hallo! Habe dieses Tutorial mit großem Interesse gelesen. Gute Idee, die ich womöglich auch mal nutzen kann. Eine Frage hätte ich bezüglich des Spannungsreglers. Damit dieser immer sicher 3,3V liefert, muss seine Eingangsspannung ja ein wenig höher sein. Aus dem Datasheet lese ich heraus, dass die minimale Spannung für 3,3V output wenigstens bei ca. 3,8V liegen sollte. Der Akku kann bei Entladung aber auch mal unter diese Spannung sinken. Würde es dann nicht zu einer Fehlfunktion kommen, da die Spannung für den microcontroller unter 3,3V fallen würde?

    Antworten
  8. Habe mir sowas auch schon gebaut. Grade für meine Bienenstand ist es mir wichtig autark zu sein

    https://blog.bajonczak.com/hivemonitoring_part1

    Dort ist mein Aufbau zu sein. Ich habe aber nicht den tp als ladechip genommen. Da dieser eher ungeeignet für den lipo war. Habe dafür den cn Chip verwendet. Dieser war wesentlich effizienter.

    Antworten
  9. @Ralf
    Ich empfehle bei nur einem Akku einen Stepup/down (beides in Einem) zu verwenden.
    Der ist auch viel effizienter als ein Spannungsregler.
    Im Solar/Akku Betrieb müssen wir ja „energiebewusst“ denken ^^

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!