ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

Video
Devre Şeması

Kaynak Kodu
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
4// ─────────────────────────────────────────
5// DHT22 sensöründen 2 sn'de bir sıcaklık ve nem okunur, 16x2 I2C LCD'ye
6// yazılır. Okuma başarısız olursa ekranda kablo ve pull-up uyarısı
7// görünür.
8//
9// Pinler:
10// GPIO 4 -> DHT22 DATA
11// 10k pull-up DATA ile VCC arasında
12// GPIO 21 -> LCD SDA, GPIO 22 -> LCD SCL
13// DHT22 VCC -> 3V3, LCD VCC -> 5V (VIN)
14// Tüm GND'ler ortak
15
16#include <Wire.h>
17#include <LiquidCrystal_I2C.h>
18#include <DHT.h>
19
20// Pin tanımları
21const int DHT_PIN = 4;
22#define DHT_TYPE DHT22
23
24DHT dht(DHT_PIN, DHT_TYPE);
25
26// LCD adresi 0x27, bazen 0x3F
27LiquidCrystal_I2C lcd(0x27, 16, 2);
28
29// DHT22 en az 2 sn arayla okunur
30const unsigned long READ_INTERVAL = 2000;
31unsigned long lastRead = 0;
32
33void setup() {
34 // DevKit V1 varsayılan I2C pinleri: SDA=21, SCL=22
35 Wire.begin(21, 22);
36 lcd.init();
37 lcd.backlight();
38
39 // Açılış ekranı 3 sn
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 // 2 sn'de bir oku, delay() kullanmadan
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 = kablo/pullup sorunu
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 // Sıcaklık
68 lcd.setCursor(0, 0);
69 lcd.print("Sicaklik:");
70 lcd.print(t, 1);
71 lcd.print("C");
72 // Nem, DHT22 ondalıklı verir
73 lcd.setCursor(0, 1);
74 lcd.print("Nem :");
75 lcd.print(h, 1);
76 lcd.print("%");
77 }
78 }
79}
80Sıkça Sorulanlar
DHT22 ile DHT11 arasındaki fark ne?▾
DHT22 daha hassastır (±0,5 °C, ±%2–5 nem), daha geniş aralıkta ölçer (−40 ile 80 °C) ve 0,1 çözünürlük verir. DHT11 daha ucuzdur ama ±2 °C ve tam sayı çözünürlüğüyle sınırlıdır.
10 kΩ pull-up direnci gerekli mi?▾
Çıplak DHT22 sensörde veri hattı için 10 kΩ pull-up gerekir. Kart üzerine monte edilmiş 3 bacaklı modüllerde direnç genellikle zaten vardır.
LCD 5 V, ESP32 3,3 V; birlikte çalışır mı?▾
I2C LCD modülleri 5 V ile daha net görüntü verir. 5 V ile beslenen modülün SDA/SCL hatlarındaki pull-up dirençleri 5 V'a bağlıysa seviye dönüştürücü kullanmak en güvenli yoldur; pek çok kişi doğrudan bağlasa da bu ESP32'nin sınırlarını zorlar.
Verileri internete gönderebilir miyim?▾
Evet, ESP32'nin Wi-Fi'si ile ölçümleri ThingSpeak, Blynk ya da kendi sunucuna gönderip grafikleri telefondan izleyebilirsin.
