Das ESP-01S DHT11 Sensormodul ist in Verbindung mit einem ESP-01 (ESP8266) eine sehr kleine Lösung zum Messen der Temperatur und der Luftfeuchtigkeit.

Leider hat der DHT11 nicht die beste Genauigkeit, jedoch reicht diese für den „Hausgebrauch“ völlig aus.
Bezug
Das Modul kann über ebay.de* oder amazon.de* für ca. 3,5 € bezogen werden. Obwohl hier ebay.de die besseren Preise hat, ist die Versandzeit bei amazon.de deutlich kürzer. Daher muss man abwägen, was einem besser passt.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Technische Daten des ESP-01S DHT11 Shields
- Betriebsspannung 3,7V bis 12V
- Messbereich
- Luftfeuchtigkeit 20 % – 90 %
- Temperatur 0 °C bis 50 °C
- Messgenauigkeit
- Luftfeuchtigkeit ± 5 %
- Temperatur ± 2 °C
Montage des ESP-01 Moduls
Auf dem DHT11 Modul befindet sich ein kleiner, weißer Pfeil dieser gibt die Richtung an wie man das ESP-01S Modul aufsteckt.
Wenn beide Module verbunden sind, wird die Stromzufuhr angeschlossen. Ich wähle hier ein Universal Netzteil welches man für ca. 8 € auf ebay.de finden kann.
Bei Netzteilen achte ich besonders darauf das diese aus Deutschland kommen, denn somit hat man die Gewissheit das diese den Mindestnormen für elektrische Geräte entsprechen.
Da die Universalnetzteile jeweils über Steckeradapter verfügen muss man sich noch einen zusätzlichen Adapter besorgen damit man + & – vom Stecker bequem abgreifen kann.
Diesen Adapter kann man für ca. 4€ auf ebay.de erwerben.
Programmieren des ESP-01
Um den ESP-01 zu programmieren, benötigt man einen Adapter, bedingt durch den Aufbau der Pins am ESP-01 kann man diesen nicht auf ein Steckbrett stecken und von dort mit Breadboardkabeln mit einem FTDI Modul verbinden.
Adapter zum Programmieren
Es gibt 2 verschiedene Adapter für den ESP-01 einmal zum zusammenlöten und für das Steckbrett (hier wird zusätzlich ein FTDI Modul benötigt) und einmal komplett & bequem als USB Adapter.
Der Adapter (oben im Bild) wird leider ohne die benötige Brücke ausgeliefert. Warum dieses ist, erschließt sich mir nicht, da diese Brücke für das Programmieren des ESP-01 benötigt wird.
Erzeugen der Brücke
Also erzeugen wir uns zuerst die Brücke damit wir den ESP-01S programmieren können.
Wir benötigen dazu:
- einen Lötkolben,
- Lötzinn,
- eine Zange,
- eine Pinzette
- zwei Lötstifte im Rastermaß 2,54mm
- einen Jumper
Den Jumper habe ich mir von einem alten Motherboard genommen, hier lohnt es sich immer ein kleines Lager mit alten Geräten anzulegen.
Die Lötstifte werden an der Unterseite des USB Programmers wie im Bild zusehen angelötet.
Dabei muss man aufpassen das, man keine Brücke zu anderen Pins erzeugt.
Wenn dieses erfolgt ist, brauchen wir nur noch den Jumper auf die Lötstifte stecken und schon haben wir unseren USB Programmer fertig.
Wenn wir den ESP01S einmal nur über USB betreiben möchten so entfernen wir den Jumper und wenn der ESP01S programmiert werden soll wird dieser wieder darauf gesteckt.
Einrichten der Arduino IDE
Soweit noch nicht geschehen muss die ESP Bibliothek der Arduino IDE hinzugefügt werden. Diese Bibliothek bringt verschiedene Features für die ESP8266 Mikrocontroller mit.
Installieren der ESP Bibliothek
Die ESP Bibliothek wird über den Boardverwalter installiert, um diesen zu öffnen, navigieren wir über das Menü „Werkzeuge“ > „Board: xyz“ > „Boardverwalter…“. Im nun geöffneten Dialog suchen wir nach dem Begriff „esp“. Hier wählen wir den Eintrag „esp8266 by ESP826 Community“ und wählen aus der Auswahlliste (1) die Version 2.4.1 (oder neuer) (2) danach nur noch auf die Schaltfläche „Installieren“ (3) klicken.
Nachdem die Bibliothek installiert wurde, kann der Boardverwalter über die Schaltfläche „Schließen“ geschlossen werden.
Einstellungen für den ESP01S setzen
Den ESP-01S gibt es in verschiedene Ausprägungen, d.h. ggf. musst du in den Einstellungen etwas anderes setzen, für den ESP-01S welchen ich über ebay.de bezogen haben muss ich folgende Werte setzen.
- Board – Generic ESP8266 Module
- Flash Mode – QIO
- Flash Size – 1M (no SPIFFS)
- Debug port – Disabled
- Debug Level – Keine
- IwIP Variant – v2 Lower Memory
- Reset Method – ck
- Crystal Frequency – 26 MHz
- VTables – Flash
- Flash Frequency – 40 MHz
- CPU Frequency – 80 MHz
- Builtin Led – 2
- Upload Speed – 115200
- Erase Flash – Only Sketch
Hier hat mich ein Arbeitskollege Florian W. unterstützt welchen ich für den Einsatz besonders danken möchte.
Der Port muss individuell eingestellt werden, diesen siehst du erst wenn der ESP-01S über einen Programmer mit dem PC Verbunden ist.
Upload eines Sketches
Wenn nun der ESP-01S mit einem Programmer am PC angeschlossen ist und die oben genannten Einstellungen gesetzt wurden, dann kann ein erster Sketch hochgeladen werden. Da der serielle Port des EPS-01S belegt ist, entfällt das „Hello World!“ und wir wollen einfach die „Buildin Led“ zum Blinken bringen.
Bei meinem ESP-01S liegt die Buildin Led auf dem Port 2 hier gibt es Module welche einen anderen verwenden, wenn also nix blinken sollte, einfach mal einen anderen Wert für Buildin Led setzen.
Quellcode
#define LED LED_BUILTIN const int PAUSE = 125; void setup() { pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED,HIGH); delay(PAUSE); digitalWrite(LED,LOW); delay(PAUSE); }
Video
DHT11 Shield ansteuern
Nachdem wir also nun unseren ersten Sketch auf den ESP-01S hochgeladen und betrieben haben, wollen wir nun das DHT11 Shield verwenden. Es ist jedoch bauartbedingt nicht möglich die Daten des DHT11 auf die serielle Konsole auszugeben, daher erzeuge ich eine kleine Webseite, auf welche die Daten abgelesen werden können.
Wie man so eine Webseite erstellt habe ich bereits im Tutorial WEMOS D1 – WLAN Thermometer mit DHT11 Sensor beschrieben. Das Tutorial wurde zwar für einen WEMOS D1 entwickelt, jedoch ist dieses (fast) 1:1 auch für den ESP-01S verwendbar. Es muss hier „nur“ der Pin für den DHT11 Sensor Shield auf 2 eingestellt.
Die Zeilen für die Ausgabe von Daten auf der seriellen Schnittstelle können entfernt werden, da man auf diese mit dem Shield nicht zugreifen kann.
#include <ESP8266WiFi.h> #include "DHT.h" const char* ssid = ""; //SSID aus dem Router const char* password = ""; //Passwort für den Zugang zum WLAN WiFiServer server(80); //Port auf welchem der Server laufen soll. #define DHT11PIN 2 #define DHT11TYPE DHT11 DHT dht11(DHT11PIN, DHT11TYPE); void setup() { delay(10); //10ms. Warten damit die Seriele Kommunikation aufgebaut wurde. WiFi.begin(ssid, password); //Initialisieren der Wifi Verbindung. while (WiFi.status() != WL_CONNECTED) { //Warten bis die Verbindung aufgebaut wurde. delay(500); } dht11.begin(); server.begin(); // Starten des Servers. } /** * Die Funktion gibt den HTML Kopf auf dem Client aus. * Dieses wird für jeden Respond verwendet. **/ void writeResponse(WiFiClient client, float tempValue, float humidityValue){ client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head>"); client.println("<script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>"); client.println("<script type='text/javascript' src='http://progs.draeger-it.blog/wemosd1/dht11/gauges.js'></script>"); client.println("<link rel='stylesheet' href='http://progs.draeger-it.blog/wemosd1/dht11/styles.css'/>"); client.println("</head>"); client.println("<body>"); client.println("<div id='tempChart' class='chartContainer'></div>"); client.println("<div id='pressChart' class='chartContainer'></div>"); client.println("<script>"); client.println("google.charts.load('current', {'packages':['gauge']});"); client.println("google.charts.setOnLoadCallback(drawCharts);"); client.println("function drawCharts() {"); client.print("drawTempChart("); client.print(tempValue); client.print(");"); client.print("drawPressChart("); client.print(humidityValue); client.print(");"); client.println("}"); client.println("</script>"); client.println("</body>"); client.println("</html>"); } void loop() { //Prüfen ob sich ein Client verbunden hat, wenn nicht die Loop "verlassen" WiFiClient client = server.available(); if (!client) { return; } // Wenn sich ein Client verbunden hat solange warten bis Daten gesendet werden. Serial.println("Neuer Client verbunden."); while(!client.available()){ delay(1); } String request = client.readStringUntil('\r'); client.flush(); float tempValue = dht11.readTemperature(); //Temperatur vom Sensor DHT11 lesen float humidityValue = dht11.readHumidity(); //relative Luftfeuchtigkeit vom Sensor DHT11 lesen if (isnan(tempValue) || isnan(humidityValue)) { Serial.println("DHT11 konnte nicht ausgelesen werden"); tempValue = 0; humidityValue = 0; } writeResponse(client, tempValue, humidityValue); delay(1); //1ms. Pause }
Nachdem der Sketch hochgeladen wurde, muss man das ESP-01S Modul auf das DHT11 Sensor Shield stecken (hier ist auf den kleinen, weißen Pfeil zu achten).
Das DHT11 Sensor Shield muss nun noch mit Spannung versorgt werden, dazu kann man eine Quelle von 3,7V bis 12 V wählen, ich nutze hier ein Modul, welches auf ein Breadboard gesteckt wird, auf diesem kann man mit einem Jumper wählen welche Spannung anliegen soll. Betrieben wird dieses Modul über ein Universal Netzteil welches 9V liefern muss.
Um die Daten vom ESP-01S zu sehen, müssen wir die IP-Adresse im Browser eingeben. Aber wie kommt man an diese, wenn es keine Serielle Ausgabe gibt? Hier kann man im Router prüfen welche WLAN-Geräte sich verbunden haben, bei mir wird das ESP-01S Shield als ESP-184B20 angezeigt.

Nehmen wir also nun die IP-Adresse „192.168.178.48“ und geben diese in einem Browser ein und betätigen die Enter Taste.
Zum aktualisieren muss die Seite aktualisiert werden, hier bietet der Browser eine Schaltfläche oder man tippt in die Adressleiste und betätigt die Enter Taste.
Fazit
Als Fazit ziehe ich, dass der ESP-01S nur bedingt einfach in der Handhabung ist. Wer es gewohnt ist einen Mikrocontroller einfach einzustecken und loszulegen, der wird erstmal etwas herumspielen und vor allem löten müssen. Aber, wenn man sich nach dieser Anleitung richtet sollte das alles kein Problem sein. (Sollten trotz des Problems auftauchen, so bitte ich um eine Rückmeldung über das Kontaktformular.)
Hallo Herr Stefan Draeger,
beim kompilieren des Sketches für das DHT11 Shield und dem ESP8266 Modul kommt es immer zu folgender
Ausgabe und Fehlermeldungen:
Arduino: 1.8.8 (Windows Store 1.8.19.0) (Windows 10), Board: „Generic ESP8266 Module, 80 MHz, Flash, ck, 26 MHz, 40MHz, QIO, 1M (no SPIFFS), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200“
C:\Users\Georg\Documents\Arduino\DHT11_ESP8266_Server\DHT11_ESP8266_Server.ino: In function ‚void setup()‘:
DHT11_ESP8266_Server:16:11: error: ‚ledPin‘ was not declared in this scope
pinMode(ledPin, OUTPUT); //Den LEDPin als ausgang setzen.
^
DHT11_ESP8266_Server:17:24: error: ‚ledStatus‘ was not declared in this scope
digitalWrite(ledPin, ledStatus); //Die LED initial auf den Status „AUS“ setzen. ^
Mehrere Bibliotheken wurden für „DHT.h“ gefunden
Benutzt: C:\Users\Georg\Documents\Arduino\libraries\DHT_sensor_library
Nicht benutzt: C:\Users\Georg\Documents\Arduino\libraries\DHT-sensor-library-master
exit status 1
‚ledPin‘ was not declared in this scope
Was kann ich tun, um diese Fehler zu beheben?
Mit großem Dank im voraus und Grüßen aus Frechen
Georg Dotten
>>Mehrere Bibliotheken wurden für „DHT.h“ gefunden
Ich habe DHT von adafruit benutzt + „adafruits sensor“ aus
https://github.com/adafruit/Adafruit_Sensor
alles funktioniert.
Hallo Herr Dräger,
bei mir hat das Hochladen des Sketches soweit funktioniert, ich musste lediglich diese Einstellungen setzen:
Board – Generic ESP8266 Module
-> Flash Mode – DIO
-> Flash Size – 512K (no SPIFFS)
Debug port – Disabled
Debug Level – Keine
IwIP Variant – v2 Lower Memory
Reset Method – ck
Crystal Frequency – 26 MHz
VTables – Flash
Flash Frequency – 40 MHz
CPU Frequency – 80 MHz
Builtin Led – 2
Upload Speed – 115200
Erase Flash – Only Sketch
Die Charts werden mir auch angezeigt, allerdings mit 0°C und 0%.
Wenn ich am DHT Shield den ResetButton betätige, werden mir manchmal bei 1~2 Seitenaktualisierungen ([F5] oder auch [Strg]+[F5]) dann auch Werte dargestellt (etwa 5°C zuviel, aber darum kümmere ich mich später), dann aber wieder 0°C und 0%.
Irgendeine Idee?
Gruß, Toni
Hi,
diesen Fehler habe ich auch schon mitbekommen.
Ich werde mich diesem einmal annehmen und (versuchen) eine Lösung anzubieten.
Gruß,
Stefan Draeger
Ich habe das selbe Problem, die Werte von DHT11 Sensor kommen als `nan`, ich habe mit unteschiedlichen Libraries bereits ausprobiert. Leider ohne Erfolg, deswegen diese Post
’nan‘ könnte sein das read veraltet ist, sollte mit get gehen …
alt:
float tempValue = dht11.readTemperature(); //Temperatur vom Sensor DHT11 lesen
float humidityValue = dht11.readHumidity(); //relative Luftfeuchtigkeit vom Sensor DHT11 lesen
neu:
float tempValue = dht11.getTemperature(); //Temperatur vom Sensor DHT11 lesen
float humidityValue = dht11.getHumidity(); //relative Luftfeuchtigkeit vom Sensor DHT11 lesen
Hi,
stimmt, es gibt die beiden Funktionen „getTemperature()“ & „getHumidity()“ jedoch sind diese in keiner Dokumentation sowie im GitHub Repo von Adafruit hinterlegt.
https://github.com/adafruit/DHT-sensor-library
Gruß,
Stefan Draeger
Super Projekt! Bei mir funktioniert es.
Ich nutze das als „Start“, versuche das MQTT-Fähig zu machen und so in meinem IoT-Projekt auf die Werte zurückgreifen zu können. Danke für den guten Start 🙂
Corona bedingt habe ich als Rentner mit dürftigen Soft- und Hardware Kenntnissen so einige kleiner Projekte mit dem Arduiono realisiert. Weihnachten kam ein EESP-01S für meinen 10 jährigen Enkel dazu. Zu Beginn sind wir fast verzweifelt. Es gibt viele Anleitungen im Internet, aber mit keiner bekamen wir das Modul zum funktionieren.
Unser größtest Problem war der fehlende Adapters zum Programmieren. Nach Weihnachten haben wir es mit einem Arduiono Uno probiert, was leider nicht zum erhofften Erfolg führte. Nach einigen lehrreichen Versuchen sind wir auf diese Seite (Anleitung) gestoßen. Zugegeben, hatten wir durch unsere Versuche schon etwas „schlechte“ Erfahrung und kannten ein paar Fallstricke.
Mit deiner sehr guten und sehr verständlichen Anleitung fassten wir neuen Mut und kamen recht schnell (schon fast zu schnell -halbe Stunde vor dem Abendessen) zum gewünschten Ziel. Also tolle Anleitung und vielen vielen Dank, auch von meinem Enkel !
Hallo Peter,
vielen Dank für dein positiven Kommentar, falls du Fragen, Anmerkungen oder Wünsche hast so kannst du mich jederzeit per E-Mail oder Kontaktformular erreichen.
Gruß
Stefan Draeger
Hallo Herr Draeger,
vielen Dank für Ihre Mühe. Ich habe meinen ESP-01 mit dem DHT11 Modul zum Laufen gebracht.
Leider habe ich 1 Tag vergeblich, mit dem auf dem Modul befindlichen ESP, gearbeitet und es passiert nichts (kein Datenempfang). Dann kurzentschlossen noch einen 2. bestellt (anderer Lieferant) und nach sec. hatte ich Daten .
Leider sind sowohl Temp als auch Luftfeuchte doch sehr ungenau. 5 Grad und mehr liegt die Temperatur daneben. Aber eine Ursache ist das Modul mit der LED, denn dies wird im Betrieb warm.
Siegfried
Hallo Zusammen,
ich will dieses Setup so für eine solarbetriebene Wetterstation im Gartenbeet nutzen.
Danke für den Sketch – ich kann das soweit alles übernehmen.
Nun zu meinem Problem: Wenn ich den ESP über einen Akku (3,7V) oder über eine 9V Blockbatterie versorge, bootet er nicht. Die LED am ESP bleibt dauerhaft an. Er bootet erst, wenn ich manuell den Reset-Knopf am DHT-Board drücke bootet der ESP richtig. Das ist für eine Wetterstation denkbar ungünstig.
Kann mir jemand einen Tipp geben woher der Fehler kommt und was ich dagegen unternehmen kann?
Viele Grüße
Hallo,
Ich habe ein ähnliches Problem. Sobald ich den Ultraschallsensor an den ESP01S gesteckt habe bootet dieser nicht.
Versorgen ich zuerst den ESP01S mit 3,3V bootet dieser. Anschließend kann ich den Ultraschallsensor anschließen und alles läuft.
Hat jemand eine Idee wie ich das lösen kann?
Tolles Beispiel genau was ich brauche!
Leider ist die Ausgabe auf der HTML Seite bei mir nur:
„HTTP/1.1 200 OK Content-Type: text/html“
Sehe keine Grafiken und angezeigten Werte des DHT Sensors 🙁
Bitte um Hilfestellung