Spielen mit dem ESP8266

Hallo ihr Lieben. Ich habe mal wieder ein wunderbares Spielzeug entdeckt: WLAN Module basierend auf dem ESP8266 der Firma Espressif. Mittlerweile habe ich verschiedene Module bei Ebay und Amazon erworben und getestet. Auf dem folgenden Bild meines Breadboards sieht man oben in der Mitte ein ESP12 auf einem Breakout und mittig links ein ESP01. Die Module kosten je nach Angebot zwischen 2 und 5 Eur das Stück.

ESP Laborboard

Oben links sieht man eine 3.3v Stromversorgung auf Basis eines LD1117V33. Rechts oben einen USB2TTL Konverter von ELV und unten mittig einen Atmega168.

Meine Module wurden alle mit einer AT Firmware geliefert. D.h. die Funktionen des Moduls werden, wie früher bei einem Modem, über AT Kommandos gesteuert. Manche Module, wie z.B. die ESP01, hatten die Stock-Firmware von Espressif. Diese braucht für die serielle Anbindung 115200 Bps. Und, was noch lästiger ist, einen seltsamen Line-Terminator, damit das Modul überhaupt reagiert. Mit Kermit unter Linux führt der folgende Parametersatz zum Erfolg:

Die ESP07 und ESP12 sind von AI-Thinker und kommen mit einer vom Hersteller angepassten Firmware. Diese ist eher Arduino-Freundlich mit 9600 Bps anzusprechen. Und braucht keinen speziellen Line-Terminator. In Kermit verwende ich:

Für die Verwendung der Module mit einer AT Firmware in eigenen Projekten gibt es im Netz diverse Libraries und Howtos. Meine geliebten Atmegas und auch Arduino tun sich da allerdings etwas schwer, da auf der MCU meist nicht genug RAM zur Verfügung steht um größere Datenpakete, HTML-Requests oder MQTT-Messages effizient zu verarbeiten bzw. zu parsen. Auch hat mich die Tatsache irritiert, dass die Module mit dieser Firmware eine Art Cloud-Update bieten und dabei AI-Thinker respektive Espressif-Server kontaktieren. Da bricht meine Paranoia durch, wer will das schon und wer weis, was die noch alles machen. Wenn wir es schon von Paranoia haben: Das weiter unten erwähnte SDK liefert einen Teil als binary Libraries mit. Ja, auch das ist ein komisches Gefühl! Aber zu Mindestens sind die Libs nicht obfuscated und man kann sich mit strings oder einem Decompiler einen gewissen Überblick verschaffen.

Also habe ich mich nach alternativen Möglichkeiten umgesehen, die Module einzusetzten. Dabei habe ich mich mit zwei “Custom Firmwares” auseinandergesetzt:

Beide Firmwares kann man entweder anpassen und selber kompilieren, oder aber die bereitgestellten Binary-Versionen flashen. Da das jeweilige Vorgehen zum flashen stark plattformabhängig ist und sich häufig ändert, sei hier auf die Dokumentation des jeweiligen Projekts verwiesen. Bei NodeMCU können eigene Entwicklungen in LUA gescripted und auf dem Modul ausgeführt werden. Frankenstein bietet eine Art API um das Modul via serieller Schnitstelle zu steuern. Für NodeMCU gibt es eine gute Community und viele Beispiele im Netz. Die Möglichkeit, Code direkt on-the-fly via serieller Konsole auf dem Modul auszuführen hat seinen Reiz. Letztlich war ich aber auch mit LUA nicht so glücklich, sodass ich mich entschieden haben nativ in C/C++ für das Modul zu entwickeln. Das kenne und liebe ich von meinen Atmegas. Dazu habe ich mir die folgenden Mögichkeiten angeschaut:

Die Arduino-Plattform führt schnell zu brauchbaren Ergebnissen und erleichtert das flashen der Module. Wobei ich darauf hinweisen möchte, dass nicht alle Arduino-Libraries direkt verwendbar sind. Auch hier gibt es eine lebendige Community und die Anzahl der verwendbaren Libraries steigt stetig an. Eines der größten Mankos zum Zeitpunkt dieses Eintrags ist die fehlende Unterstützung für SSL/TLS. Wenn ich die Tage Zeit finde, dann beschreibe ich mein Aruduino Projekt genauer. Ich habe auf einem Development-Board von EBay einen Web-Server realisiert, der die Web-Root von einer SD-Karte liest. Auf dem Board befinden sich diverse Sensoren (DHT11, OneWire DS18B20) und Aktoren (Relais, RGB-LED). Hier ein Bild vom Aufbau:

IMG_1379

Letztlich entwickle ich jetzt die meiste Zeit eingenständigen Code mit vi und esp-open-sdk. Im SDK von Espressif wird seit Version 1.3 auch eine brauchbare Library für SSL mitgeliefert. Ein Beispiel-Code für TLS-basiertes HTTPS findet sich zum Beispiel in diesem Projekt. Zur Zeit entwickle ich auf Basis des esp_mqtt Projekts eine eigene Firmware, die Daten als JSON per HTTPS-Get an ein EMONCMS (alternativ Thingspeak) übertragen kann. Letztlich ist die Zielplattform egal, die meisten Plattformen unterstützen eine REST-Api via HTTP oder HTTPS. Natürlich kann man auch das esp_mqtt Projekt als Basis verwenden, um die Daten per MQTT zu übertragen. Zum Beispiel an Mosquitto oder die neue IOT Plattform von Amazon. Irgendwann stelle ich meine Projekte noch im Detail vor 😀

Leave a Reply