Tutorial Belanja komponen

Tutorial › Gas & Udara

Monitor Udara Kamar Kos

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN1K2KVCCGNDDOAOMQ-135 + pembagi 1K/2K di AOVCCDATAGNDDHT11

Satu dashboard ringkas untuk kamar: suhu, kelembapan, suhu yang terasa di badan, dan indeks udara. Ada juga catatan suhu terendah dan tertinggi, jadi kamu tahu apakah kamar perlu kipas, AC, atau ventilasi lebih baik.

DHT11 memberi suhu dan kelembapan. Pustaka DHT juga punya computeHeatIndex() yang menghitung "suhu terasa": udara 32 °C dengan kelembapan 80% terasa jauh lebih panas daripada 32 °C yang kering, karena keringat sulit menguap. MQ-135 memberi indeks udara relatif seperti proyek 073.

ESP32 mengingat suhu terendah dan tertinggi sejak menyala. Catatannya dikirim setiap kali ada rekor baru. Kirim teks apa saja ke widget Ulang untuk memulai catatan baru, misalnya setiap pagi.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
MQ-135 Sensor Kualitas Udara NH3 NOx CO2 Benzene1Rp23.500
Modul sensor DHT111Rp12.000
Resistor 1K (isi 10)isi 10, terpakai 11Rp1.800
Resistor 2K (isi 10)isi 10, terpakai 11Rp1.800
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 61Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp122.475
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
MQ-135 + pembagi 1K/2K di AO VCC→VINmerah
MQ-135 + pembagi 1K/2K di AO GND→GNDhitam
MQ-135 + pembagi 1K/2K di AO AO→D34 GPIO34hijau
DHT11 VCC→3V3merah
DHT11 DATA→D4 GPIO4biru
DHT11 GND→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Suhuichibot/budi1234/p079/suhu
154030.2°C
0 detik lalu
Terasa Sepertiichibot/budi1234/p079/terasa
155034.6°C
0 detik lalu
Kelembapanichibot/budi1234/p079/lembap
0 – 10071%
0 detik lalu
Indeks Udaraichibot/budi1234/p079/indeks
0 – 10015
0 detik lalu
Min / Maksichibot/budi1234/p079/minmaks
Suhu terendah 26.8 °C, tertinggi 31.4 °C
0 detik lalu
Ulangichibot/budi1234/p079/ulang
ulang
Belum pernah dikirim

Cara cepat: unduh p079.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Gauge
Suhu
ichibot/KODE/p079/suhu15–40 °C
Gauge
Terasa Seperti
ichibot/KODE/p079/terasa15–50 °C
Gauge
Kelembapan
ichibot/KODE/p079/lembap0–100 %
Gauge
Indeks Udara
ichibot/KODE/p079/indeks0–100
Text Log
Min / Maks
ichibot/KODE/p079/minmaksmenampilkan teks masuk
TEXT_INPUT
Ulang
ichibot/KODE/p079/ulangteks bebas

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

p079.inoUnduh .ino
// Proyek 079 - Monitor Udara Kamar Kos
// 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_LOG     = "ichibot/budi1234/p079/log";
const char* TOPIK_ULANG   = "ichibot/budi1234/p079/ulang";
const char* TOPIK_SUHU    = "ichibot/budi1234/p079/suhu";
const char* TOPIK_LEMBAP  = "ichibot/budi1234/p079/lembap";
const char* TOPIK_TERASA  = "ichibot/budi1234/p079/terasa";
const char* TOPIK_MINMAKS = "ichibot/budi1234/p079/minmaks";
const char* TOPIK_INDEKS  = "ichibot/budi1234/p079/indeks";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
DHT dht(4, DHT11);
const int PIN_UDARA = 34;
const unsigned long PEMANASAN = 120000;
int dasar = 0;
bool siap = false;
float suhuMin = 99, suhuMaks = -99;
unsigned long terakhir = 0;

int bacaUdara() {
  long jumlah = 0;
  for (int i = 0; i < 20; i++) { jumlah += analogRead(PIN_UDARA); delay(5); }
  return jumlah / 20;
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  suhuMin = 99;                       // apa pun isinya: mulai catatan min/maks baru
  suhuMaks = -99;
  mqtt.publish(TOPIK_LOG, "Catatan suhu min/maks diulang");
}

void langganan() {
  mqtt.subscribe(TOPIK_ULANG);
}

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); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 10000) return; terakhir = millis(); float suhu = dht.readTemperature(); float lembap = dht.readHumidity(); if (!isnan(suhu) && !isnan(lembap)) { float terasa = dht.computeHeatIndex(suhu, lembap, false); mqtt.publish(TOPIK_SUHU, String(suhu, 1).c_str()); mqtt.publish(TOPIK_LEMBAP, String(lembap, 0).c_str()); mqtt.publish(TOPIK_TERASA, String(terasa, 1).c_str()); if (suhu < suhuMin || suhu > suhuMaks) { suhuMin = min(suhuMin, suhu); suhuMaks = max(suhuMaks, suhu); mqtt.publish(TOPIK_MINMAKS, ("Suhu terendah " + String(suhuMin, 1) + " °C, tertinggi " + String(suhuMaks, 1) + " °C").c_str()); } } int mentah = bacaUdara(); if (!siap && millis() > PEMANASAN) { dasar = max(mentah, 50); siap = true; } if (siap) mqtt.publish(TOPIK_INDEKS, String(constrain((mentah - dasar) * 100 / dasar, 0, 200)).c_str()); }

Langkah 4: Pahami kodenya

  1. Heat index dari pustaka DHT. Parameter false berarti suhu dalam Celsius.
  2. Catatan hanya dikirim saat ada rekor baru, jadi Text Log tidak penuh setiap 10 detik.
  3. Satu-satunya topic yang dilanggan adalah ulang, jadi isi pesan tidak perlu diperiksa.