Low-Cost WLAN Temperatursensoren mit NodeMCU ESP8266 im Selbstbau

Durch Zufall bin ich auf das IoT Entwickler-Board NodeMCU gestoßen der für IoT-Maker entwickelt wurde. Das kleine NodeMCU Board hat den großen Vorteil eine WLAN und eine USB Schnittstelle zum programmieren zu haben was die Entwicklung extrem beschleunigt, Grund genug für mich mir diesen kleinen Micro Controller etwas genauer anzusehen und direkt ein IoT Projekt mit diesem umzusetzen. Ich Baue auf Basis eines Lolin NodeMCU V3 ESP8266 Board einen WLAN Temperatur- und Luftfeuchtigkeitsmesser mit einem DHT22 Sensor und Batteriebetrieb.

Warum der NodeMCU V3 ESP8266?

Vor einer ganzen Weile hatte ich Temperatursensoren auf Basis der RFM69CW 433MHz  Module und Atmel ATTiny ATTINY84A Micro Controller gebaut, der Aufwand für das Zusammenbauen und die Programmierung ist allerdings recht hoch und setzt hohe Hürden für Anfänger. Da einer meiner 433MHz Sensoren einem Wasserschaden zum Opfer gefallen ist hätte ich wieder PCBs bestellen müssen und habe mich daher für die unkomplizierte WLAN Alternative entschieden. Die NodeMCU Boards sind zwar Entwickler- und Prototypen-Boards die ehr nicht in ihrem vollen Umfang für eine finale Lösung geeignet sind, das stört mich bei dem Preis aber nicht weiter. Ein Problem ist allerdings der hohe Stromverbrauch den den „aufgeblasenen“ Entwicklerboards im Produktionseinsatz.

Wohin werden werden Messdaten gesendet?

Als Empfänger für meine bisherige 433MHz Lösung habe ich bereits einen Raspberry Pi mit einem 433MHz Empfänger am laufen der bisher über ein Script (emonhub) die Daten an meine Emoncms Installation weitergeleitet hat. Da wir die Daten direkt ins Internet senden können verzichte ich auf den zwischenschritt und versende die Daten im JSON-Format direkt an mein EmonCMS. Wer keinen eigenen Server betreiben möchte kann sich ein Konto auf https://emoncms.org/ anlegen oder nach Modifikation des Sketches einen anderen Cloud Service verwenden.

Inhaltsverzeichnis

Hardware

Sensoren:

Mit ~13,00€ (ohne Versand) sind die Kosten für einen Sensor sehr sehr gering, in dieser Preisklasse bekommt man auf 433MHz Basis nicht viel, auf IP/WLAN Basis nichts (brauchbares).

Batterien

Um ein NodeMCU Projekt mit Batterien oder Akkus zu betreiben gibt es verschiedene Möglichkeiten, ich habe mich für zwei AA Alkaline Batterien entschieden, das ist definitiv nicht optimal, ich benötige aber keinen Spannungsregler (LDO) wie zum Beispiel bei 3,7V LiPo Zellen und kein spezielles Ladegerät wie z.B. für 14500 LiFePo4 Akkus. Hierbei kann es sein das bei 2x AA 1,5V Alkaline nicht jedes NodeMCU Board ordentlich funktioniert (3V). Eine sichere, günstige und einfache Lösung wäre daher 3x Alkaline 1,5V mit einem HT7333 LDO Spannungsregler, ich wollte mir unnötiges Löten aber sparen.

=> Update mit 2AA, DeepSleep und 5Minuten Intervall hat mein NodeMCU 11 Tage durchgehalten. Mit weiteren Modifikationen hält der NodeMCU sicherlich auf zwei AA noch um einiges länger.

Software einrichten – Arduino IDE

Zum Programmieren benutze ich die Arduino IDE auf meinem Windows 10 Rechner.

Nach der Installation müssen noch ein Einrichtungen erledigt werden.

Das Board muss zur Liste der unterstützen Geräte hinzugefügt werden um es programieren (flashen) zu können. Hierzu über das Menü Datei die Voreinstellungen öffnen und folgende URL unter „Zusätzliche Boardverwalter URLS“ eintragen.

arduino ide

Dann über Werkzeuge > Boardverwaltung das ESP8266 Paket suchen und Installieren

verwaltung arduino ide  esp8266

Dann wählt ihr über Werkzeuge folgende Einstellungen:

  • Board -> NodeMCU v9
  • CPU Frequenz -> 80MHz
  • Flash Size 4M
  • UploadSeed 115200
  • Port COM3 (kann ggf. auch COM1 oder 2 sein, probiert es aus falls mehrere zur Auswahl stehen)

nodemcu arduino ide settings

Wir benötigen auch noch die Libraries für den DHT22 Sensor um ihn einfach ansprechen zu können. Hierzu installieren wir über das Menu Sketch > Bibliothek einbinden > Bibliotheken verwalten

add librarie arduino ide

die Bibliothek „DHT sensor library“ von „Adafruit“ und installieren diese.

Sensor librarie

DHT22 Verkabeln

Als nächstes verkabeln wir unsere NodeMCU, das Setup ist recht einfach, ich benötige lediglich vier Female Jumperkabel, den DHT22 und einen 4,7kOhm wiederstand.

  • Ein Kumper Kabel zwischen D0 und RST um den DeepSleep zu ermöglichen – Blau
  • DHT22 Pin 1 ( VCC) auf 3,3V – Rot
  • DHT22 Pin2 (Data) auf D1 – Gelb
  • DHT22 Pin3 bleibt leer
  • DHT22 Pin4 (GND) auf GND – schwarz
  • Ein Widerstand 4,7kOhm zwischen DHT22 Pin1 und Pin 2

fritzing nodemcu v3 dht22

Ohne Breadboard nur mit Jumperkabel sieht das ganze bei mir so aus. Da der Node später in einem Gehäuse sitzt macht die lose Verkabelung keine Probleme.

NodeMCU Verkabelung

Wichtig!
Die Batterie schließen wir erst später an wenn alles getestet und programmiert wurde.

Programmieren – DHT22 Sketch für NodeMCU mit DeepSleep

Folgenden Code verwende ich um die Sensordaten an mein EmonCMS zu versenden. Um Ausführungszeit und somit Strom zu sparen verwendet das Sketch eine feste IP-Adresse und verzichtet auf jegliche Debug Ausgabe via Serial. Das Sketch läuft alle 5 Minuten und dazwischen ist die NodeMCU im den Tiefschlaf (deep sleep).

Die Daten für das Heim-WLAN, die IP-Adresse und Details eurer EmonCMS  Installation müssen entsprechend geändert werden. Achtet darauf das die NodeIDs einmalig sind und der korrekte API Key (Write API Key) verwendet wird.

Auf GitHUB gibts den Code auch noch mit Serial Ausgabe für eure Tests.

Programmiert wird über die USB-Schnittstelle. Zum programmieren eures NodeMCU steckt ihr das Board vom Rechner ab, drückt den FLASH Button und steckt während dieser gedrückt ist das USB Kabel wieder an. Der Flash Butto befindet sich direkt oberhalb des MicroUSB Ports.

Danach drückt ihr den Upload Button in der Arduino IDE und wartet bis der Vorgang abgeschlossen ist.

arduino ide programmieren

Wenn alles funktioniert hat sollte direkt eine neue Node (31 im Default) in eurem EmonCMS auftauchen die ihr dann entsprechend einem Feed zuordnen und dann z.B. in einem Dashboard visualisieren könnt. Ich habe mit meiner privaten EmonCMS 9.3 Installation ein einfaches Diagramm erstellt. Da sich mit EmonCMS recht intuitiv verhält verzichte ich an dieser Stelle auf weitere Details zur Einrichtung. Als alternative zur online Variante könnt ihr auch ein EmonCMS auf eurem Raspberry Pi installieren in eurem Heimnetz installieren (am einfachsten ist EmonPI Image).

nodemcu emoncms temperatur und luftfeuchte

NodeMCU mit Batterie betreiben

Das NodeMCU V3 Board ist mit 3,0 – 3,6V Input spezifiziert.

Da ich den Temepratursensor natürlich unabhängig von einer Stromquelle betreiben möchte verwende ich einen 2x AA Batterie-Träger zur Stromversorgung. Um flexibel zu bleiben habe ich zwei Jumperkabel Female Buchsen an die Kabel gefummelt, alternativ könnt ihr den Batterie-träger auch direkt an die PINS löten oder die Buchsen anlöten und die Verbindungen mit etwas Schrumpfschlauch schützen.

Ich benutze die Pins 3,3V und G nahe des Reset Schalter, es können alle 3V / GND Pins benutzt werden.

Batterie nodemcu

NodeMCU Battery

Wichtig! Da wir den Spannungsregler umgehen möchten (benötigt zusätzlich Strom) wird die Batterie in meinem Fall direkt an 3Vund GND angeschlossen. Wer mit anderen Batterien arbeitet muss ggf. über VIN oder 5V und GND gehen, je nach Setup / Batterie. Der Code “ ESP.getVcc()“ gibt leider nicht den korrekten Wert wieder bis jetzt habe ich keine Möglichkeit gefunden ohne Multimeter den Batterie Status auszulesen. Die Spannung der Batterie nimmt sehr schnell ab und ich denke das die zwei AA Batterien innerhalb weniger Tage unter die Minimum geforderten 3V fallen.

Fazit

Mit AA oder AAA Batterien ist der WLAN Temperatur Sensor auf der NodeMCU aktuell keine Alternative für die 433MHz Variante da einfach der Stromverbrauch ohne größere Eingriffe (z.B. Auslöten des LDO und des USB UART Port) viel zu hoch ist. Ein Zusammenbau aus einzelnen Kompnenten (ESP-12 WLAN Modul und ESP8266 SoC) ist mir zu aufwändig. Wer allerdings entweder kurzzeitig oder Stationär eine Lösung sucht oder einfach nur Programmieren und Basteln möchte ist mit der NodeMCU Variante zwecks der Einfachheit gut beraten.