#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL3RXiEZr0I"
#define BLYNK_TEMPLATE_NAME "Smart Lock"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
char auth[] = "GhH0l4VmfnYYYxsOqa4O_9qAyLtnSrnh";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
Servo servo;
#define servo_pin 26
#define relay_pin 13
int relay_state = HIGH;
#define button_vpin V1
LiquidCrystal_I2C lcd(0x27, 20, 4); // I2C address may vary, check your LCD module
BlynkTimer timer;
BLYNK_CONNECTED() {
Blynk.syncVirtual(button_vpin);
}
BLYNK_WRITE(button_vpin) {
int button_state = param.asInt();
if (button_state == 1) {
// Turn on servo
servo.write(90);
relay_state = HIGH;
}
else {
// Turn off servo
servo.write(0);
relay_state = LOW;
}
digitalWrite(relay_pin, relay_state);
}
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
servo.attach(servo_pin);
pinMode(relay_pin, OUTPUT);
digitalWrite(relay_pin, relay_state);
lcd.init();
lcd.backlight();
// Print something
lcd.setCursor(0, 0);
// lcd.begin(16, 2);
lcd.print("Door Status:");
}
void loop() {
Blynk.run();
timer.run();
// Update LCD
if (relay_state == HIGH) {
lcd.setCursor(0, 1);
lcd.print("Door Opened ");
}
else {
lcd.setCursor(0, 1);
lcd.print("Door Closed ");
}
}