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:

  1. Buka Arduino IDE

  2. Klik Sketch → Include Library → Manage Libraries

  3. Cari "DHT sensor library" oleh Adafruit

  4. 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.