Danach gilt es, die IDE für den ESP8266 anzupassen. Als Erstes tragen Sie unter Datei | Voreinstellungen | Zusätzliche Boardverwalter-URL’s die URL http://arduino.esp8266.com/stable/package_esp8266com_index.json ein. Damit veranlassen Sie die Entwicklungsumgebung, die für den ESP8266 nötigen Parameter in die Liste der Board-Manager aufzunehmen.
Danach starten Sie die Installation des Bord-Managers für den Mikrocontroller unter Werkzeuge | Board | Boardverwalter… und suchen nach ESP8266. Hier wählen Sie das Generic ESP8266 Modul unter Werkzeuge | Board aus. Um Programme in den ESP8266 hochzuladen, müssen Sie noch den USB-to-Serial-Adapter mit Ihrem Rechner verbinden.
Testprogramm
Das Testprogramm aus Listing 2 dient dazu, prinzipiell festzustellen, ob sich Programme in den ESP8266 laden lassen. Es bringt die an GPIO14 angeschlossene LED zum Blinken. Um das Programm hochzuladen und zu starten genügt es, den ESP8266 in den Flash-Modus zu schalten. Schließen Sie dafür die Jumper JP1 und JP2 und drücken Sie dann den Reset-Taster. Nun klicken Sie in der IDE oben links auf den Button zum Hochladen, also das Icon mit dem Pfeil nach rechts. Daraufhin startet der Upload automatisch. Denken Sie nach dessen Abschluss daran, die zwei Jumper wieder zu entfernen.
Klappt das Hochladen nicht auf Anhieb, überprüfen Sie zuerst die Hardware: Haben Sie alles korrekt verlötet und den richtigen Board-Manager ausgewählt (Generic ESP8266 Modul)? Beträgt die Übertragungsgeschwindigkeit 115200 Baud? Oft ist auch einfach ein falscher Port gewählt. Sie müssen auf jeden Fall einen TTYUSB-Port verwenden, auf keinen Fall einen COM-Port. Abbildung 4 zeigt alle notwendigen Einstellungen, um ein Programm fehlerfrei hochzuladen. Beginnt die LED zu blinken war der Upload erfolgreich.

Abbildung 4: Wenn Sie die hier gezeigten Kommunikationseinstellungen in der Arduino-IDE verwenden, sollte das Hochladen von Programmen auf den Mikrocontroller reibungslos klappen.
Listing 2
void setup() {
pinMode(14, OUTPUT);
}
void loop() {
digitalWrite(14, HIGH);
delay(1000);
digitalWrite(14, LOW);
delay(1000);
}
MQTT-Bibliothek
Unser Sensor soll seine Messwerte an den MQTT-Server schicken. Um das zu bewerkstelligen, verwenden Sie eine Bibliothek, die Sie installieren, indem Sie auf Sketch | Bibliothek einbinden | Bibliotheken verwalten klicken. Hier suchen Sie nach dem PubSubClient und installieren ihn. Nun lassen sich ohne viel Aufwand MQTT-Nachrichten vom ESP8266 versenden.
Sensorprogramm
Listing 3 zeigt das Programm für den Sensor. Vereinfacht beschrieben stellt der Sensor eine Verbindung zum WLAN her, liest den AM2321 aus und sendet die Daten an den MQTT-Server. Bei genauerem Blick fallen viele Details am Programmcode auf.
Nach dem Import aller nötigen Bibliotheken (Zeilen 1 bis 3) legt das Programm alle benötigten Parameter in Konstanten ab. Da sind zunächst einmal die Verbindungsdaten für das WLAN (Zeilen 5 und 6), wo Sie die für Ihr Netzwerk passenden Werte hinterlegen. In den darauffolgenden Konstanten geben Sie die Verbindungsdaten zum MQTT-Server ein (Zeilen 8 bis 10).
Verwenden Sie mehr als einen Sensor, müssen diese ihre Messwerte an verschiedene Topics senden, da sie sich andernfalls später nicht auseinanderhalten lassen. Der letzte Parameter (Zeile 12) gibt an, wie lange der ESP8266 nach einer Messung schlafen soll, bevor er eine neue Messung startet. Um die Batterien zu schonen, schaltet sich der Mikrocontroller zwischen den Messungen komplett ab, der Stromverbrauch liegt dann nur noch im Mikroampere-Bereich.
Die nächsten zwei Zeilen (14 und 15) definieren eine Verbindung zum WLAN und zum MQTT-Server. Bei beiden handelt es sich um Client-Verbindungen. Der Vorteil von MQTT liegt darin, dass die Publisher/Submitter definieren, welches Topic sie verwenden. Der Broker stellt die Topics dynamisch bereit. Sie müssen aber darauf achten, dass die Topics zusammenpassen. Da wir in unserem Beispiel mit drei Sensoren arbeiten, nummerieren wir sie einfach durch.
Nach dem Starten eines Mikrocontrollers läuft immer zuerst die Funktion setup() einmal durch. Sie führt üblicherweise nur einmal benötigte Programmteile aus. In unserem Fall befindet sich das komplette Programm innerhalb dieser Funktion, da alle Programmteile für eine Messung nur einmal durchlaufen werden müssen.
Das Kommando Wire.begin(4,5); (Zeile 18) startet eine I2C-Schnittstelle auf GPIO4 (SDA) und GPIO5 (SCL). Die nächste Zeile initialisiert die serielle Ausgabe des Programms. Alle hier geschriebenen Meldungen erscheinen im seriellen Monitor der Arduino IDE. Achten Sie darauf, dass der Monitor dieselbe Übertragungsgeschwindigkeit verwendet wie das Programm, in unserem Fall 115 200 Baud. Mithilfe dieser Ausgaben lassen sich Fehler in der Soft- und Hardware einfacher lokalisieren.
Das Kommando WiFi.begin() (Zeile 21) baut eine Verbindung zum WLAN auf und konfiguriert das Netzwerk. Da dieser Vorgang etwas Zeit in Anspruch nimmt, prüft die folgende While-Schleife kontinuierlich den Status der WLAN-Verbindung. Die Schleife wird erst nach einem Zustandekommen der Verbindung verlassen. Die folgenden Zeilen geben den Verbindungsstatus auf dem seriellen Monitor aus.





