November 2021

D1 Mini Deeplseep Akkulaufzeit

  • von

Wenn man einen D1 mini mit einem Akku und einem Solarpanel betreiben will, ist die große Frage wie lange der Akku eigentlich hält. Das soll jetzt kein technischer Artikel über Kapazitäten und Ladeverhalten von Akkus werden. Es geht einfach nur mal darum eine Testschaltun aufzubauen und zu sehen, wie lange der D1 Mini Daten liefert. Dafür habe ich eine Schaltung mit folgenden Komponenten aufgebaut.

Komponenten

  • D1 Mini
  • Akku 650 mAh, 3,7 V
  • Solarpanel 5,5 V (laut Amazon)
  • Laderegler TP4056
  • Temperatursensor DHT11

Ziel der Schaltung ist es alle x Minuten die Temperatur per MQTT an einen ioBroker zu senden.

Schaltung

Schaltung

Deepsleep

Im Normalbetrieb benötigt der D1 Mini ca. 70 mA Strom. Da kann man sich leicht ausrechnen, dass ein 650 mAh Akku im Winter nicht reicht, um den D1 die ganze Nacht zu betrieben. Das ist aber auch nicht nötig, da es mir reicht alle 15 oder 30 Minuten die aktuelle Temperatur auszulesen. Dafür kann der Deepsleep Modus genutzt werden. Hierbei schaltet der D1 fast alle Funktionen inklusive WLAN ab und wacht dann nur noch alle x Minuten auf. Im Schlafmodus benötigt er dann laut Internet nur noch 0,17 mA. Dafür ist er aber in der Schlafphase nicht von aussen über WLAN zu erreichen. Die Programmierung des D1 muss für den Deepsleep Modus entsprechend angepasst werden.

Programmierung

Normalerweise wird der Hauptcode in der loop Funktion für den D1 angelegt. Diese wird bei dem Deepsleep Modus aber nicht genutzt, da die loop Schöleife im Deepsleep nicht ausgeführt wird. Das heißt, dass alle Befehle in der setup Funktion ausgeführt werden müssen.
Achtung!!! Bei einem D1, der im Tiefschlaf ist, kann der Sketch nicht mit der IDE übertragen werden. Drücken Sie dafür die Reset Taste, wenn die IDE versucht die Daten zu übertragen.

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Der Befehl, um den D1 in den Deepsleep Modus zu versetzen lautet ESP.deepSleep(x), wobei x in Microsekunden angegeben wird. 15 Minuten ensprechen 900000000 Mikrosekunden.

void setup() {
  // put your setup code here, to run once:
  ESP.deepSleep(900000000);
}

void loop() {
  // put your main code here, to run repeatedly:

}

WiFi

Um einen Wert per MQTT zu melden, muss der D1 mit dem WLAN verbunden sein. Hier zu wird die Bibliothek ESP8266WiFi.h benötigt. Zusätzlich werden auch noch Texte an die serielle Ausgabe gesendet. Wir wollen ja sehen, ob das genze funktioniert.

#include <ESP8266WiFi.h> const char* SSID = "WLAN_SSID"; const char* PSK = "WLAN_Passwort"; void setup() { // put your setup code here, to run once: Serial.begin (9600); Serial.println("Setup"); setup_wifi(); Serial.println("Gehe für 15 Minuten in den Tiefschlaf"); ESP.deepSleep(900000000); } void setup_wifi() { WiFi.begin(SSID, PSK); while (WiFi.status() != WL_CONNECTED) { delay(100); } Serial.println(WiFi.localIP()); } void loop() { // put your main code here, to run repeatedly: } ...  mehr lesen

D1 Mini mit Solarpannel

  • von

Nicht immer hat man einen Stormanschluss in der Nähe, um den D1 Mini zu versorgen. Da wäre es doch schön, wenn man ihn über eine Batterie mit einem angeschlossenen Solarpanel versorgen könnte. Es geht. Das wird aber je nach Solarpanel und Batterie schwierig für den Dauerbetrieb.

Hier erfahren Sie, wie ein D1 Mini mit einer 650mAh Batterie und einem 5 Watt Solarpanel zum Beispiel für die Aufzeichnung von Temperaturdaten verwendet werden kann. Das Zauberwort heißt deepsleep. Da es ja reicht, dass die Daten zum Beispiel alle 15 Minuten übermittelt werden, kann der D1 für die Zwischenzeit in den deepsleep geschickt werden. Dabei braucht er dann so wenig Strom, dass die oben beschriebene Batterie absolut ausreicht. In dieser Zeit kann der D1 aber nicht von andern Rechnern angesprochen werden, da er sich in der Schlafphase befindet. Dabei wird auch das WLAN abgeschaltet.

Da die Daten in so einem Fall nicht vom D1 abgerufen werden können, muss er sie aktiv an einen anderen Rechner senden. Dafür benutze ich in diesem Beispiel mqtt, das die Daten zum Beispiel an einen ioBroker sendet.