In diesem Artikel gehen wir einmal unter die Bastler 😉 Meiner KNX Installation fehlt es leider an einem Sensor zum messen der Luftfeuchtigkeit. Da ich mir das Nachrüsten sparen will und auch nicht einsehe für eine Netatmo Station ein kleines Vermögen auszugeben, habe ich mich auf die Suche nach Alternativen gemacht und mein Arduino Kit rausgekramt. Leider hat das Arduino Uno Board kein WLAN und ich müsste die Daten auf andere Weise ins Netzwerk und zu obenHAB übertragen. Die Lösung heißt NodeMCU ESP8266 – ein Mikrocontroller mit eingebautem WLAN Modul, der über die Arduino IDE programmiert werden kann. Als Temperatursensor kommt ein DHT22 zum Einsatz.

Vorbereitung

Zunächst einmal muss der NodeMCU per USB mit dem Computer verbunden und für die Programmierung vorbereitete werden. Wie das im einzelnen funktioniert werde ich an dieser Stelle ausklammern und verweise auf eine super Anleitung von OpenDataLab, die auch mir sehr geholfen hat. Sobald das erledigt ist, kann der Sensor an das Board angeschlossen werden. Um einen ersten schnellen (fliegenden) Aufbau zu bewerkstelligen, kann entweder eine Steckplatine genutzt werden, oder Female Jumper Kabel. Beides ist in der Artikelliste oben aufgeführt. Die Pins werden folgendermaßen miteinander verbunden:

Pin Belegung Schema NodeMCU und Sensor

Pin Belegung Schema NodeMCU und Sensor

Programmierung NodeMCU

Unser Ziel ist es die Daten des Sensors an openHAB zu übertragen. Die einfachste Methode hierfür ist der Weg über das HTTP Binding. Damit können wir beispielsweise JSON Dateien auslesen. Wie es der Zufall will kann der NodeMCU als Webserver fungieren und die Sensordaten in eine JSON Datei schreiben, die sich openHAB dann abholen kann.

Es gibt sicherlich noch elegantere Wege der Datenübertragung an openHAB wie beispielsweise das MQTT Protokoll. Das Thema ist allerdings etwas umfangreicher und wird an anderer Stelle noch genauer behandelt werden.

Bibliotheken herunterladen

Für dieses Projekt benötigen wir folgende Bibliotheken einige Bibliotheken, die, sofern noch nicht geschehen, installiert werden müssen. Das wird im Menü Sketch – Bibilothek einbinden – Bibliotheken verwalten. Es öffnet sich der Bibliotheksverwalter. Hier über die Suche die folgenden Bibliotheken suchen und installieren:

  • ArduinoJson
  • ESP8266WiFi
  • ESP8366WebServer
  • DHT

In unser neues Projekt wird jetzt folgender Code eingefügt:

Die Werte für SSID und WLAN Passwort müssen natürlich durch die Zugangsdaten des eigenen WLAN zu Hause ersetzt werden. Wichtig: Der NodeMCU unterstützt nur das 2,4 GHz Band.

#define WLAN_SSID „xxxxxxx“
#define WLAN_PASSWORD „12345678“

Auf den Code selbst gehe ich an dieser Stelle nicht im Detail ein. Grob zusammengefasst macht der Code Folgendes:

  • Webserver starten
  • Sensor auslesen
  • Sensorwerte in eine .json Datei schreiben
  • .json Datei auf dem Webserver zur Verfügung stellen
  • Serielle Ausgabe der Werte, um alles auf dem Computer verfolgen zu können, wenn der Node per USB verbunden ist.

In der Arduino IDE kann nun der serielle Monitor geöffnet werden, um zu sehen was der Node ausspuckt und ob der Sensor sinnvolle Werte liefert.

Serieller Monitor Arduino IDE

Serieller Monitor Arduino IDE

Jetzt kann der Code kompiliert und auf den NodeMCU übertragen werden. Um zu testen, ob es Fehler im Code gibt, kann man den Code mit Klick auf das Häkchen oben links überprüfen.

Code Überprüfen und Kompilieren Arduino IDE

Code überprüfen und kompilieren Arduino IDE

Wenn die Überprüfung keine Fehler ergibt, kann das der Code mit Klick auf den Pfeil nach rechts auf das Gerät übertragen werden. Nach Abschluss sollten im seriellen Monitor die Vorgänge zu sehen sein.

Der Node sollte jetzt auch schon mit dem Netzwerk verbunden sein. Im seriellen Monitor ist die IP Adresse des Node zu sehen. Diese kann aber auch über den Router identifiziert werden. Sobald du die IP Adresse hast, in meinem Fall 192.168.1.54 kannst du die JSON Ausgabe über den Browser aufrufen.

Dazu gibst du im Browser die Adresse http://192.168.1.56/dht22.json ein (die IP Adresse musst du durch die IP Adresse des Node in deinem Netzwerk ersetzen). Das Ergebnis sollte so aussehen:

JSON Ausgabe NodeMCU (ESP8266)

JSON Ausgabe NodeMCU (ESP8266)

Die Einträge soil und soil_percent können ignoriert werden. Hier habe ich mittels Analog Read die einen Sensor zur Messung der Bodenfeuchtigkeit meiner Zimmerpflanze gebaut. Hierzu in einem anderen Artikel mehr ;). Kleiner Tipp: Firefox kann in der neusten Version JSON gleich lesbar anzeigen, wie im folgenden Screenshot dargestellt.

JSON Ausgabe NodeMCU (ESP8266)Firefox Darstellung

JSON Ausgabe NodeMCU (ESP8266)Firefox Darstellung

Das war es schon in Sachen Sensor bauen und programmieren. Die Daten, die der Webserver als JSON Datei zur Verfügung stellt, kann beispielsweise durch openHAB mittels HTTP Binding ausgelesen werden.

Im Zusammenhang mit dem NoceMCU habe ich mir auch einen kleinen 3D Drucker angeschafft und die passenden Gehäuse für meine Bastelarbeiten zu drucken. Ergebnisse und Vorlagen werden in der