Pendahuluan
DHT22 (juga dikenal sebagai AM2302) adalah sensor digital yang bisa mengukur suhu dan kelembaban udara sekaligus. Sensor ini sangat populer dalam proyek IoT karena mudah digunakan dan memiliki akurasi yang cukup baik untuk kebanyakan aplikasi.
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
Tegangan: 3.3V atau 5V
Wiring / Koneksi Hardware
Koneksi DHT22 ke ESP32 sangat sederhana:
VCC (pin 1) → 3.3V ESP32
DATA (pin 2) → GPIO 4 ESP32 (+ resistor 10kΩ ke VCC)
GND (pin 4) → GND ESP32
Resistor pull-up 10kΩ antara pin DATA dan VCC sangat penting untuk komunikasi yang stabil!
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
#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 untuk mengirim data sensor ke server:
#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT22
const char* ssid = "WiFiKamu";
const char* password = "PasswordKamu";
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.