ElektronikZorluk: OrtaSüre: 45 dk

ESP32 ile DHT22 Wi-Fi Sıcaklık ve Nem Sensörü Kurulumu

ESP32 DHT22 kurulumu: bağlantı şeması, Arduino IDE ayarları ve hazır kodla Wi-Fi sıcaklık ve nem sensörünü kurun, değerleri telefondan anlık izleyin.

ESP32 ile DHT22 Wi-Fi Sıcaklık ve Nem Sensörü Kurulumu

Güvenlik Uyarısı

Elektronik cihazları tamir etmek garantiyi geçersiz kılabilir. Çalışmaya başlamadan önce cihazın fişten çekildiğinden ve bataryasının çıkarıldığından emin olun. Statik elektrik bileşenlere zarar verebilir.

ESP32 ile Wi-Fi sıcaklık sensörü yapmak için DHT22'nin VCC pinini ESP32'nin 3V3 pinine, GND'yi GND'ye, DATA pinini GPIO4'e bağlar, DATA ile 3V3 arasına 10 kΩ'luk bir pull-up direnci eklersiniz. Ardından Arduino IDE'ye ESP32 kart paketini ve Adafruit DHT kütüphanesini kurup bu rehberdeki kodu yüklediğinizde, ESP32 evinizdeki Wi-Fi ağına bağlanır ve sıcaklık ile nem değerlerini telefonunuzdan açabileceğiniz küçük bir web sayfasında gösterir. Tüm kurulum yaklaşık 45 dakika sürer.

Gerekli Malzemeler ve Aletler

  • ESP32 geliştirme kartı (ESP32 DevKit V1 veya ESP32-WROOM-32 tabanlı benzeri)
  • DHT22 (AM2302) sıcaklık ve nem sensörü
  • 10 kΩ direnç (sensör 3 pinli modül olarak geldiyse gerekmez)
  • Breadboard ve 3-4 adet jumper kablo
  • Veri aktarımı destekleyen bir USB kablosu (yalnızca şarj kablosu işe yaramaz)
  • Arduino IDE 2.x yüklü bir bilgisayar
  • 2,4 GHz yayın yapan bir Wi-Fi ağı

Geliştirme kartları ve sensörler için elektronik ürünleri sayfamıza göz atabilirsiniz. Arduino ekosistemine yeniyseniz Arduino Tabanlı Uno Pro Başlangıç Seti de iyi bir başlangıç noktasıdır.

Başlamadan Önce

ESP32 pinleri 3,3V çalışır

ESP32'nin giriş pinleri 5V'a dayanıklı değildir. DHT22'yi 5V ile beslerseniz DATA hattı da 5V seviyesine çekilir ve uzun vadede kartın GPIO pinine zarar verebilir. Sensörü 3V3 pininden besleyin ve kabloları takıp çıkarırken USB bağlantısını çekin.

Bu projede bilmeniz gereken iki temel nokta var:

  • DHT22 yavaş bir sensördür. Saniyede en fazla bir okuma yapılabilir; üretici en az 2 saniye aralık önerir. Daha sık okumak hata (NaN) değerlerine yol açar.
  • ESP32 yalnızca 2,4 GHz Wi-Fi destekler. Modeminiz 2,4 ve 5 GHz için aynı ağ adını kullanıyorsa genellikle sorun olmaz, ancak yalnızca 5 GHz yayın yapan bir ağa bağlanamazsınız.

DHT22, yaklaşık -40 ile 80°C arasında ±0,5°C, nemde ise yaklaşık ±2-5 doğrulukla ölçüm yapar. Oda, sera, kiler veya 3D yazıcı kabini takibi için fazlasıyla yeterlidir.

Adım 1: DHT22 Pinlerini Tanıyın

Sensörün ızgaralı yüzü size bakarken soldan sağa dört pin vardır. Modül versiyonlarında genellikle yalnızca üç pin (+, out, -) bulunur ve pull-up direnci kartın üzerindedir.

| DHT22 pini | Görevi | ESP32 bağlantısı | | --- | --- | --- | | 1 - VCC | Besleme (3,3-5,5V) | 3V3 | | 2 - DATA | Tek hatlı veri | GPIO4 (D4) | | 3 - NC | Boş, bağlanmaz | - | | 4 - GND | Toprak | GND |

Adım 2: Devreyi Kurun

ESP32'yi breadboard'un ortasındaki kanala oturtun; kart genişse iki breadboard'u yan yana kullanabilirsiniz. Ardından aşağıdaki şemaya göre bağlantıları yapın. 10 kΩ direnç, DATA pini ile 3V3 arasına bağlanır ve hat boştayken sinyali yüksek seviyede tutar.

ESP32 ile DHT22 bağlantı şeması: VCC 3V3 pinine, DATA GPIO4 pinine, GND ise GND pinine bağlı; DATA ile 3V3 arasında 10 kΩ pull-up direnci var

GPIO4 yerine başka bir pin de kullanabilirsiniz, ancak GPIO6-11 arası (dahili flash belleğe ayrılmıştır) ve yalnızca giriş olarak çalışan GPIO34-39 arası pinlerden kaçının.

Adım 3: Arduino IDE'ye ESP32 Desteğini Ekleyin

Arduino IDE'yi açın ve sol menüden Kart Yöneticisi'ne (Boards Manager) gidin. Arama kutusuna "esp32" yazın ve esp32 by Espressif Systems paketini kurun. Paket listede çıkmazsa Dosya > Tercihler menüsündeki "Ek kart yöneticisi URL'leri" alanına Espressif'in resmi paket adresini ekleyip tekrar deneyin.

Kurulum bitince Araçlar > Kart menüsünden "ESP32 Dev Module" seçeneğini seçin. Kartı USB ile bağladığınızda port listede görünmüyorsa, kartın üzerindeki USB-seri çipe (çoğunlukla CP2102 veya CH340) uygun sürücüyü kurmanız gerekir.

Adım 4: DHT Kütüphanesini Kurun

Kütüphane Yöneticisi'ni açın, "DHT sensor library" aratın ve Adafruit'in kütüphanesini kurun. IDE, bağımlılık olarak Adafruit Unified Sensor kütüphanesini de kurmayı önerecektir; "Tümünü kur" seçeneğini onaylayın.

Adım 5: Kodu Yükleyin

Yeni bir çizim açın ve aşağıdaki kodu yapıştırın. ssid ve password satırlarına kendi Wi-Fi bilgilerinizi yazın.

#include "WiFi.h"
#include "WebServer.h"
#include "DHT.h"

#define DHTPIN 4
#define DHTTYPE DHT22

const char* ssid = "AgAdiniz";
const char* password = "WifiSifreniz";

DHT dht(DHTPIN, DHTTYPE);
WebServer server(80);

float sicaklik = NAN;
float nem = NAN;
unsigned long sonOkuma = 0;

void sensoruOku() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(t) || isnan(h)) {
    Serial.println("DHT22 okunamadi, baglantiyi kontrol edin");
    return;
  }
  sicaklik = t;
  nem = h;
  Serial.printf("Sicaklik: %.1f C  Nem: %.1f %%\n", t, h);
}

void anaSayfa() {
  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
  html += "<meta http-equiv='refresh' content='10'><title>ESP32 Sensor</title></head><body>";
  html += "<h1>Oda Olcumu</h1>";
  html += "<p>Sicaklik: " + String(sicaklik, 1) + " &deg;C</p>";
  html += "<p>Nem: %" + String(nem, 1) + "</p>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

void jsonVeri() {
  String json = "{\"sicaklik\":" + String(sicaklik, 1) + ",\"nem\":" + String(nem, 1) + "}";
  server.send(200, "application/json", json);
}

void setup() {
  Serial.begin(115200);
  dht.begin();

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Wi-Fi'a baglaniliyor");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("IP adresi: ");
  Serial.println(WiFi.localIP());

  server.on("/", anaSayfa);
  server.on("/json", jsonVeri);
  server.begin();
}

void loop() {
  server.handleClient();
  if (millis() - sonOkuma > 2500) {
    sonOkuma = millis();
    sensoruOku();
  }
}

Yükle düğmesine basın. Ekranda "Connecting..." yazısı uzun süre beklerse kartın üzerindeki BOOT düğmesine basılı tutun, yükleme başlayınca bırakın. Bazı kartlarda bu adım zorunludur.

Kodda sensör her 2,5 saniyede bir okunur, delay yerine millis kullanıldığı için web sunucusu bu sırada isteklere cevap vermeye devam eder.

Adım 6: Seri Monitörden IP Adresini Öğrenin

Yükleme bitince Seri Monitör'ü açın ve baud hızını 115200 yapın. Kart yeniden başladığında noktalar halinde bağlantı denemelerini, ardından "IP adresi: 192.168.1.45" gibi bir satırı görürsünüz. Bu adresi not edin.

Aynı ağa bağlı telefonunuzdan veya bilgisayarınızdan tarayıcıya bu IP adresini yazdığınızda sıcaklık ve nem değerlerini gösteren sayfa açılır. Sayfa 10 saniyede bir kendini yeniler. Adresin sonuna /json eklerseniz aynı veriyi Home Assistant gibi sistemlerin okuyabileceği JSON biçiminde alırsınız.

Adım 7: Kalıcı Kurulum İçin İpuçları

  • IP adresini sabitleyin: Modem arayüzünden ESP32'nin MAC adresine DHCP rezervasyonu yaparsanız adres her açılışta aynı kalır.
  • Sensörü karttan uzak tutun: ESP32 çalışırken bir miktar ısınır. Sensörü kartın hemen üstüne koymak ölçümü 1-2 derece yükseltebilir; 10-15 cm'lik bir kabloyla ayırın.
  • Güneş ve hava akımından koruyun: Pencere önü veya kalorifer yanı gerçek oda sıcaklığını yansıtmaz.
  • Güç kaynağı: Sürekli çalışma için kaliteli bir 5V telefon adaptörü yeterlidir.

Projeyi büyütmek isterseniz aynı yapıyla birden fazla odaya sensör koyabilir, verileri bir Raspberry Pi üzerinde toplayabilirsiniz. Ev otomasyonu fikirleri için Raspberry Pi ile ev otomasyonu yazımıza da bakabilirsiniz.

Sık Yapılan Hatalar

  • Yalnızca şarj kablosu kullanmak: Kart enerji alır ama bilgisayarda port görünmez. Veri destekli bir kabloyla deneyin.
  • Pull-up direncini unutmak: Çıplak DHT22 sensörü dirençsiz kullanıldığında çoğu zaman NaN döndürür.
  • 5 GHz ağ adını yazmak: ESP32 bu ağı göremez ve sonsuza dek noktalar basar.
  • Sensörü çok sık okumak: 2 saniyeden kısa aralıklar hatalı okuma üretir.
  • Yanlış sensör tipini seçmek: Kodda DHT22 yerine DHT11 yazılırsa değerler anlamsız çıkar.
  • Flash pinlerini kullanmak: GPIO6-11 arasına bağlanan sensör kartın açılmasını bile engelleyebilir.

Sıkça Sorulan Sorular

Seri Monitörde sürekli "DHT22 okunamadi" yazıyor, ne yapmalıyım?

Önce DATA kablosunun gerçekten GPIO4'e bağlı olduğunu ve koddaki DHTPIN değeriyle eşleştiğini kontrol edin. Ardından pull-up direncinin DATA ile 3V3 arasında olduğundan emin olun. Sorun sürerse sensörü başka bir pine taşıyıp kodu güncelleyin; nadiren de olsa sensör arızalı çıkabilir.

DHT22 yerine DHT11 kullanabilir miyim?

Kullanabilirsiniz; bağlantı aynıdır, kodda yalnızca DHTTYPE satırını DHT11 yapmanız yeterlidir. Ancak DHT11 yalnızca 0-50°C aralığında ve yaklaşık ±2°C doğrulukla ölçer, ondalıklı değer vermez. Daha hassas ölçüm istiyorsanız BME280 gibi I2C sensörlere geçebilirsiniz.

ESP32 Wi-Fi'a bağlanmıyor, sebebi ne olabilir?

En sık nedenler yanlış yazılmış şifre, 5 GHz ağ ve ağ adında Türkçe veya özel karakter bulunmasıdır. Kartı modeme yaklaştırıp tekrar deneyin. Misafir ağlarda cihazlar arası iletişim kapalı olabileceği için IP adresine erişemeyebilirsiniz.

Pille çalıştırabilir miyim?

Bu koddaki gibi Wi-Fi sürekli açık kaldığında ESP32 pili hızla tüketir. Pille kullanım için deep sleep modunu kullanıp örneğin 10 dakikada bir uyanarak ölçümü bir sunucuya göndermek gerekir. Bu yaklaşım pil ömrünü haftalardan aylara çıkarabilir.

Bağlantılarınızı doğrulamak için multimetre nasıl kullanılır rehberimiz, kabloları kalıcı hale getirmek için de lehim nasıl yapılır rehberimiz işinize yarayacaktır.