In diesem Beitrag stelle ich dir vor, wie du deinen Mikrocontroller mit ESP8266 Chip in den “Deep Sleep” versetzt und somit deine externe Stromversorgung schonst.
Einen Mikrocontroller mit ESP8266 Chip habe ich unter anderem bereits in den nachfolgenden Beiträgen vorgestellt.
- NodeMCU Dev Kit mit ESP8266 Chip von Paradisetronic
- WEMOS D1 Mini – Übersicht
- NodeMCU – “Einer für (fast) Alles!”
Jedoch möchte ich hier den Wemos D1 mini verwenden, dieser kleine Mikrocontroller hat den Vorteil, dass Sensoren auf diesen gesteckt werden können ohne das man diese recht umständlich verkabeln muss.
Was ist der “deep sleep”?
Von einem “deep sleep” redet man, wenn der Mikrocontroller 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 Mikrocontroller 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 überzugehen.
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 Mikrocontroller 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 Mikrocontroller mit einem ESP Chip und ein Breadboardkabel.
- NodeMCU Dev Kit,
- NodeMCU*,
- Wemos D1 mini*,
- oder einen sonstigen ESP8266*,
- Breadboardkabel*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau der Schaltung für einen “Deep Sleep”
Der Mikrocontroller 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
Diese Verbindung muss jedoch NACH dem Upload des Sketches auf dem Mikrocontroller hergestellt werden!
Hinweis
Ein Problem beim Deep Sleep ist, das die Daten nicht einfach auf Wunsch bereitstehen, sondern nur in einem zuvor definierten Intervall abgerufen werden können.
Zum Beispiel könnte man einen DHT11 Sensor an den Mikrocontroller 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.
Sicherlich könnten wir dieses auch mit dem Befehl “delay” machen ABER dazu müsste der Mikrocontroller 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 }