ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)
Bei diesem Projekt werden die Umgebungstemperatur und die Luftfeuchtigkeit mit einem DHT22-Sensor gemessen und in Echtzeit auf einem 16x2 I2C-LCD angezeigt. Mithilfe der Adafruit-DHT-Bibliothek werden die Daten über das One-Wire-Protokoll vom Sensor ausgelesen. Dieses Projekt bildet die Grundlage für IoT-Wetterstationen, Smart-Home-Automatisierung oder Umgebungsüberwachungssysteme in Gewächshäusern. Die Kommunikation mit dem DHT22 erfolgt über den GPIO-4-Pin des ESP32.

Video
Schaltplan

Quellcode
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)
4// ─────────────────────────────────────────
5// Liest alle 2 s Temperatur und Luftfeuchtigkeit vom DHT22 und zeigt sie
6// auf einem 16x2-I2C-LCD an. Schlägt ein Lesen fehl, zeigt der Bildschirm
7// eine Warnung zu Verdrahtung und Pull-up.
8//
9// Pins:
10// GPIO 4 -> DHT22 DATA
11// 10k Pull-up zwischen DATA und VCC
12// GPIO 21 -> LCD SDA, GPIO 22 -> LCD SCL
13// DHT22 VCC -> 3V3, LCD VCC -> 5V (VIN)
14// Alle GNDs gemeinsam
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Pin-Definitionen
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// LCD-Adresse 0x27 oder 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// DHT22 braucht mindestens 2 s zwischen zwei Lesevorgängen
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34 // Standard-I2C-Pins des DevKit V1
35 Wire.begin(21, 22);
36 lcd.init();
37 lcd.backlight();
38
39 // Splashscreen 3 s
40 lcd.setCursor(3, 0);
41 lcd.print("BlueGrays");
42 lcd.setCursor(3, 1);
43 lcd.print("DHT22 v1.0");
44 delay(3000);
45 lcd.clear();
46
47 dht.begin();
48}
49
50void loop() {
51 // Alle 2 s lesen, ohne delay()
52 if (millis() - lastRead >= READ_INTERVAL) {
53 lastRead = millis();
54
55 float h = dht.readHumidity();
56 float t = dht.readTemperature();
57
58 lcd.clear();
59
60 // NaN = Verdrahtungs-/Pull-up-Problem
61 if (isnan(h) || isnan(t)) {
62 lcd.setCursor(0, 0);
63 lcd.print("Sensor okunamadi");
64 lcd.setCursor(0, 1);
65 lcd.print("Kablo+10k pullup");
66 } else {
67 // Temperatur
68 lcd.setCursor(0, 0);
69 lcd.print("Sicaklik:");
70 lcd.print(t, 1);
71 lcd.print("C");
72 // Luftfeuchtigkeit, der DHT22 liefert Nachkommastellen
73 lcd.setCursor(0, 1);
74 lcd.print("Nem :");
75 lcd.print(h, 1);
76 lcd.print("%");
77 }
78 }
79}
80FAQ
Was ist der Unterschied zwischen DHT22 und DHT11?▾
Der DHT22 ist präziser (±0,5 °C, ±2–5 % Feuchte), misst in einem größeren Bereich (−40 bis 80 °C) und bietet eine Auflösung von 0,1. Der DHT11 ist günstiger, jedoch auf eine Genauigkeit von ±2 °C und eine ganzzahlige Auflösung beschränkt.
Ist ein 10-kΩ-Pull-up-Widerstand erforderlich?▾
Beim unbestückten DHT22-Sensor ist ein 10-kΩ-Pull-up-Widerstand für die Datenleitung erforderlich. Bei den auf der Platine montierten 3-poligen Modulen ist dieser Widerstand in der Regel bereits vorhanden.
LCD 5 V, ESP32 3,3 V; funktionieren die zusammen?▾
I2C-LCD-Module liefern bei 5 V ein schärferes Bild. Wenn die Pull-up-Widerstände an den SDA/SCL-Leitungen des mit 5 V betriebenen Moduls an 5 V angeschlossen sind, ist die Verwendung eines Pegelwandlers die sicherste Vorgehensweise; auch wenn viele Nutzer den Anschluss direkt vornehmen, wird dadurch die Belastbarkeit des ESP32 bis an seine Grenzen beansprucht.
Kann ich die Daten ins Internet senden?▾
Ja, du kannst die Messwerte über das WLAN des ESP32 an ThingSpeak, Blynk oder deinen eigenen Server senden und die Grafiken auf deinem Smartphone verfolgen.
