#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#define PIR_SENSOR_PIN 25
#define SERVO_PIN 14
bool motionDetected = false;
bool doorIsLocked = true;
Servo doorLockServo;
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* webhookURL = "https://webhookwizard.com/api/webhook/in?key=sk_4738b49d-a08e-433e-bb52-c5673372dd60";
void setup() {
Serial.begin(115200);
Serial.println("Starting ESP32...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
pinMode(PIR_SENSOR_PIN, INPUT);
doorLockServo.attach(SERVO_PIN);
doorLockServo.write(0);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Smart Door Lock");
}
void loop() {
motionDetected = digitalRead(PIR_SENSOR_PIN);
if (motionDetected) {
if(doorIsLocked){
unlockDoor();
} else {
lockDoor();
}
sendWebhook();
}
delay(200);
}
void unlockDoor() {
doorIsLocked = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Motion Detected");
lcd.setCursor(0, 1);
lcd.print("Door Unlocked");
doorLockServo.write(90);
delay(5000);
doorIsLocked = true;
lockDoor();
}
void lockDoor() {
doorLockServo.write(0);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Door Locked");
}
void sendWebhook() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(webhookURL);
http.addHeader("Content-Type", "application/json");
String payload = "{\"motionDetected\": " + String(motionDetected) + ", \"doorIsLocked\": " + String(doorIsLocked) + "}";
int httpResponseCode = http.POST(payload);
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Webhook Response: " + response);
} else {
Serial.println("Error sending webhook: " + String(httpResponseCode));
}
http.end();
} else {
Serial.println("WiFi Disconnected");
}
}