Praktikum ESP32 + DHT22: Monitoring Suhu dan Kelembapan via MQTT
Panduan lengkap membaca DHT22 dengan ESP32, menghubungkan Wi-Fi dan MQTT, serta mengirim telemetry suhu–kelembapan dalam format JSON.
Artikel ini disusun sebagai panduan teknis Ruang IoT. Gunakan daftar isi untuk berpindah antarbagian dan ikuti langkah secara berurutan ketika artikel memuat praktik atau konfigurasi.
Praktikum ini membangun node IoT sederhana yang membaca suhu dan kelembapan dari DHT22, menampilkan hasil pada Serial Monitor, kemudian mengirim telemetry melalui MQTT. Fokus utamanya adalah memahami alur lengkap sensor → pemrosesan ESP32 → jaringan Wi-Fi → broker MQTT → konsumen data. Nilai broker, username, password, dan topic pada contoh sengaja berupa placeholder agar tidak ada kredensial yang tertanam di artikel.
Tujuan praktikum
- Membaca suhu dan kelembapan secara periodik.
- Mendeteksi pembacaan sensor yang tidak valid.
- Menghubungkan ESP32 ke Wi-Fi dan MQTT.
- Mengirim payload JSON yang konsisten untuk telemetry.
- Melakukan diagnosis dasar dari Serial Monitor ketika koneksi gagal.
Perangkat dan library
| Komponen | Jumlah | Catatan |
|---|---|---|
| ESP32 DevKit | 1 | Gunakan board ESP32 yang didukung Arduino core. |
| DHT22 | 1 | Sensor suhu dan kelembapan digital. |
| Resistor 10 kΩ | 1 | Pull-up data bila modul DHT22 yang digunakan belum memilikinya. |
| Breadboard + jumper | 1 set | Untuk perakitan prototipe. |
Library: DHT sensor library dan PubSubClient. Instal melalui Library Manager Arduino IDE. Pin pada contoh menggunakan GPIO 4; sesuaikan bila board Anda berbeda.
Rangkaian
| DHT22 | ESP32 |
|---|---|
| VCC | 3.3V |
| DATA | GPIO 4 |
| GND | GND |
Jika menggunakan sensor DHT22 bare tanpa breakout, pasang resistor pull-up 10 kΩ antara DATA dan 3.3V. Jangan mengubah pin sambil perangkat diberi daya.
Program ESP32
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHT_PIN 4
#define DHT_TYPE DHT22
const char* WIFI_SSID = "NAMA_WIFI";
const char* WIFI_PASS = "PASSWORD_WIFI";
const char* MQTT_HOST = "broker.example.net";
const uint16_t MQTT_PORT = 1883;
const char* MQTT_USER = "USERNAME";
const char* MQTT_PASS = "PASSWORD";
const char* TOPIC_TELEMETRY = "lab/esp32-01/telemetry";
DHT dht(DHT_PIN, DHT_TYPE);
WiFiClient net;
PubSubClient mqtt(net);
unsigned long lastSend = 0;
void connectWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
Serial.print("Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print('.');
}
Serial.println(" connected");
}
void connectMqtt() {
while (!mqtt.connected()) {
String clientId = "esp32-dht22-" + String((uint32_t)ESP.getEfuseMac(), HEX);
Serial.print("MQTT...");
if (mqtt.connect(clientId.c_str(), MQTT_USER, MQTT_PASS)) {
Serial.println(" connected");
} else {
Serial.printf(" gagal, state=%d\n", mqtt.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
connectWiFi();
mqtt.setServer(MQTT_HOST, MQTT_PORT);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) connectWiFi();
if (!mqtt.connected()) connectMqtt();
mqtt.loop();
if (millis() - lastSend >= 5000) {
lastSend = millis();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h)) {
Serial.println("Pembacaan DHT22 tidak valid");
return;
}
char payload[96];
snprintf(payload, sizeof(payload),
"{\"temperature\":%.2f,\"humidity\":%.2f}", t, h);
bool ok = mqtt.publish(TOPIC_TELEMETRY, payload);
Serial.printf("%s | publish=%s\n", payload, ok ? "OK" : "FAIL");
}
}
Langkah pengujian
- Upload sketch dan buka Serial Monitor pada 115200 bps.
- Pastikan status Wi-Fi menjadi
connected. - Pastikan MQTT juga tersambung tanpa kode error berulang.
- Amati payload JSON setiap sekitar lima detik.
- Gunakan MQTT client atau dashboard platform Anda untuk memastikan topic menerima data.
- Sentuh sensor dengan tangan beberapa saat dan amati perubahan suhu/kelembapan secara wajar.
Kriteria keberhasilan dan troubleshooting
Praktikum dianggap berhasil bila minimal sepuluh payload berturut-turut diterima dengan struktur JSON yang sama dan tidak ada nilai NaN. Jika DHT22 selalu gagal, periksa jenis sensor, wiring DATA, ground bersama, dan interval pembacaan. Jika Wi-Fi gagal, verifikasi SSID/password serta kekuatan sinyal. Jika MQTT gagal, pastikan host, port, autentikasi, dan aturan topic sesuai broker yang digunakan.
Untuk Ruang IoT: ketika memakai library resmi Ruang IoT, ikuti konfigurasi project/device yang disediakan platform. Hindari menyalin kredensial broker sensitif ke artikel atau repository publik.
Referensi resmi dan bacaan lanjut
Gunakan dokumentasi resmi berikut untuk memeriksa API, kompatibilitas board, dan perubahan versi library:
Sudah memahami alurnya?
Praktikkan konsep yang baru dipelajari melalui project, perangkat ESP32, telemetry, dashboard, atau Virtual Lab di Ruang IoT.