Startseite>WLAN-Sensor zum Überwachen von Luftfeuchtigkeit und Temperatur
Aus Raspberry Pi Geek 06/2019

WLAN-Sensor zum Überwachen von Luftfeuchtigkeit und Temperatur

© Oleg Doroshin, 123RF

Prima Klima

Martin Mohr

In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

Sicher kennen Sie das Problem: Während der Heizperiode brennen Ihnen öfter die Augen, die Haut fängt an zu spannen. Die Ursache: zu trockene Raumluft. Um die Luftfeuchtigkeit und Raumtemperatur zu überwachen, gibt es Thermo-Hygrometer. Diese meist stationär aufgestellten Geräte lassen sich in der Regel nur vor Ort ablesen.

Wir bauen in diesem Artikel ein Thermo-Hygrometer, das sich mit dem WLAN verbindet und seine Messwerte über einen MQTT-Server auf einem Node-RED-Dashboard darstellt. Es klingt anfangs gar nicht so kompliziert, ein eigenes Funk-Thermo-Hygrometer zu bauen. Setzt man sich aber erst einmal näher mit dem Thema auseinander, stellt man schnell fest, dass es bis zum fertigen Projekt einer Menge einzelner Schritte bedarf.

MQTT

Der MQTT-Server läuft, ebenso wie Node-RED, auf dem Raspberry Pi. Eine detaillierte Installationsanleitung zu Node-RED finden Sie in der RPG-Ausgabe 01-02/2019 [1]. Als MQTT-Server kommt Mosquitto zum Einsatz, den Sie mit den Kommandos aus den ersten drei Zeilen von Listing 1 installieren. Um seinen Status abzurufen und ihn zu starten beziehungsweise zu stoppen, verwenden Sie die Kommandos aus den Zeilen 4 bis 6.

Um den Server auf seine Funktionsfähigkeit zu testen, öffnen Sie drei Terminalverbindungen zum Raspberry Pi. In zwei davon starten Sie je einen Mosquitto-Subscriber, der sich für Nachrichten des Topics raspberry interessiert (Listing 1, Zeile 7). Im dritten Terminal starten Sie einen Publisher, der unter dem Topic raspberry eine Nachricht sendet (Listing 1, Zeile 8).

Listing 1

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install mosquitto mosquitto-clients
$ sudo service mosquitto status
$ sudo service mosquitto stop
$ sudo service mosquitto start
$ mosquitto_sub -h localhost -v -t raspberry
$ mosquitto_pub -h localhost -t raspberry -m "Raspi talks MQTT!"

Nach dem Versand der Nachricht erscheint diese in den zwei Subscriber-Terminals. Alternativ lassen sich auch mit der Chrome-App MQTTBox [2] Nachrichten senden beziehungsweise empfangen (Abbildung 1). Der MQTT-Server arbeitet auf Port 1883. Weitere Informationen zu dem Messenger-Protokoll finden Sie im Kasten “MQTT”.

Abbildung 1: Ein typisches Beispiel für eine MQTT-Nachrichtenübertragung mit verschiedenen Clients.

Abbildung 1: Ein typisches Beispiel für eine MQTT-Nachrichtenübertragung mit verschiedenen Clients.

MQTT

Die Abkürzung MQTT steht für Message Queue Telemetry Transport, was frei übersetzt etwa warteschlangenorientiertes Nachrichtenübertragungsverfahren für entfernte Messeinrichtungen bedeutet. Das Protokoll wurde schon 1999 für die Überwachung von Öl-Pipelines entwickelt, kommt aber auch heute noch für verteiltes Messen im Profibereich zum Einsatz. Aktuell trifft man das MQTT-Protokoll immer öfter im IoT-Umfeld an, da es sich durch seine geringe Netzbelastung und sparsamen CPU-Verbrauch besonders gut für solche Anwendungen eignet.

MQTT kennt drei Komponenten: einen Nachrichtenerzeuger (Publisher), einen Nachrichtenempfänger (Subscriber) und einen sogenannten Broker, der die Kommunikation zwischen Publisher und Subscriber entkoppelt. Es müssen also nicht immer alle Komponenten gleichzeitig online sein, um Nachrichten zu übertragen.

Damit die Nachrichten nicht ungeordnet übertragen werden, gibt es bei MQTT in einer Baumstruktur aufgebaut Topics, also Nachrichtenkanäle, die bestimmte Typen von Übertragungen bündeln. Ein solches Topic könnte beispielsweise Gebäude/Etage/Raum/Sensor/Temperatur heißen. Innerhalb der Topics dürfen Sie Wildcards verwenden. Möchten Sie etwa die Werte aller Temperatursensoren im Gebäude erhalten, melden Sie sich in diesem Beispiel für das Topic Gebäude/+/+/Sensor/Temperatur an. Für sehr viele Programmiersprachen gibt es bereits MQTT-Bibliotheken. Der Service arbeitet standardmäßig über den TCP-Port 1883. Weitere Informationen zum MQTT-Protokoll erhalten Sie auf der offizielle Homepage des Projekts [3].

Der Sensor

Abbildung 2 zeigt den kompletten Schaltplan des Sensors. Die Bauteile verlöten Sie dazu auf einer Prototypen-Platine oder stecken sie in Sockelleisten. Ein ESP8266-Mikrocontroller stellt den zentralen Baustein des Sensors dar, er verfügt über eine eingebaute WLAN-Schnittstelle. Zum Messen von Temperatur und Luftfeuchtigkeit kommt der geeichte digitale Sensor AM2321 zum Einsatz, der sich über die I2C-Schnittstelle einfach auslesen lässt. Sie schließen den Sensor über GPIO4 und GPIO5 an den ESP8266 an.

Abbildung 2: Der Schaltplan des Thermo-Hygrosensors. Die Herzstücke der Schaltung bilden der Sensor AM2321 und der Mikrocontroller ESP8266.

Abbildung 2: Der Schaltplan des Thermo-Hygrosensors. Die Herzstücke der Schaltung bilden der Sensor AM2321 und der Mikrocontroller ESP8266.

Zur Programmierung des ESP8266 kommt ein USB-to-Serial-Modul zum Einsatz, das Sie über eine Stiftleiste auf die Testplatine stecken. Das ermöglicht es, das Modul leicht wieder zu entfernen, um damit weitere Sensoren zu programmieren. Als Spannungsversorgung dienen zwei 1,5-Volt-Batterien; der Kondensator C1 in der Schaltung hält dabei die Betriebsspannung des ESP8266 stabil.

Die Leuchtdiode an GPIO14 dient zu Testzwecken. Besonderes Augenmerk sollten Sie auf den Anschluss GPIO16 richten: Daran hängt intern der Timer, der den ESP8266 wieder aus seiner Tiefschlafphase weckt, damit er einen aktuellen Messwert übermittelt. Die Widerstände R7 und R8 dienen als Pullup-Widerstände für den I2C-Bus. Sie sorgen dafür, dass sich auf den Leitungen SDA und SCL saubere Signalpegel einstellen. Alle übrigen Bauteile – vier 10K-Widerstände und zwei Jumper – benötigen wir zum Programmieren und zum Betrieb des ESP8266.

Wie Abbildung 3 zeigt, ist der ESP8266 auf einer Adapterplatine verlötet, die über eine Stiftleiste auf der Basisplatine steckt. Manche dieser Adapterplatinen bringen schon von Haus aus einige der zum Betrieb nötigen Widerstände mit. Die Tabelle “Teileliste für den Sensor” fasst die zum Aufbau benötigten Bauteile zusammen.

Abbildung 3: Die drei komplett aufgebauten MQTT-Sensoren: Sie übermitteln per WLAN im Minutenabstand die Luftfeuchtigkeit und die Temperatur an den MQTT-Server.

Abbildung 3: Die drei komplett aufgebauten MQTT-Sensoren: Sie übermitteln per WLAN im Minutenabstand die Luftfeuchtigkeit und die Temperatur an den MQTT-Server.

Arduino IDE

Um Programme für den ESP8266 zu schreiben, benötigen Sie eine entsprechende Entwicklungsumgebung. Dafür bietet sich die Arduino IDE an, die Sie über die Homepage des Projekts herunterladen [3]. Wählen Sie dort die für Ihr Betriebssystem passende Version aus und installieren Sie sie. Um die Entwicklungsumgebung zu starten, wechseln Sie in das Installationsverzeichnis und geben auf der Kommandozeile ./arduino ein.

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland