#define BLYNK_TEMPLATE_ID "TMPL6RVso7jcV"
#define BLYNK_TEMPLATE_NAME "SMART HOME"
#define BLYNK_AUTH_TOKEN "CtrGCS_00KmlAy1z3ZZdZDkbc1s_1COT"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Pin Assignment
#define DHTPIN 4
#define PIRPIN 5
#define RELAY_KAMAR 12
#define RELAY_TAMU 13
#define RELAY_TERAS 14
#define RELAY_AC 27
#define BUZZER 26
// DHT Sensor
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Blynk Credentials
char auth[] = "CtrGCS_00KmlAy1z3ZZdZDkbc1s_1COT";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Blynk Timer
BlynkTimer timer;
// Variables
bool kamarState = false;
bool tamuState = false;
bool terasState = false;
void sendTemperature() {
float temp = dht.readTemperature();
if (isnan(temp)) {
Serial.println("Failed to read temperature!");
return;
}
Blynk.virtualWrite(V3, temp); // Kirim suhu ke Blynk
Serial.print("Temperature: ");
Serial.println(temp); // Debug di Serial Monitor
// Otomatis nyalakan AC/kipas jika suhu >30°C
if (temp > 30) {
digitalWrite(RELAY_AC, HIGH); // Nyalakan AC/kipas
Blynk.logEvent("high_temp_alert", "Suhu rumah di atas 30°C!"); // Notifikasi ke Blynk
} else {
digitalWrite(RELAY_AC, LOW); // Matikan AC/kipas
}
}
void checkMotion() {
int motion = digitalRead(PIRPIN);
if (motion == HIGH) {
Serial.println("Motion Detected!");
// Logika membedakan manusia/binatang
// (contoh: deteksi menggunakan waktu gerakan atau algoritma lanjutan)
bool isHuman = true; // Dummy logic, sesuaikan dengan kebutuhan Anda
if (isHuman) {
digitalWrite(BUZZER, HIGH); // Hidupkan buzzer
delay(5000); // Durasi bunyi 5 detik
Blynk.logEvent("motion_alert", "Gerakan manusia terdeteksi!");
} else {
digitalWrite(BUZZER, LOW); // Matikan buzzer
}
} else {
digitalWrite(BUZZER, LOW); // Tidak ada gerakan
}
}
BLYNK_WRITE(V0) { // Lampu Kamar
kamarState = param.asInt();
digitalWrite(RELAY_KAMAR, kamarState);
}
BLYNK_WRITE(V1) { // Lampu Ruang Tamu
tamuState = param.asInt();
digitalWrite(RELAY_TAMU, tamuState);
}
BLYNK_WRITE(V2) { // Lampu Teras
terasState = param.asInt();
digitalWrite(RELAY_TERAS, terasState);
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
// Pin Modes
pinMode(RELAY_KAMAR, OUTPUT);
pinMode(RELAY_TAMU, OUTPUT);
pinMode(RELAY_TERAS, OUTPUT);
pinMode(RELAY_AC, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(PIRPIN, INPUT);
// Initial States
digitalWrite(RELAY_KAMAR, LOW);
digitalWrite(RELAY_TAMU, LOW);
digitalWrite(RELAY_TERAS, LOW);
digitalWrite(RELAY_AC, LOW);
digitalWrite(BUZZER, LOW);
dht.begin();
// Timers
timer.setInterval(1000L, sendTemperature);
timer.setInterval(500L, checkMotion);
}
void loop() {
Blynk.run();
timer.run();
}