DHT11 & DHT22 Temperatur- & Feuchtigkeitssensor Kit für Raspberry Pi & Arduino
Komponenten und Zubehör
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
![]() |
|
× | 1 | |||
|
× | 3 | ||||
![]() |
|
× | 1 | |||
|
× | 1 | ||||
|
× | 1 |
Apps und Online-Dienste
![]() |
|
|||
![]() |
|
|||
![]() |
|
|||
![]() |
|
|||
|
||||
|
Über dieses Projekt
Einführung
Hintergrund
Der DHT11 ist ein 4-Pin-Sensor (ein Pin ungenutzt) für Temperatur und Luftfeuchtigkeit, der 20 % – 90 % relative Feuchtigkeit und 0 bis 50 °C messen kann. Der Sensor arbeitet mit 3 bis 5,5 V Gleichstrom und kommuniziert über sein proprietäres OneWire-Protokoll. Dieses Protokoll erfordert extrem präzises Timing, um Daten vom Sensor zu erhalten. LOW- und HIGH-Bits werden durch die Dauer des HIGH-Signals kodiert. Die Gesamtzeit für eine Messung beträgt maximal 23,4 ms. Dazu gehören eine 18 ms Wartezeit zum Starten der Datenübertragung und ein Fenster von bis zu 5,4 ms für die Daten. Einzelsignale können so kurz wie 20 µs und so lang wie 80 µs sein.
Als Windows 10 IoT Core verfügbar wurde, griff ich zu meinem Raspberry Pi 2 und DHT11-Sensor und probierte es in C# aus. Ich stellte schnell fest, dass es nicht funktionieren würde. Das Problem mit C# in Windows 10 IoT Core ist, dass es schlicht nicht schnell genug ist (zumindest derzeit nicht).
Ich postete im Microsoft-Forum und tauschte mich mit anderen Entwicklern aus, die das gleiche Problem hatten. Schließlich fand ich eine Microsoft-Antwort zum OneWire-Protokoll in Windows 10 IoT Core, die lautete:
Später erhielt ich eine Antwort auf meinen Beitrag, die besagte:
Nun, das wird großartig und ich bin wirklich begeistert von der kommenden Fähigkeit, aber wer kann schon warten? Ich sah kürzlich, dass Microsoft ein Beispiel veröffentlichte, wie man das OneWire-Protokoll mit dem DHT11 als Beispielsensor und C++ unter Windows 10 IoT Core unterstützt. Ich sah darin die Chance, dies nach C# zu portieren.
Dieses Projekt dreht sich darum, dieses Beispiel in eine Bibliothek zu verwandeln, die in C# genutzt werden kann. Ich bin dankbar für die Person, die die Bibliothek schrieb, um diesen populären Sensor unter Windows 10 IoT Core nutzbar zu machen, und hoffe, dass er mit dieser Bibliothek noch nützlicher wird.
Bibliothek
Die von erstellte Bibliothek ist eine einfache Umstrukturierung des ursprünglich von Microsoft geposteten Codes, daher beanspruche ich kein Credit für die Arbeit, die nötig war, um den Sensor auszulesen.
Die Bibliothek stellt eine einfache Klasse namens Dht11 im Namespace Sensors.Dht bereit. Das Erstellen eines neuen Objekts in C# ist einfach:
Zuerst den GPIO-Pin öffnen, an dem der DHT11-Sensor angeschlossen ist:
using Sensors.Dht;
GpioPin pin = GpioController.GetDefault().OpenPin(4, GpioSharingMode.Exclusive);
Dann diesen Pin an den Konstruktor der Dht11-Klasse übergeben und den GPIO Pin Drive Mode angeben. Damit entscheiden Sie, ob Sie Ihren eigenen Pull-Up-Widerstand hinzufügen.
Dht11 dht11 = new Dht11(_pin, GpioPinDriveMode.Input);
Um eine Messung vom Gerät zu erhalten, die Methode GetReadingAsync verwenden:
DhtReading reading = await dht11.GetReadingAsync().AsTask();
Es gibt eine Überladung, die den maximalen Wiederholungswert festlegen lässt. Der Standardwert ist 20. Das legt fest, wie viele Versuche unternommen werden, den Sensor zu lesen, bevor aufgegeben und eine fehlgeschlagene Messung zurückgegeben wird.
Die DhtReading-Struktur ist definiert als:
public value struct DhtReading {
bool TimedOut;
bool IsValid;
double Temperature;
double Humidity;
int RetryCount;
};
Beobachtungen
Auch wenn der Sensor in C++ funktioniert, liefert er nicht bei jedem Versuch eine Messung. Daher die Notwendigkeit einer Wiederholungsoption in der Klasse (dies ist tatsächlich Teil des Microsoft-Beispiels). Ich fand es am besten, dies mit anderen Plattformen zu vergleichen, um die Leistung zu sehen. Ich testete Code auf dem Raspberry Pi 2 unter Raspbian sowie auf einem Arduino Uno. Der Code für beide Plattformen ist im GitHub-Repository enthalten.
Das in diesem Projekt enthaltene Video demonstriert und vergleicht die Ausgabe jeder dieser Plattformen.
Erste Schritte
Schaltung für den Raspberry Pi 2 aufbauen
Nutzen Sie diese Anleitung zum Aufbau der Schaltung, wobei das Diagramm am Seitenende als Orientierung dient (die Kabelfarben sind optional und wurden gewählt, um die Schaltung beim Aufbau leichter nachvollziehbar zu machen).
- Den T-förmigen Cobbler am linken Ende des halben Steckbretts platzieren (wo die Nummern bei 1 beginnen). Die beiden linken Pins liegen in E1 und F1, die beiden rechten in E20 und F20.
- Den 4,7 kOhm Widerstand zwischen A4 und 3V3 platzieren.
- Ein oranges Male-to-Male Jumperkabel zwischen B4 und F28 verbinden.
- Ein rotes Male-to-Male Jumperkabel zwischen F29 und 3V3 verbinden.
- Ein schwarzes Male-to-Male Jumperkabel zwischen F30 und GND verbinden.
- Den DHT11-Sensor in J30 (-), J29 (+) und J28 (Signal) stecken.
- Das Flachbandkabel in den Cobbler und den Raspberry Pi stecken.
Schaltung für den Arduino aufbauen
Nutzen Sie diese Anleitung zum Aufbau der Schaltung, wobei das Diagramm am Seitenende als Orientierung dient (die Kabelfarben sind optional und wurden gewählt, um die Schaltung beim Aufbau leichter nachvollziehbar zu machen).
- Den 4,7 kOhm Widerstand zwischen E12 und E13 platzieren.
- Ein weißes Male-to-Male Jumperkabel zwischen D13 und Pin 5 am Arduino verbinden.
- Ein rotes Male-to-Male Jumperkabel zwischen D12 und dem 5V-Pin am Arduino verbinden.
- Ein schwarzes Male-to-Male Jumperkabel zwischen D11 und GND am Arduino verbinden.
- Den DHT11-Sensor in A11 (-), A12 (+) und A13 (Signal) stecken.
- Das USB-Kabel vom Computer zum Arduino verbinden.
Unten sind Fotos der von mir aufgebauten Schaltungen.

Anwendung auf dem Raspberry Pi starten
Debug-Konfiguration, ARM und Remote Machine wählen. Rechtsklick auf das Projekt, Properties, dann Debug-Tab. Die IP-Adresse des Raspberry Pi 2 im Feld „Remote machine“ eintragen und „Use authentication“ deaktivieren.
F5 drücken. Die Anwendung wird auf das Gerät deployt, was beim ersten Mal einige Minuten dauern kann.
Anwendung auf dem Arduino starten
Der Sketch für dieses Projekt ist auf GitHub in der Datei Dht11_Speed verfügbar. Arduino IDE starten, Sketch öffnen, auf den Arduino hochladen (Strg+U) und dann den Serial Monitor starten (Strg+Umschalt+M).
Falls Sie unsicher sind oder neu in dieser Umgebung, zeigt das untenstehende Video, wie es geht.
Anwendung unter Raspbian starten
Der C-Code für den Raspberry Pi ist auf GitHub für dieses Projekt in der Datei Dht11.c verfügbar. Der Quellcode muss auf den Raspberry Pi kopiert und dort kompiliert werden. Ich nutze gerne WinSCP zum Kopieren. Falls Sie diese Anwendung nicht haben, empfehle ich, sie herunterzuladen und zu installieren. Der Quellcode nutzt wiringPi, das vor dem Kompilieren installiert sein muss.
Kompilierbefehl auf dem Raspberry Pi:
gcc -o Dht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm
Zum Ausführen der Anwendung:
sudo ./Dht11_Speed 1000 10
Wobei 1000 eine Verzögerung von 1000 ms (1 Sekunde) und 10 die Anzahl der zu lesenden Samples angibt.
Das Video demonstriert detaillierter, wie man den Code kopiert und auf dem Raspberry Pi unter Raspbian kompiliert. Um zu erfahren, wie man Raspbian auf dem Raspberry Pi installiert, besuchen Sie https://www.raspberrypi.org/downloads/raspbian/.
Video
Das folgende Video demonstriert die Anwendung:
Für beste Qualität das Video auf YouTube im Theater-Modus ansehen.
Code
Visual Studio 2015 C#/C++ Quellcode
https://github.com/porrey/dht.git
Schaltpläne
Dht11_RPi2.fzz
Dht11_Arduino.fzz

Herstellungsprozess
- Raspberry Pi Temperaturlogger mit 5 $ I2C Sensor bauen
- TMP006 Infrarot-Temperatursensor mit Raspberry Pi: Python Library & Setup Guide
- Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
- DS1820 One-Wire Temperatursensor an Raspberry Pi GPIO anschließen
- DS18B20 1-Wire Digitalthermometer an Raspberry Pi anschließen – Schritt-für-Schritt-Anleitung
- Multi-Sensor Temperatur- & Licht-Überwachung mit Raspberry Pi & DS18B20
- Raspberry Pi Heimtemperaturmonitor mit MCP9808, InfluxDB & Grafana bauen
- Raspberry Pi 3 mit DHT11 verbinden und Daten an ThingsIo.ai Cloud hochladen
- Präziser Lagertemperatursensor: Genaues Erkennen & Überwachen
- Präzise Infrarot-Temperaturmessung für farbempfindliche Prozesse







