Ruang IoT · ESP32

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.

Penulis
Ruang IoT Admin
Dipublikasikan
12 Agustus 2026
Waktu baca
3 menit

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.

Mulai membaca
Ilustrasi tutorial: Praktikum ESP32 + DHT22: Monitoring Suhu dan Kelembapan via MQTT
Ilustrasi praktikum Ruang IoT.

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

KomponenJumlahCatatan
ESP32 DevKit1Gunakan board ESP32 yang didukung Arduino core.
DHT221Sensor suhu dan kelembapan digital.
Resistor 10 kΩ1Pull-up data bila modul DHT22 yang digunakan belum memilikinya.
Breadboard + jumper1 setUntuk 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

DHT22ESP32
VCC3.3V
DATAGPIO 4
GNDGND

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

  1. Upload sketch dan buka Serial Monitor pada 115200 bps.
  2. Pastikan status Wi-Fi menjadi connected.
  3. Pastikan MQTT juga tersambung tanpa kode error berulang.
  4. Amati payload JSON setiap sekitar lima detik.
  5. Gunakan MQTT client atau dashboard platform Anda untuk memastikan topic menerima data.
  6. 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:

TUTORIAL SELESAI

Sudah memahami alurnya?

Praktikkan konsep yang baru dipelajari melalui project, perangkat ESP32, telemetry, dashboard, atau Virtual Lab di Ruang IoT.

Buka Ruang IoT