NodeMCU – Deep Sleep des ESP8266

In diesem Beitrag stelle ich dir vor wie du deinen Microcontroller mit ESP8266 Chip in den „Deep Sleep“ versetzt und somit deine externe Stromversorgung schonst.

Einen Microcontroller mit ESP8266 Chip habe ich unter anderem bereits in den Beiträgen:

vorgestellt. 

Jedoch möchte ich hier den Wemos D1 mini verwenden, dieser kleine Microcontroller hat den Vorteil das Sensoren auf diesen gesteckt werden können ohne das man diese recht umständlich verkabeln muss. 

Auf einer mini Wetterstation mit dem Wemos D1 mini
Auf einer mini Wetterstation mit dem Wemos D1 mini

Was ist der „deep sleep“?

Von einem „deep sleep“ redet man wenn der Microcontroller in einen Schlafmodus versetzt wird. In diesem Modus verbraucht dieser nur sehr wenig Strom und kann somit mit einer Batterie deutlich länger betrieben werden. In diesem Modus kann der Microcontroller jedoch nur gewisse Befehle und Aktionen ausführen. Zumeist sind die Befehle nur um einen Timer zu aktualisieren um nach einer Zeit x wieder in den Normalen Betrieb über zugehen.

Neben dem depp sleep welchen ich in diesem Beitrag vorstellen möchte, gibt es noch zwei weitere „Modem-sleep“ und „Light-sleep“. Im nachfolgenden zeige ich dir eine kleine Tabelle mit den groben Unterschieden der 3 verschiedenen Sleep Modi.

  Deep Sleep Modem Sleep Light Sleep
WiFi NO NO NO
System Clock NO YES NO
RealTime Clock (RTC) YES YES YES
CPU NO YES *
Stromaufnahme ~ 20µA 15mA 0.4mA

* Anhängig von der Implementierung

In diesem Beitrag zeige ich dir nun wie du einen Microcontroller mit einem ESP Chip in den Deep Sleep Modus versetzt und nach einer Zeit x wieder aufwecken kannst.

benötigte Resourcen

Um das nächste Beispiel nachprogrammieren zu können benötigst du einen Microcontroller mit einem ESP Chip und ein Breadboardkabel.

Aufbau der Schaltung für einen „Deep Sleep“

Der Microcontroller wird mit einem Befehl im Programm zum schlafen gebracht und durch einen weiteren Befehl wieder zum aufgeweckt. Was sich so einfach anhört ist es auch denn man muss nur den digitalen Pin D0 bzw. GPIO16 mit dem Reset Pin des ESP verbinden. 

GPIO16 mit RST verbunden für den Deep Sleep am ESP8266

GPIO16 mit RST verbunden für den Deep Sleep am ESP8266

Diese Verbindung muss jedoch NACH dem Upload des Sketches auf dem Microcontroller hergestellt werden!

Hinweis

Ein Problem beim Deep Sleep ist, das die Daten nicht einfach auf Wunsch bereit stehen sondern nur in einem zuvor definierten Intervall abgerufen werden können.

Zum Beispiel könnte man einen DHT11 Sensor an den Microcontroller anschließen jedoch nicht beliebig die Daten abrufen, in diesem Fall würde man entweder die Daten auf eine SD Karte schreiben oder aber an einen Intranet / Internet Dienst zur späteren Auswertung senden. Eines dieser Internetdienste wäre ThingSpeak.com, wie du Daten an diesen Dienst sendest habe ich dir im Beitrag Iot Service ThingSpeak, einrichten und betreiben ausführlich erläutert.

Ausgabe von Daten auf der seriellen Schnittstelle

Als erstes wollen wir in einem definierten Abstand einen Text auf der seriellen Schnittstelle ausgeben. 

Ausgabe des Textes vom ESP8266
Ausgabe des Textes vom ESP8266

Sicherlich könnten wir dieses auch mit dem Befehl „delay“ machen ABER dazu müsste der Microcontroller im betrieb bleiben und würde somit deutlich mehr Strom verbrauchen.

void setup() {
  //beginn der seriellen Kommunikation mit 74880 baud
  //Es könnte auch jeder andere gültige Wert gewählt werden,
  //jedoch wird über diesen Wert auch die Debugausgaben angezeigt
  Serial.begin(74880);
  //Timeout für die serielle Verbindung
  Serial.setTimeout(2000);
  //solange die serielle Schnittstelle nicht bereit ist, mache... (nix)
  while(!Serial) { }

  //Ausgabe des Textes inkl. der Millisekunden seit dem der Microcontroller gestartet ist.
  Serial.print("Hallo, ich bin wach. Der Microcontroller läuft seit ");
  Serial.print(millis());
  Serial.println(" Millisekunden.");
  Serial.println("Ich gehe gleich für 10 sek. in den Deep Sleep.");
  //den Microcontroller in den Deep Sleep für 10 Sekunden versetzen.
  ESP.deepSleep(10e6); 
}

void loop() {
  //bleibt leer
}

Video

 

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.