ESP32 membaca suhu dan kelembapan dari DHT11 setiap 5 detik, lalu mengirimnya ke Klenik. Hasilnya dua jarum ukur dan satu grafik yang bisa kamu lihat dari HP.
Library DHT mengurus komunikasi dengan sensor lewat satu kabel data (GPIO4). Setiap 5 detik ESP32 membaca dua angka, lalu mengirim suhu ke topic .../p021/suhu dan kelembapan ke .../p021/lembap sebagai angka biasa. Klenik paket gratis membaca angka mentah, jadi tiap nilai diberi topic sendiri, tidak digabung dalam JSON.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| Modul sensor DHT11 | 1 | Rp12.000 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 3 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp90.500 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| DHT11 VCC | → | 3V3 | merah |
| DHT11 DATA | → | D4 GPIO4 | kuning |
| DHT11 GND | → | GND | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p021.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Gauge Suhu | ichibot/KODE/p021/suhu | 0–50 °C |
| Gauge Kelembapan | ichibot/KODE/p021/lembap | 0–100 % |
| Chart Grafik Suhu | ichibot/KODE/p021/suhu | 20–40 °C |
Langkah 3: Upload kode
Library: PubSubClient (Nick O'Leary), DHT sensor library (Adafruit), Adafruit Unified Sensor. Board di Arduino IDE: ESP32 Dev Module.
Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).
// Proyek 021 - Monitor Suhu & Kelembapan Kamar
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";
// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_SUHU = "ichibot/budi1234/p021/suhu";
const char* TOPIK_LEMBAP = "ichibot/budi1234/p021/lembap";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
DHT dht(4, DHT11); // DATA di GPIO4
const unsigned long JEDA = 5000; // kirim tiap 5 detik
unsigned long terakhir = 0;
void langganan() {} // proyek ini hanya mengirim, tidak menerima perintah
sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)
void sambungWiFi() {
WiFi.begin(WIFI_NAMA, WIFI_PASS);
Serial.print("WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" OK, IP " + WiFi.localIP().toString());
}
void sambungMQTT() {
while (!mqtt.connected()) {
if (mqtt.connect(WiFi.macAddress().c_str())) {
Serial.println("Terhubung ke Klenik");
langganan();
} else {
Serial.println("Broker gagal, coba lagi 3 detik");
delay(3000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
sambungWiFi();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
if (millis() - terakhir < JEDA) return;
terakhir = millis();
float suhu = dht.readTemperature();
float lembap = dht.readHumidity();
if (isnan(suhu) || isnan(lembap)) {
Serial.println("DHT11 tidak terbaca, cek kabel DATA");
return;
}
mqtt.publish(TOPIK_SUHU, String(suhu, 1).c_str());
mqtt.publish(TOPIK_LEMBAP, String(lembap, 0).c_str());
Serial.printf("Suhu %.1f C, lembap %.0f %%\n", suhu, lembap);
}Langkah 4: Pahami kodenya
- Membuat objek sensor di pin 4. Kalau kamu pakai DHT22 (lebih akurat), cukup ganti
DHT11jadiDHT22, kabelnya sama. - Pengganti
delay(5000).loop()tetap berputar cepat supayamqtt.loop()jalan terus, tapi pembacaan sensor hanya terjadi kalau sudah lewat 5 detik sejak yang terakhir. - DHT11 kadang gagal dibaca (kabel longgar, dibaca terlalu cepat). Hasilnya
NaN(bukan angka). Data seperti ini tidak dikirim supaya grafik di Klenik tidak loncat ke nol. - Mengubah angka jadi teks dengan 1 angka di belakang koma, misalnya
28.5. Klenik membaca teks angka seperti ini langsung sebagai nilai widget.