Tutorial Belanja komponen

Tutorial › Proyek Gabungan

Stasiun Cuaca Mini

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCDATAGNDDHT22 (AM2302)VCCGNDSCLSDACSBSDOGY-BMP280 (I2C)VCCGNDSCLSDAADDRBH1750 GY-30 (I2C)VCCGNDDOAOModul sensor hujan (papan hujan ke 2 pin ujung)

Stasiun cuaca halaman rumah: suhu dan kelembapan (DHT22), tekanan udara (BMP280), terang cahaya matahari (BH1750), dan hujan (papan hujan). Ada juga ramalan sederhana dari perubahan tekanan udara per jam, cara yang sama dengan barometer kuno.

Empat sensor dari bab-bab sebelumnya bekerja bersama. BMP280 dan BH1750 sama-sama I2C, dan keduanya bisa dipasang di dua kabel yang sama (SDA 21, SCL 22) karena alamatnya berbeda (0x76 dan 0x23). Inilah kelebihan I2C: banyak sensor, tetap dua kabel. DHT22 lebih teliti daripada DHT11 untuk cuaca luar ruangan, dan papan hujan dibaca analog di GPIO34.

Tekanan udara yang turun lebih dari 1 hPa dalam satu jam biasanya tanda awan hujan mendekat, sedangkan tekanan yang naik tanda cuaca membaik. Setiap jam, tekanan dibandingkan dengan satu jam sebelumnya dan hasil ramalannya dikirim ke Text Log.

Pasang sensor di tempat teduh berventilasi, misalnya di dalam kotak berkisi. DHT22 yang terkena matahari langsung akan membaca suhu jauh lebih tinggi daripada suhu udara sebenarnya.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor DHT22 (AM2302) + kabel1Rp32.000
Sensor tekanan BMP280 (GY-BMP280)1Rp16.000
Sensor cahaya BH1750 (GY-30)1Rp19.400
Rain Drop Sensor Pendeteksi Hujan Tetesan Air Ar1Rp11.640
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 101Rp3.500
Kabel jumper female-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)Rp165.915
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
DHT22 (AM2302) VCC→3V3merah
DHT22 (AM2302) DATA→D4 GPIO4hijau
DHT22 (AM2302) GND→GNDhitam
GY-BMP280 (I2C) VCC→3V3merah
GY-BMP280 (I2C) GND→GNDhitam
GY-BMP280 (I2C) SCL→D22 GPIO22kuning
GY-BMP280 (I2C) SDA→D21 GPIO21biru
BH1750 GY-30 (I2C) VCC→3V3merah
BH1750 GY-30 (I2C) GND→GNDhitam
BH1750 GY-30 (I2C) SCL→D22 GPIO22kuning
BH1750 GY-30 (I2C) SDA→D21 GPIO21biru
Modul sensor hujan (papan hujan ke 2 pin ujung) VCC→3V3merah
Modul sensor hujan (papan hujan ke 2 pin ujung) GND→GNDhitam
Modul sensor hujan (papan hujan ke 2 pin ujung) AO→D34 GPIO34ungu

Langkah 2: Siapkan dashboard Klenik

Suhuichibot/budi1234/p145/suhu
154029.8°C
0 detik lalu
Kelembapanichibot/budi1234/p145/lembap
0 – 10074%
0 detik lalu
Tekanan Udaraichibot/budi1234/p145/tekanan
99010251008.6 hPa
0 detik lalu
Cahayaichibot/budi1234/p145/lux
0 – 6000023500 lx
0 detik lalu
Hujanichibot/budi1234/p145/hujan
0 – 1000%
0 detik lalu
Ramalanichibot/budi1234/p145/ramalan
Cuaca stabil
Cuaca memburuk, kemungkinan hujan
0 detik lalu
Grafik Tekananichibot/budi1234/p145/tekanan
1006.8 hPa
1000.0 hPa7 titik1015.0 hPa
0 detik lalu

Cara cepat: unduh p145.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/p145/suhu15–40 °C
Gauge
Kelembapan
ichibot/KODE/p145/lembap0–100 %
Gauge
Tekanan Udara
ichibot/KODE/p145/tekanan990–1025 hPa
Gauge
Cahaya
ichibot/KODE/p145/lux0–60000 lx
Gauge
Hujan
ichibot/KODE/p145/hujan0–100 %
Text Log
Ramalan
ichibot/KODE/p145/ramalanmenampilkan teks masuk
Chart
Grafik Tekanan
ichibot/KODE/p145/tekanan1000–1015 hPa

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary), DHT sensor library (Adafruit), Adafruit Unified Sensor, Adafruit BMP280 Library, BH1750 (Christopher Laws). 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).

p145.inoUnduh .ino
// Proyek 145 - Stasiun Cuaca Mini
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <DHT.h>
#include <Adafruit_BMP280.h>
#include <BH1750.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/p145/suhu";
const char* TOPIK_LEMBAP  = "ichibot/budi1234/p145/lembap";
const char* TOPIK_TEKANAN = "ichibot/budi1234/p145/tekanan";
const char* TOPIK_LUX     = "ichibot/budi1234/p145/lux";
const char* TOPIK_HUJAN   = "ichibot/budi1234/p145/hujan";
const char* TOPIK_RAMALAN = "ichibot/budi1234/p145/ramalan";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
DHT dht(4, DHT22);
Adafruit_BMP280 bmp;                  // I2C 0x76
BH1750 cahaya;                        // I2C 0x23, satu jalur SDA/SCL dengan BMP280
const int PIN_HUJAN = 34;
float tekananTadi = 0;
unsigned long terakhir = 0, trenTerakhir = 0;

String ramalan(float turunPerJam) {   // ramalan sederhana dari perubahan tekanan udara
  if (turunPerJam > 1.0) return "Cuaca memburuk, kemungkinan hujan";
  if (turunPerJam < -1.0) return "Cuaca membaik";
  return "Cuaca stabil";
}

void langganan() {}

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(); Wire.begin(); if (!bmp.begin(0x76) && !bmp.begin(0x77)) Serial.println("BMP280 tidak ditemukan"); if (!cahaya.begin()) Serial.println("BH1750 tidak ditemukan"); sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 10000) return; terakhir = millis(); float suhu = dht.readTemperature(), lembap = dht.readHumidity(); float hpa = bmp.readPressure() / 100.0; float lux = cahaya.readLightLevel(); int hujan = constrain(map(analogRead(PIN_HUJAN), 4095, 1200, 0, 100), 0, 100); if (!isnan(suhu)) { mqtt.publish(TOPIK_SUHU, String(suhu, 1).c_str()); mqtt.publish(TOPIK_LEMBAP, String(lembap, 0).c_str()); } mqtt.publish(TOPIK_TEKANAN, String(hpa, 1).c_str()); mqtt.publish(TOPIK_LUX, String(lux, 0).c_str()); mqtt.publish(TOPIK_HUJAN, String(hujan).c_str()); if (millis() - trenTerakhir >= 3600000UL || tekananTadi == 0) { // bandingkan tekanan tiap jam if (tekananTadi > 0) mqtt.publish(TOPIK_RAMALAN, ramalan(tekananTadi - hpa).c_str()); tekananTadi = hpa; trenTerakhir = millis(); } }

Langkah 4: Pahami kodenya

  1. Dua modul I2C di kabel yang sama. Setiap modul punya alamat sendiri, jadi ESP32 bisa menyapa masing-masing tanpa tertukar.
  2. Aturan barometer klasik. Bukan ramalan BMKG, tetapi cukup sering benar untuk beberapa jam ke depan.
  3. Papan kering ≈ 4095, basah turun. Kalibrasi angka 1200 dengan papan yang disiram air (seperti proyek 063).