In diesem Beitrag erfährst du, wie man einen Umweltsensor DHT11 am ESP32 D1 R32 mit MicroPython auslesen und diese Sensordaten verarbeiten kann. Für diesen Beitrag verwende ich wieder das Rich Shield von Open Smart. Du kannst jedoch mit wenigen Bauteilen den Sensor an deinen ESP32 anschließen und dieses kleine Tutorial nachbauen.
Der DHT11 Sensor ist eine kostengünstige und weit verbreitete Lösung zur Messung von Temperatur und Luftfeuchtigkeit. Er eignet sich hervorragend für viele DIY-Projekte, wie z.B. die Überwachung von Raumklima, Wetterstationen oder Smart-Home-Anwendungen. In den folgenden Abschnitten zeige ich dir Schritt für Schritt, wie du den Sensor anschließt, die Daten ausliest und auswertest.
Zusätzlich werde ich dir zeigen, wie du die ausgelesenen Sensordaten mit einem Zeitstempel versiehst und in eine CSV-Datei speicherst. Dies ermöglicht eine einfache Weiterverarbeitung und Analyse der Daten, beispielsweise in Tabellenkalkulationsprogrammen wie Excel. So kannst du die Temperatur- und Luftfeuchtigkeitswerte über einen längeren Zeitraum überwachen und Trends erkennen.
Inhaltsverzeichnis
- Technische Daten des DHT11 Sensors
- DHT11 Sensor am Rich Shield von Open Smart
- Aufbau der Schaltung ohne Rich Shield von Open Smart
- Programmieren des DHT11 Sensors in MicroPython am ESP32 D1 R32
- Ausblick
Technische Daten des DHT11 Sensors
Mit dem DHT11 Sensor kannst du recht einfach die Temperatur und die relative Luftfeuchtigkeit messen. Dabei ist dieser Sensor nicht nur günstig, sondern auch recht genau. Wie genau dieser Sensor arbeitet, habe ich bereits im Beitrag Vergleich von Temperatursensoren für den Arduino & Raspberry PI aufgezeigt.
relative Luftfeuchtigkeit | ||
Messbereich | 20 % bis 90 % | |
Toleranz | ±5 % | |
Temperatur | ||
Messbereich | 0 °C bis 60 °C | |
Toleranz | ±2 °C | |
Betriebsspannung | 5V |
DHT11 Sensor am Rich Shield von Open Smart
Der DHT11 Sensor ist am GPIO19 des ESP32 D12 R32 verbunden (D13 am Arduino UNO).
Mit diesem Umweltsensor kannst du die Temperatur und relative Luftfeuchtigkeit messen. Dabei gibt dieser Sensor alle 1,5 Sekunden einen neuen Wert.
Aufbau der Schaltung ohne Rich Shield von Open Smart
Wenn du die kleine Schaltung ohne Rich Shield nachbauen möchtest, dann gibt es zwei Wege. Zum einen kannst du die Schaltung mit einem fertigen Baustein aufbauen und zum anderen mit dem Sensor und einem 10 kOhm Widerstand.
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!
Schaltung mit einem fertigen Baustein
- ein ESP32 D1 R32*,
- ein Micro-USB Datenkabel*,
- ein DHT11 Sensor*,
- drei Breadboardkabel*, 10 cm,
- ein 170 Pin Breadboard*
Bei den DHT11 & DHT22 Sensoren auf Platine musst du auf die Beschriftung achten, diese ist immer unterschiedlich. Wenn du deinen Sensor verpolst, dann kann dieser sehr schnell kaputtgehen!
Schaltung mit Sensor & Widerstand
Du erhältst den Sensor auch einzeln, wenn du diesen hast, dann benötigst noch zusätzlich einen 10 kOhm Widerstand, welcher mit VCC verbunden wird.
- ein ESP32 D1 R32*,
- ein Micro-USB Datenkabel*,
- ein DHT11 Sensor*,
- ein 10 kOhm Widerstand*,
- vier Breadboardkabel*, 10 cm,
- ein 170 Pin Breadboard*
Programmieren des DHT11 Sensors in MicroPython am ESP32 D1 R32
Damit wir den Sensor auslesen können, benötigen wir ein zusätzliches Modul. Der Firmware von MicroPython liegt bereits ein passendes DHT Modul bei, mit welchem wir den Sensor DHT11 & DHT22 mit wenigen Zeilen Code auslesen können.
import dht from machine import Pin, RTC import time d = dht.DHT11(Pin(19, Pin.IN)) while True: d.measure() print("Temperatur: ", d.temperature(), "°C", sep="") print("rel. Luftfeuchtigkeit: ", d.humidity(), "%", sep="") time.sleep(2)
Das kleine Programm schreibt fortwährend die Sensordaten in die Kommandozeile.
Ausgeben der Daten in einer Tabelle
Die Daten lassen sich auch recht einfach in einer Tabelle auf der Kommandozeile ausgeben. Dazu geben wir als Erstes die Kopfzeile aus und setzen den Trenner (Parameter sep in der Funktion print) auf einen geraden Strich / Pipe.
Zusätzlich hole ich mir noch den aktuellen Zeitstempel von der internen RealTimeClock.
import dht from machine import Pin, RTC import time d = dht.DHT11(Pin(19, Pin.IN)) def getTimestamp(): rtc = RTC() currentDateTime = rtc.datetime() hour = currentDateTime[4] minutes = currentDateTime[5] seconds = currentDateTime[6] textFormat = "{0}:{1}:{2}" if hour < 10: hour = "0"+str(hour) if minutes < 10: minutes = "0"+str(minutes) if seconds < 10: seconds = "0"+str(seconds) return textFormat.format(hour, minutes, seconds) print("Zeit\t\t","Temperatur\t", "rel. Luftfeuchtigkeit", sep="|"); while True: d.measure() print(str(getTimestamp())+"\t",str(d.temperature())+"°C\t\t", str(d.humidity())+"%", sep="|") time.sleep(2)
Die tabellarische Ausgabe der Sensordaten auf der Kommandozeile hat den Vorteil das wir diese recht einfach ablesen können und wir könnten diese auch markieren und in eine andere Datei formatiert kopieren.
Ausgeben in eine CSV-Datei mit Sensordaten des DHT11 auf dem ESP32 mit MicroPython
Wir können auf dem Mikrocontroller auch Dateien schreiben und so die Sensorwerte aufzeichnen. Wie du Dateien schreibst werde ich dir in einem späteren Beitrag noch genauer erläutern, hier möchte ich dir der Vollständigkeitshalber ein kleines Programm zeigen, welches die Daten vom Sensor in eine CSV Datei mit dem Namen „sensordata.csv“ schreibt.
import dht from machine import Pin, RTC import time import os csvDatei = 'sensordata.csv' lineBreak = '\r\n' dht11Sensor = dht.DHT11(Pin(19, Pin.IN)) def getTimestamp(): rtc = RTC() currentDateTime = rtc.datetime() year = currentDateTime[0] month = currentDateTime[1] day = currentDateTime[2] unknown = currentDateTime[3] hour = currentDateTime[4] minutes = currentDateTime[5] seconds = currentDateTime[6] textFormat = "{0}.{1}.{2} {3}:{4}:{5}" return textFormat.format(day, month, year, hour, minutes, seconds) if not csvDatei in os.listdir(): headline = "Zeit;Temperatur;rel. Luftfeuchtigkeit"; with open(csvDatei, 'w') as f: print(headline) f.write(headline) f.write(lineBreak) while True: dht11Sensor.measure() line = str(getTimestamp())+";"+str(dht11Sensor.temperature())+";"+ str(dht11Sensor.humidity()) with open(csvDatei, 'a') as f: print(line) f.write(line) f.write(lineBreak) time.sleep(2)
Der Code erstellt auf dem Mikrocontroller die Datei „sensordaten.csv“ welche über das Kontextmenü (rechte Maustaste auf der Datei) heruntergeladen werden kann. Zusätzlich wird beim Ausführen des Programmes die Daten auf der Kommandozeile ausgegeben.
Diese CSV Datei kann recht einfach in Microsoft Excel importiert und die Daten verarbeitet und visualisiert werden.
Ausblick
Die ermittelten Sensordaten könnten wir auch via HTTP Request an ThingSpeak senden und dort extern speichern und visualisieren. Wie du das machst, erläutere ich dir im nächsten Beitrag, sei also gespannt.