DHT11 vs. DHT22 Sensor am Raspberry Pi: Anschließen, Programmieren & Ausgabe der Temperatur und Luftfeuchtigkeit unter Python
Die Welt um uns herum besteht nicht nur aus visuellen Informationen, sondern auch aus unsichtbaren Aspekten wie Temperatur und Feuchtigkeit. Sensoren sind die Schlüsselkomponenten, die es uns ermöglichen, diese unsichtbaren Daten zu erfassen und zu verstehen. In diesem Artikel möchte ich zwei häufig verwendete Sensortypen vorstellen – den DHT11 und den DHT22 Sensor – und zeigen, wie man sie an den Raspberry Pi anschließt, in Python einbindet und die gemessenen Temperatur- und Luftfeuchtigkeitsdaten ausgibt.
Vergleich: Sensor DHT11 vs. DHT22
links der DHT11, rechts der DHT22
Der DHT11 (blau) ist der preiswertere Sensor, hat aber auch einige Einschränkungen. Er kann nur Temperaturen von 0 bis 50 °C mit einer Genauigkeit von ± 2 °C messen. Er kann die Luftfeuchtigkeit im Bereich von 20 bis 80 % mit einer Genauigkeit von ± 5 % messen. Der DHT11 hat jedoch eine kürzere Lebensdauer als der DHT22.
Im Gegensatz dazu ist der DHT22 (weiß) der teurere, aber genauere Sensor. Er kann Temperaturen von -40 bis 125 °C mit einer beeindruckenden Genauigkeit von ± 0,5 °C messen. Er misst die Luftfeuchtigkeit von 0 bis 100 % mit einer Genauigkeit von ± 2 bis 5 %. Der DHT22 ist zudem robuster und langlebiger als der DHT11.
Für Anwendungen, die höchste Genauigkeit oder einen erweiterten Messbereich erfordern, ist der DHT22 die empfohlene Wahl. Für einfachere Projekte, die nur eine grobe Messung erfordern, kann der DHT11 ausreichend sein. Die Wahl zwischen den beiden Sensoren hängt also von den spezifischen Anforderungen des Projekts ab.
Voraussetzungen
Bevor du anfängst, stelle sicher, dass du die folgende Hardware bereit hast:
- Raspberry Pi, in meinem Fall ein Raspberry Pi 4
- Netzteil mit einen USB-C Stecker
- wenn du keinen Raspberry Pi 400 oder den Raspberry Pi nicht im Headless-Betrieb nutzen willst, benötigst du neben einen Monitor natürlich auch noch eine Tastatur und Maus
- DHT11 oder DHT22 Sensor (je nach deinen Bedürfnissen)
- 10 kΩ Pull-up-Widerstand
- ein Breadboard und entsprechende Kabel zum Testen, wenn du noch keines hast, empfiehlt sich gleich ein entsprechendes Set
- optional eine GPIO Kabel Erweiterungsplatine, da diese die Arbeit etwas erleichtert
Schritt-für-Schritt-Anleitung
Schritt 1: Hardware anschließen
Die Funktionen der Pins beider Sensoren sind identisch. Pin 1 in der folgenden Abbildung versorgt den Sensor mit Spannung (3 – 5 V). Pin 2 überträgt die gemessenen Daten. Der dritte Pin muss nicht angeschlossen werden. Der vierte Pin dient der Erdung.
DHT11/ DHT22 Pinbelegung
Pin 1 versorgt den Sensor mit Spannung (beim Raspberry Pi verwenden wir 3.3 V – die 5V sind an anderen Boards wie z.B. dem Arduino interessant).
Pin 2 überträgt die Messwerte.
Pin 3 muss nicht angeschlossen werden.
Pin 4 dient zur Erdung.
Zusätzlich wird nur ein 10 kΩ Pull-up-Widerstand benötigt, um die Kommunikation zwischen Sensor und Raspberry Pi zu stabilisieren. Achte darauf, die Verbindungen sorgfältig herzustellen, um eine reibungslose Datenübertragung zu gewährleisten.
Um den Sensor (DHT11 oder DHT22) mit dem Raspberry Pi zu verbinden, verbinde die entsprechenden Pins des Sensors mit den entsprechenden Anschlüssen am Raspberry Pi. In meinem Python-Programm habe ich den Sensor DHT11 mit Pin 38 (GPIO20) und den Sensor DHT22 mit Pin 40 (GPIO21) verbunden.
Die folgende Abbildung mit fritzing zeigt den Projektaufbau an eine Raspberry Pi 4+.
Schritt 2: Bibliotheken installieren
Anmerkung vom 18.10.2023
Wie in meinem Beitrag “Ein Blick auf das Raspberry Pi OS “Bookworm”” zur neuen Version des Raspberry Pi OS Bookworm (Stand 10.10.2023) angemerkt, funktioniert die Einbindung von Python-Bibliotheken nicht mehr wie gewohnt und führt zu einem Fehler. Daher schon jetzt der Hinweis: Solltest du eine neuere Version des Raspberry Pi OS als Bullseye (Stand 03.05.2023) verwenden, musst du die hier verwendeten Adafruit-Bibliotheken anders einbinden.
Für die Ansteuerung des E-Paper-Displays ist eine spezielle Softwarebibliothek erforderlich. Um die benötigte Bibliothek zu installieren, führe den folgenden Befehl auf dem Terminal aus:
1 |
sudo pip3 install Adafruit_DHT |
Falls du das Paketverwaltungsprogramm für Python-Pakete (pip) noch nicht installiert hast, kannst du dies mit folgendem Befehl nachholen:
1 |
sudo apt-get install python3-pip |
Eine Übersicht über wichtige und häufig verwendete Befehle stelle ich dir auf einem kleinen Spickzettel für Raspberry Pi OS Befehle zur Verfügung.
Schritt 3: Programmierung des Sensors
Das von mir hier zur Verfügung gestellte Programm liest von einem an GPIO20 angeschlossenen Sensor DHT11 und einem an GPIO21 angeschlossenen Sensor DHT22 die Temperatur- und Luftfeuchtigkeitsdaten ein und gibt diese in einer einfachen while – Schleife aus.
Dazu werden zunächst die notwendigen Bibliotheken mit “import” zur Verfügung gestellt.
Anschließend werden die beiden Sensoren konfiguriert.
Mit der Funktion “aktuelleDatenAuslesen()” werden die Sensordaten ausgelesen und mit dem Befehl “print” ausgegeben.
Die Funktion zur Abfrage der Sensordaten und deren Ausgabe wird in einer while – Schleife aufgerufen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#!/usr/bin/python # coding=utf-8 # Python Version 3.9 # dhtmessdaten.py #------------------------- # Einbindung der notwendigen Grundbibliotheken import os, sys, time # Einbindung DHT Feuchtigkeits- und Temperatursensor import Adafruit_DHT # DHT22 Sensor einrichten dhtSensorWeissTyp = 22 # Typ 22 (weiß) - Typ 11 (blau) dhtSensorWeissGpio = 21 # an Pin 40 - GPIO 21 angeschlossen dhtSensorWeissTemperatur = "" # Temperaturwert dhtSensorWeissLuftfeuchtigkeit = "" # Luftfeuchtigkeitwert # DHT11 Sensor einrichten dhtSensorBlauTyp = 11 # Typ 22 (weiß) - Typ 11 (blau) dhtSensorBlauGpio = 20 # an Pin 38 - GPIO 20 angeschlossen dhtSensorBlauTemperatur = "" # Temperaturwert dhtSensorBlauLuftfeuchtigkeit = "" # Luftfeuchtigkeitwert def aktuelleDatenAuslesen(): # Abfrage Luftfeuchtigkeit und Temperatur luftfeuchtigkeitWeiss, temperaturWeiss = Adafruit_DHT.read_retry(dhtSensorWeissTyp, dhtSensorWeissGpio) dhtSensorWeissLuftfeuchtigkeit = '%6.2f' % luftfeuchtigkeitWeiss #Sensorwert auf 2 Dezimalstellen formatiert dhtSensorWeissTemperatur = '%6.2f' % temperaturWeiss #Sensorwert auf 2 Dezimalstellen formatiert luftfeuchtigkeitBlau, temperaturBlau = Adafruit_DHT.read_retry(dhtSensorBlauTyp, dhtSensorBlauGpio) dhtSensorBlauLuftfeuchtigkeit = '%6.2f' % luftfeuchtigkeitBlau #Sensorwert auf 2 Dezimalstellen formatiert dhtSensorBlauTemperatur = '%6.2f' % temperaturBlau #Sensorwert auf 2 Dezimalstellen formatiert print ("Werte DHT22 - Luftfeuchtigkeit = " + dhtSensorWeissLuftfeuchtigkeit + " Temperatur = " + dhtSensorWeissTemperatur) print ("Werte DHT11 - Luftfeuchtigkeit = " + dhtSensorBlauLuftfeuchtigkeit + " Temperatur = " + dhtSensorBlauTemperatur) time.sleep(5) # notwendige Pause von mindestens 2 Sekunden - siehe Spezifikation des verwendeten Sensors schleifenZaehler = 0 #Setzt den Zähler zu Beginn auf 0 schleifenAnzahl = 20 # Setzt die Anzahl der Durchläufe auf 20 print ("Sensorenabfrage für ", schleifenAnzahl, " Messungen gestartet") while schleifenZaehler <= schleifenAnzahl: aktuelleDatenAuslesen() schleifenZaehler = schleifenZaehler + 1 print ("Sensorenabfrage beendet") |
Fazit
Die Entscheidung zwischen dem DHT11 und dem DHT22 Sensor hängt von den Anforderungen deines Projekts ab. Der DHT11 ist die kostengünstigere Variante und eignet sich gut für einfache Projekte, die eine grobe Messung von Temperatur und Luftfeuchtigkeit erfordern. Er hat jedoch einige Einschränkungen in Bezug auf Genauigkeit und Temperaturbereich.
Der DHT22 hingegen bietet eine genauere und umfangreichere Messung von Temperatur und Feuchte. Dies macht ihn zur idealen Wahl für Anwendungen, die eine höhere Genauigkeit oder einen größeren Messbereich erfordern. Trotz des höheren Preises bietet der DHT22 eine robustere Leistung und einen größeren Temperaturbereich.
Unabhängig davon, für welchen Sensor du dich entscheidest, sind die Anschluss- und Programmierschritte ähnlich. Mit diesen Informationen bist du nun in der Lage, fundierte Entscheidungen für deine Projekte zu treffen und die Vorteile der Temperatur- und Feuchtemessung in deine Anwendungen zu integrieren.
Bereitgestellte Dateien und Links
Die fritzing Projektdatei steht auch auf meiner fritzing Projektseite auf diesem Blog zum Download zur Verfügung.
Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.
Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.
1 |
wget -O dhtmessdaten.py https://webnist.de/downloads/dhtmessdaten.txt |
Kleiner Hinweis, alle Kommentare werden moderiert.
Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.