#define BLYNK_TEMPLATE_ID "TMPL6i4RByCPA"
#define BLYNK_TEMPLATE_NAME "Smart Home System"
#define BLYNK_AUTH_TOKEN "aoNQDuVyR1qvl7wOMQJHJ9YYtNKI4f7g"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
// Blynk settings
char auth[] = BLYNK_AUTH_TOKEN;
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin untuk relay
#define relay1 21 // Lampu pertama
// Servo settings
Servo myServo;
const int servoPin = 4;
const int unlockPosition = -90; // Posisi servo saat pintu terbuka
const int lockPosition = 90; // Posisi servo saat pintu terkunci
// Buzzer pin
const int buzzerPin = 32; // Pin untuk buzzer
// Status relay
int SW_relay1 = 0;
// Status pintu
bool locked = true;
// Timer Blynk
BlynkTimer timer;
// Deklarasi fungsi
void unlockDoor();
void lockDoor();
void playBuzzer(int times);
// Kontrol relay pertama (Virtual Pin V1)
BLYNK_WRITE(V1) {
SW_relay1 = param.asInt();
if (SW_relay1 == 1) {
digitalWrite(relay1, HIGH);
Serial.println("Lampu 1: ON");
Blynk.virtualWrite(V1, HIGH);
} else {
digitalWrite(relay1, LOW);
Serial.println("Lampu 1: OFF");
Blynk.virtualWrite(V1, LOW);
}
}
// Kontrol pintu (Virtual Pin V0)
BLYNK_WRITE(V0) {
int switchState = param.asInt();
if (switchState == 1) { // Jika switch ON
unlockDoor();
} else { // Jika switch OFF
lockDoor();
}
}
void setup() {
Serial.begin(115200);
// Inisialisasi WiFi dan Blynk
Blynk.begin(auth, ssid, pass);
// Inisialisasi relay
pinMode(relay1, OUTPUT);
// Inisialisasi servo
myServo.attach(servoPin);
// Inisialisasi buzzer
pinMode(buzzerPin, OUTPUT);
// Set default posisi pintu terkunci
lockDoor();
}
void loop() {
Blynk.run();
timer.run();
}
void unlockDoor() {
locked = false;
myServo.write(unlockPosition);
Serial.println("Pintu: Terbuka");
Blynk.virtualWrite(V0, 1); // Update switch Blynk ke ON
playBuzzer(2); // Buzzer berbunyi dua kali
}
void lockDoor() {
locked = true;
myServo.write(lockPosition);
Serial.println("Pintu: Terkunci");
Blynk.virtualWrite(V0, 0); // Update switch Blynk ke OFF
playBuzzer(1); // Buzzer berbunyi sekali
}
// Fungsi untuk mengontrol bunyi buzzer
void playBuzzer(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(buzzerPin, HIGH);
delay(200);
digitalWrite(buzzerPin, LOW);
delay(200);
}
}