Der ESP8266

Der ESP8266 ist ein einfach zu programmierender, sehr günstiger und kleiner Mikrokontroller mit WLAN von der chinesischen Firma espressif. Etwa seit 2015 ist er in Deutschland verfügbar und seither in mehreren unterschiedlichen Varianten erhältlich. Enwickelt wurde der ESP8266 offensichtlich für IoT-Anwendungen, die seit 2017 unter anderen von der ITEAD unter der Marke Sonoff erhältlich sind.

Ein ESP822 kann mit unterschiedlicher Software betrieben werden, aus meiner Sicht am einfachsten mit der Arduino-IDE und C/C++. Inzwischen gibt es ESP8266-Flasher für die unterschiedlichen Ausführungen des ESP8266 zu kaufen, mit entsprechenden Stiftleisten und Tastern (z.B. Reset und Flash). Eine Verkabelung "von Hand" mit einem FTDI-USB-Umsetzer ist damit überflüssig.

Die unterschiedlichen Varianten des ESP8266 unterscheiden sich durch die Größe der Platine und die unterschiedliche Anzahl herausgeführter Pins. Der einfachste und kleinste Vertreter auf einer Platine ist der ESP6288 ESP-01. Zur Entwicklung eignet sich ein ESP8266 NodeMCU oder ein ESP8266 ESP12 aber besser, da diese im Betrieb mit dem PC via Micro-USB verbunden bleiben (können). Auf diese Weise kann der Programmablauf über Meldungen auf dem seriellen Monitor der Arduino-IDE dargestellt und einfach debugt werden.

Zur Spannungsversorgung eies ESP8266 ESP-01 verwende ich immer einen Spannungswandlet AMS1117-3.3. Dieser erzeugt aus bis zu 12 VDC die Versorgungsspannung des ESP-01 mit 3,3 VDC (VCC). Damit der ESP-01 nach dem Anlegen der Versorgungsspannung mit dem eigenen Code überhaupt läuft, muss mindestens der Pin CH_PD auf Plus (VCC) gelegt werden. Die beiden GPIOs 1 und 2 können können unbelegt bleiben. Sobald diese jedoch verwendet werden, z.B. um eine LED anzuschließen, muss man beide beim Start des ESP-01 ebenfalls auf VCC ziehen, z.B. mit einem PullUp-Widerstand (10k). Wenn man den gleichen Fehler mach wie ich am Anfang und eine LED direkt zwischen einen der beiden GPIO-Pins und Masse hängt, dann startet der ESP-01 im Flash-Modus.

Der ESP8266 ESP-01 eignet sich perfekt für diverse Sensoren, deren Signale via WLAN bereitgestellt werden. Als Temperatursensor verwende ich immer die digitalen DS18B20. Diese können seriell verschaltet werden, zehn DS18B20 funktionieren einwandfrei. Eine Vierzahl weiterer Sensoren (Luftdruck, relative Feuchte, etc.) können über den I2C-Bus angesprochen werden, ebenso diverse Displays, z.B. LCD oder OLED.

Leider habe ich es bis dato nicht geschafft, einen ESP8266 sinnvoll mit Batterie zu betreiben. Trotz Kontaktierung des GPIO16 mit RST (ist eine löttechnische Herausforderung und man braucht gute Augen) ist es mir nicht gelungen, den angablich vorhandenen DeepSleep-Modus zu erreichen und auch wieder daraus aufzuwachen. Bei einigen (aber nicht allen!?!) ESP-01 musste ich feststellen, dass ein flashen nur OHNE die Verbindung zwischen GPIO16 und RST funktioniert, was die Sache zusätzlich verkompliziert. Angeblich ist hier der Nachfolger ESP32 viel umgänglicher, hab ich aber noch nicht getestet!


WLAN-Temperatursensor

Mit einem ESP8266 ESP-01 lässt sich vermutlich der günstigste WLAN-Temperatursensor selbst aufbauen. Man braucht einen ESP-01, einen oder mehrere digitale Temperatursensoren DS18B20, ein AMS1117-3.3, eine Einbau-Hohlbuchse für Stecker 5,5/2,1 mit Lötanschluss und ein kleines Gehäuse. Ich verbaue meistens noch eine LED um zu zeigen, dass die WLAN-Verbindung hergestellt wurde und der ESP-01 funktioniert (LED blinkt dazu). Ein oder mehrere DS18B20 können an die mit dem Gehäuse verklebte 3-polige Leiterplatten-Anschkussklemme angeschlossen werden.

WLAN-Temperatursensor innen WLAN-Temperatursensor außen

 

Die Signal-Leitung der DS18B20 und die LED werden auf GPIO0 bzw. GPIO2 gelegt. Damit der ESP8266 richtig startet müssen beide GPIOs auf VCC gezogen werden. Das bedeutet für die LED, dass diese leuchtet, wenn der GPIO2 auf low gezogen wird. Die Schaltung sieht dann zum Beispiel so aus:

Schaltung ESP8266-ESP01_DS18B20

 

In diesem Beispiel-Code werden die Temperaturen der DS18B20 ausgelesen. Der ESP8266 arbeitet als Web-Server und stellt das Ergebnis im XML-Format unter der festgelegten IP bereit:

 

Nach dem Aufruf via 192.168.XXX.YYY erhält man vom ESP8266 mit einem DS18B20 zum Beispiel folgende Antwort:
<MyHome>
  <ESP8266_ESP01>
    <data name="SSID" value="MySSID" valueunit=""/>
    <data name="IP" value="192.168.XXX.YYY" valueunit="xxx.xxx.xxx.xxx"/>
    <data name="Version" value="1.14 from 2018-02-02" valueunit=""/>
    <data name="MAC" value="aa:bb:cc:dd:ee:ff" valueunit="AA:BB:CC:DD:EE:FF"/>
    <data name="Temp0" value="26.75" valueunit="degC" address="28:ff:68:cc:61:16:04:65"/>
  </ESP8266_ESP01>
</MyHome>

 

Ein Raspberry kann mit einem einfachen Python-Skript die Temperatur(en) auslesen und zum Beispiel in einer MySQL-Tabelle ablegen. Ich erfasse auf diese Weise zum Beispiel Vor- und Rücklauftemperaturen diverser Heizkreise und die Temperatur unter der Fasaden-Isolierung. Ich wollte einfach schon immer mal wissen, wie warm oder kalt es unter einer Dämmung eigentlich ist.


weitere Beispiele mit ESP8266