DHT22 (Temperatur- und Luftfeuchtesensor) + ESP32 Tutorial

 


 

Einleitung

Du möchtest die Temperatur und Luftfeuchtigkeit in deinem Raum messen? In diesem detaillierten Tutorial zeigen wir dir, wie du den beliebten DHT22 Sensor erfolgreich mit deinem ESP32 Mikrocontroller verbindest und programmierst.
Dieser Artikel führt dich Schritt für Schritt durch den gesamten Prozess, damit du deine eigenen Umweltdaten erfassen kannst. Wir verwenden die Arduino IDE zur Programmierung, da sie die gängigste Plattform für den ESP32 ist und die Einbindung des DHT22 dadurch besonders einfach wird.
Wir behandeln alle notwendigen Aspekte, von den erforderlichen Komponenten über den Schaltungsaufbau bis hin zur ausführlichen Code-Erklärung und der Anwendung der Messwerte. Nach diesem Tutorial bist du in der Lage, deine eigene Wetterstation auf Basis des DHT22 und ESP32 in Betrieb zu nehmen.

 

 

Verschaltung

Teile

1x ESP32
1x DHT22
3x Verbindungskabel

Bibliotheken

DHT.h

Code

 

 



 

Übersicht – DHT22 und ESP32

Um die Temperatur und Luftfeuchtigkeit mithilfe des DHT22 Sensors auszulesen und mit dem ESP32 zu verarbeiten, benötigst du nur wenige Komponenten. Der Aufbau ist denkbar einfach und eignet sich perfekt für Einsteiger.
Hier ist eine kurze Liste der benötigten Hardware:
1x ESP32 (Der Mikrocontroller)
1x DHT22 Temperatur- und Luftfeuchtigkeitssensor
3x Verbindungskabel (Dupont-Kabel)

 



 

Pinout – DHT22

Der DHT22 ist besonders einfach anzuschließen, da er in den meisten Modul-Varianten nur drei Anschlusspins besitzt. Die Pins dienen zur Stromversorgung (VCC und GND) und zur Datenübertragung an den ESP32. Es ist wichtig, die korrekte Zuordnung zu kennen, damit die Verbindung fehlerfrei funktioniert.
Hier siehst du die Funktion der drei Pins im Detail:

VCC (oder +): Anschluss für die Betriebsspannung (3,3V oder 5V).
GND (oder -): Anschluss für die Masse.
DATA (oder S): Der Daten-Pin, über den alle Messwerte (Temperatur und Luftfeuchtigkeit) an den ESP32 gesendet werden.

 



 

Hardware Aufbau / Verkabelung / Schaltungsaufbau

Die Verbindung deines DHT22 Sensors mit dem ESP32 ist unkompliziert und erfordert nur drei Kabel. Achte darauf, die Pins richtig zu verbinden, um eine zuverlässige Messung zu gewährleisten. Hierbei stellen wir die Stromversorgung her und definieren den Datenkanal, über den dein ESP32 die aktuellen Temperatur- und Luftfeuchtigkeitswerte empfängt.
Du verbindest den GND-Pin deines ESP32 mit dem Minus-Pin (GND) des DHT22, die 3,3V des ESP32 mit dem Plus-Pin (VCC) des DHT22, und den GPIO-Pin D15 deines ESP32 mit dem Signal-Pin (DATA) des Sensors.

ESP32 VIN → DHT22 +Pin

ESP32 D15 → DHT22 Out Pin

ESP32 GND → DHT22 -Pin

Die korrekte und sorgfältige Verdrahtung ist von entscheidender Bedeutung, um sicherzustellen, dass der ESP32 die Signale des DHT22 ordnungsgemäß erfassen kann. Nachdem du diese Verbindungen erfolgreich hergestellt hast, bist du bereit, mit der Programmierung fortzufahren. Im nächsten Abschnitt werden wir ausführlich darauf eingehen, wie du die benötigte Bibliothek einbindest und den Code für den DHT22 programmieren kannst.

 

Software / Code / Programmierung

Sobald der erfolgreiche Hardware-Aufbau abgeschlossen ist, können wir uns nun der ESP32 Programmierung zuwenden. In diesem Abschnitt werden wir ausführlich die essenziellen Schritte zur Codeerstellung behandeln und die Schlüsselfunktionen, die du verwenden wirst, im Detail erläutern.

 

Schritt 1: IDE Projekt
Der erste Schritt ist das Öffnen der Arduino-IDE und das Erstellen eines neuen Projekts.
Um mit der Arduino-IDE zu arbeiten, öffne zunächst die Anwendung auf deinem Computer. Falls du die Arduino-IDE noch nicht installiert hast, kannst du unter folgendem Link eine Anleitung hierzu finden: [LINK ZUR ANLEITUNG EINFÜGEN].
Nachdem du die Arduino-IDE geöffnet hast, erstellst du ein neues Projekt, indem du auf „Datei“ klickst und dann auf „Neu“. Dadurch wird ein neues Sketch-Fenster geöffnet, in dem du deinen Code eingeben kannst.


// Hier kommt dein Code
void setup(){
    // Initialisierung
}

void loop(){
    // Schleife
}

 

Schritt 2: Bibliothek einbinden
Um die Daten des DHT22 auszulesen, ist es notwendig, eine geeignete Bibliothek in deine Arduino-IDE einzubinden. Gehe dazu in der Menüleiste auf „Sketch“ und wähle „Bibliothek einbinden“ aus. Klicke dann auf „Bibliotheken verwalten…“.
Suche im Bibliotheksmanager nach „DHT sensor library“ (von Adafruit) und installiere diese. Diese Bibliothek, erkennbar an der Header-Datei DHT.h, ist unverzichtbar. Nur so erhältst du die erforderlichen Funktionen, um die Temperatur- und Luftfeuchtigkeitsdaten zu erfassen und auszulesen.


#include "DHT.h"

Schritt 3: Initialisierung
Im Initialisierungsbereich, der sich vor der void setup()-Funktion befindet, legst du globale Variablen und Konstanten fest. Zuerst bindest du die benötigte DHT.h Bibliothek ein. Dann definierst du den Daten-Pin (hier D15 beim ESP32) und den verwendeten Sensortyp (DHT22). Abschließend erzeugst du ein DHT-Objekt (dht), dem du diese Pin- und Typ-Informationen übergibst, um den Sensor zu initialisieren und für die Verwendung vorzubereiten.


#define DHTPIN 15 // OUT-Pin an D15-Pin
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

DHT dht(DHTPIN, DHTTYPE); // DHT initialisieren

float h = 0; // Variable für Luftfeuchtigkeit
float t = 0; // Variable für Temperatur in Celsius
float f = 0; // Variable für Temperatur in Fahrenheit

float hif = 0; // Variable für gefühlte Temperatur (heat index) (Fahrenheit)
float hic = 0; // Variable für gefühlte Temperatur (heat index) (Celsius)

 

Schritt 4: Void Setup
Die void setup() Funktion wird einmalig beim Start deines ESP32 ausgeführt. Hier initialisierst du die serielle Kommunikation mit Serial.begin(9600), damit du später die Temperatur- und Luftfeuchtigkeitswerte am PC im seriellen Monitor sehen kannst. Anschließend startest du den DHT22 Sensor über den Aufruf von dht.begin(), wodurch die Kommunikation mit dem Sensor vorbereitet wird.


void setup() {
    Serial.begin(9600); // Serielle Kommunikation initialisieren - 9600 bits pro Sekunde
    dht.begin(); // DHT starten
}

 

Schritt 5: Loop Setup
Die void loop() Funktion ist das Herzstück deines Programms und wird unendlich oft wiederholt. Zuerst liest du hier die Luftfeuchtigkeit (dht.readHumidity()) und die Temperatur in Celsius und Fahrenheit aus. Danach prüfst du, ob die Messung fehlgeschlagen ist (isnan), und gibst bei einem Fehler eine Meldung aus. Bei gültigen Werten berechnest du die gefühlte Temperatur (Heat Index) und gibst alle Ergebnisse nacheinander über die serielle Schnittstelle aus, bevor der delay(2000) eine Pause von 2 Sekunden einlegt.


void loop() {
    h = dht.readHumidity(); // Luftfeuchtigkeit auslesen
    t = dht.readTemperature(); // Temperatur in Celsius auslesen (the default) 
    f = dht.readTemperature(true);// Temperatur in Fahrenheit auslesen (isFahrenheit = true)

    if (isnan(h) || isnan(t) || isnan(f)) { // Prüfen, ob Daten fehlgeschlagen sind - Wenn ja vorzeitiges beenden des loop und erneutetes starten -> erneutes Auslesen
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
    }

    hif = dht.computeHeatIndex(f, h); // Berechne gefühlte Temperatur (heat index) in Fahrenheit (the default)
    hic = dht.computeHeatIndex(t, h, false); // Berechne gefühlte Temperatur (heat index) in Celsius (isFahreheit = false) 

    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.println(" %");
    
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" °C ");
    //Serial.print(f);
    //Serial.println("°F ");
    
    Serial.print("Heat index: ");
    Serial.print(hic);
    Serial.println(" °C ");
    //Serial.print(hif);
    //Serial.println(" °F");

    Serial.println(" ");

    delay(2000);
}

 

Gesamter Code

Nochmal zur Übersicht den gesamten Programmier-Code für den DHT22 Sensor am ESP32 aufgezeigt. Du kannst diesen Code direkt in deine Arduino-IDE kopieren und auf deinen ESP32 hochladen.


#include "DHT.h"

#define DHTPIN 15 // OUT-Pin an D15-Pin
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321

DHT dht(DHTPIN, DHTTYPE); // DHT initialisieren

float h = 0; // Variable für Luftfeuchtigkeit
float t = 0; // Variable für Temperatur in Celsius
float f = 0; // Variable für Temperatur in Fahrenheit

float hif = 0; // Variable für gefühlte Temperatur (heat index) (Fahrenheit)
float hic = 0; // Variable für gefühlte Temperatur (heat index) (Celsius)

void setup() {
    Serial.begin(9600); // Serielle Kommunikation initialisieren - 9600 bits pro Sekunde
    dht.begin(); // DHT starten
}

void loop() {
    h = dht.readHumidity(); // Luftfeuchtigkeit auslesen
    t = dht.readTemperature(); // Temperatur in Celsius auslesen (the default) 
    f = dht.readTemperature(true);// Temperatur in Fahrenheit auslesen (isFahrenheit = true)

    if (isnan(h) || isnan(t) || isnan(f)) { // Prüfen, ob Daten fehlgeschlagen sind - Wenn ja vorzeitiges beenden des loop und erneutetes starten -> erneutes Auslesen
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
    }

    hif = dht.computeHeatIndex(f, h); // Berechne gefühlte Temperatur (heat index) in Fahrenheit (the default)
    hic = dht.computeHeatIndex(t, h, false); // Berechne gefühlte Temperatur (heat index) in Celsius (isFahreheit = false) 

    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.println(" %");
    
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" °C ");
    //Serial.print(f);
    //Serial.println("°F ");
    
    Serial.print("Heat index: ");
    Serial.print(hic);
    Serial.println(" °C ");
    //Serial.print(hif);
    //Serial.println(" °F");

    Serial.println(" ");

    delay(2000);
}

 

Ausführung / Anwendung

Nachdem der Code nun in die IDE eingegeben ist, muss dieser noch ausgeführt und auf den ESP32 übertragen werden. Dies geschieht in wenigen einfachen Schritten. Erst danach kannst du die gemessenen Werte des DHT22 Sensors am seriellen Monitor deines Computers sehen.

Schritt 1 & 2: Kompilieren und Hochladen
Zuerst musst du den Code kompilieren, um ihn auf Fehler zu überprüfen. Klicke dazu auf das Haken-Symbol (Prüfen) in der Arduino-IDE. Wenn die Kompilierung erfolgreich ist, kannst du den Code auf den ESP32 übertragen. Klicke auf das Pfeil-Symbol (Hochladen), um das Programm auf deinen Mikrocontroller zu spielen. Stelle sicher, dass dein ESP32 über USB verbunden und das korrekte Board im Menü ausgewählt ist.

Schritt 3 & 4: Daten auslesen
Nach dem Hochladen kannst du die Messwerte deines DHT22 Sensors sofort sehen.
Öffne den Seriellen Monitor: Klicke auf das Symbol oben rechts in der IDE.
Prüfe die Baudrate: Stelle sicher, dass die Baudrate im Monitor auf 9600 Baud eingestellt ist (wie im Code definiert).
Ausgabe: Hier wird nun die aktuelle Temperatur und Luftfeuchtigkeit sowie die gefühlte Temperatur ausgegeben, die dein ESP32 alle zwei Sekunden vom DHT22 Sensor erhält.

 

Weitere Themen


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - DHT11 + ESP32 - Temperatursensor Luftfeuchtigkeitssensor Luftfeuchte Modul Sensor

DHT11 + ESP32


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - DS18B20 + ESP32 - Temperatursensor Luftfeuchtigkeitssensor Luftfeuchte Modul Sensor

DS18B20 + ESP32


Mikrocontroller - ESP32 - ESP - Arduino - Programmierung - Code  - Software - Programm -  - BME280 + ESP32 - Temperatursensor Luftfeuchtigkeitssensor Luftfeuchte Modul Sensor

BME280 + ESP32