Pendahuluan
DHT22 (juga dikenal sebagai AM2302) adalah sensor digital yang mengukur suhu dan kelembaban udara sekaligus. Sensor ini sangat populer di proyek IoT karena mudah dipakai dan akurasinya cukup untuk kebanyakan aplikasi rumah / laboratorium.
Di Seri 1 kita sudah mengenal GPIO lewat Blink LED (#3) dan koneksi jaringan di WiFi ESP32 (#4). Kali ini ESP32 membaca sensor nyata — fondasi untuk Web Server (#6), MQTT (#7), dan proyek gabungan nanti.
Prasyarat: Sudah pernah upload sketch Arduino ke ESP32. Idealnya sudah baca GPIO dasar (#3). Bagian WiFi di akhir artikel mengikuti pola koneksi WiFi (#4).
Spesifikasi DHT22
- Range suhu: −40°C hingga +80°C
- Akurasi suhu: ±0.5°C
- Range kelembaban: 0% hingga 100% RH
- Akurasi kelembaban: ±2–5% RH
- Interface: Single-wire digital (protokol 1-wire khas DHT)
- Tegangan: 3.3V atau 5V — di ESP32 kita pakai 3.3V
Catatan pin: Modul breakout biasanya punya 3 pin (VCC, DATA, GND) atau 4 pin (pin 3 NC). Ikuti label di PCB, bukan tebak urutan kaki sensor mentah.
Yang Kamu Butuhkan
- ESP32 DevKit + kabel jumper + breadboard
- Sensor DHT22 (modul breakout disarankan) + resistor pull-up 10kΩ jika belum ada di modul
- Arduino IDE + library DHT sensor library (Adafruit)
- Opsional: WiFi 2.4 GHz untuk contoh kirim HTTP di bagian akhir
Wiring / Koneksi Hardware
Koneksi DHT22 ke ESP32 sangat sederhana — pin DATA di GPIO 4 (konsisten di seluruh Seri 1–2):
- VCC (pin 1) → 3.3V ESP32
- DATA (pin 2) → GPIO 4 (+ resistor 10kΩ ke VCC jika perlu)
- GND (pin 4) → GND ESP32
Resistor pull-up 10kΩ antara pin DATA dan VCC sangat penting untuk komunikasi yang stabil!
Alur Pembacaan Sensor
Sketch dasar hanya butuh Serial Monitor. Setelah data stabil, kamu bisa lanjut ke browser lewat Web Server (#6) atau publish ke broker lewat MQTT (#7).
Install Library DHT
Kita perlu menginstall library DHT sensor dari Adafruit:
- Buka Arduino IDE
- Klik Sketch → Include Library → Manage Libraries
- Cari "DHT sensor library" oleh Adafruit
- Klik Install (juga install dependency Adafruit Unified Sensor jika diminta)
Kode Program: Baca Suhu dan Kelembaban
Upload sketch berikut, lalu buka Serial Monitor di baud 115200. DHT22 butuh jeda ~2 detik antar pembacaan.
#include <DHT.h>
#define DHT_PIN 4 // Pin data DHT22 terhubung ke GPIO 4
#define DHT_TYPE DHT22 // Tipe sensor: DHT22
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println("DHT22 Sensor Siap!");
}
void loop() {
// Tunggu 2 detik antara pembacaan (DHT22 butuh waktu)
delay(2000);
// Baca kelembaban
float kelembaban = dht.readHumidity();
// Baca suhu dalam Celsius
float suhu = dht.readTemperature();
// Baca suhu dalam Fahrenheit
float suhuF = dht.readTemperature(true);
// Cek apakah pembacaan berhasil
if (isnan(kelembaban) || isnan(suhu)) {
Serial.println("Gagal membaca dari sensor DHT22!");
return;
}
// Hitung Heat Index
float heatIndex = dht.computeHeatIndex(suhu, kelembaban, false);
// Tampilkan hasil
Serial.println("=== Pembacaan DHT22 ===");
Serial.print("Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.println(" °C");
Serial.print("Suhu: ");
Serial.print(suhuF);
Serial.println(" °F");
Serial.print("Heat Index: ");
Serial.print(heatIndex);
Serial.println(" °C");
Serial.println();
}
Kirim Data DHT22 ke Server via WiFi
Kombinasikan dengan WiFi (pola artikel WiFi (#4)) untuk mengirim data sensor ke server. Ganti placeholder GANTI_SSID_WIFI / GANTI_PASSWORD_WIFI. Untuk produksi tanpa hardcode, lihat NVS + WiFiManager (#12).
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT22
const char* ssid = "GANTI_SSID_WIFI";
const char* password = "GANTI_PASSWORD_WIFI";
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("WiFi terhubung!");
}
void loop() {
delay(10000); // Baca dan kirim setiap 10 detik
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
if (!isnan(suhu) && !isnan(kelembaban)) {
HTTPClient http;
http.begin("http://api.server.com/sensor");
http.addHeader("Content-Type", "application/json");
String payload = "{\"suhu\":" + String(suhu, 2) +
",\"kelembaban\":" + String(kelembaban, 2) + "}";
int code = http.POST(payload);
Serial.println(code == 200 ? "Data terkirim!" : "Gagal kirim data");
http.end();
}
}
Tips Troubleshooting: Jika pembacaan selalu NaN (Not a Number), periksa koneksi kabel dan pastikan resistor pull-up 10kΩ terpasang dengan benar. DHT22 sensitif terhadap noise listrik — jauhkan dari sumber interferensi. Pastikan juga
delay(2000)setelahdht.begin()sebelum baca pertama.
Pin strapping: Hindari GPIO yang dipakai saat boot (mis. beberapa board sensitif di GPIO 0, 2, 12, 15). GPIO 4 aman untuk DHT22 di kebanyakan DevKit.
Langkah Selanjutnya
- Web Server ESP32 + DHT22 (#6) — tampilkan data di browser
- Publish data sensor via MQTT (#7) — kirim ke broker IoT
- Deep Sleep DHT22 (#11) — node sensor hemat baterai
- Seri 2: Sensor BME280 via I2C (#13) — upgrade akurasi + tekanan udara
- Seri 2: ADC Soil Moisture & LDR (#35) — kelembaban tanah & cahaya analog