#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Ganti sesuai akun Blynk kamu
#define BLYNK_TEMPLATE_ID "TMPL6xaB4ombN"
#define BLYNK_DEVICE_NAME "Monitoring Rumah""
#define BLYNK_AUTH_TOKEN "kYdPPDDweHaMqK30ykSh8QaijdpSqcpP"
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define TRIG 12
#define ECHO 14
#define PIR 13
#define LAMPU 2
#define POMPA 4
#define BEEP 5
#define TOMBOL 18
BlynkTimer timer;
bool lampuState = false;
unsigned long lastMotion = 0;
BLYNK_WRITE(V0) {
lampuState = param.asInt();
digitalWrite(LAMPU, lampuState);
}
void bacaSensor() {
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
// Ultrasonic sensor
digitalWrite(TRIG, LOW); delayMicroseconds(2);
digitalWrite(TRIG, HIGH); delayMicroseconds(10); digitalWrite(TRIG, LOW);
long durasi = pulseIn(ECHO, HIGH);
float levelAir = durasi * 0.034 / 2;
// PIR sensor
if (digitalRead(PIR) == HIGH) {
lastMotion = millis();
Blynk.virtualWrite(V3, 1);
} else {
Blynk.virtualWrite(V3, 0);
if (millis() - lastMotion > 20000) {
lampuState = false;
digitalWrite(LAMPU, LOW);
Blynk.virtualWrite(V0, 0);
}
}
// Pompa logic
if (levelAir < 100) digitalWrite(POMPA, HIGH);
else if (levelAir > 200) digitalWrite(POMPA, LOW);
// Alarm logic
if (levelAir > 200 && suhu > 30) digitalWrite(BEEP, HIGH);
else digitalWrite(BEEP, LOW);
// Kirim ke Blynk
Blynk.virtualWrite(V1, suhu);
Blynk.virtualWrite(V2, kelembaban);
Blynk.virtualWrite(V4, levelAir);
Blynk.virtualWrite(V5, digitalRead(POMPA));
Blynk.virtualWrite(V6, digitalRead(BEEP));
}
void setup() {
Serial.begin(115200);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
dht.begin();
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(PIR, INPUT);
pinMode(LAMPU, OUTPUT);
pinMode(POMPA, OUTPUT);
pinMode(BEEP, OUTPUT);
pinMode(TOMBOL, INPUT_PULLUP);
timer.setInterval(2000L, bacaSensor);
}
void loop() {
Blynk.run();
timer.run();
if (digitalRead(TOMBOL) == LOW) {
lampuState = !lampuState;
digitalWrite(LAMPU, lampuState);
Blynk.virtualWrite(V0, lampuState);
delay(300);
}
}