#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL5QMsFljS3"
#define BLYNK_TEMPLATE_NAME "SMART DOOR LOCKED SYSTEM"
#define BLYNK_AUTH_TOKEN "I4KHcmyxxydvql7ZzBC__WfYGrB549SP"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Blynk credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Servo servo;
const int pirPin = 27;
const int buzzerPin = 2;
const int redLEDPin = 16;
const int greenLEDPin = 17;
const int trigPin = 26;
const int echoPin = 25;
const int servoPin = 18;
const int buttonPin = 14;
const int lockPosition = 0;
const int unlockPosition = 90;
int buttonState = 0;
int lastButtonState = 0;
bool isLocked = false;
unsigned long duration;
float distance;
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Unable to connect"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Smart Door Lock System");
display.display();
servo.attach(servoPin);
pinMode(pirPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(redLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
servo.write(lockPosition);
isLocked = true;
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
readSensor();
// PIR sensor
int pirState = digitalRead(pirPin);
if (pirState == HIGH) {
Serial.println("Motion detected, Buzzer ON!");
digitalWrite(buzzerPin, HIGH);
display.clearDisplay();
display.setCursor(0, 0);
display.println("Motion detected, Buzzer ON!");
display.display();
} else {
Serial.println("No motion detected, Buzzer OFF");
digitalWrite(buzzerPin, LOW);
display.clearDisplay();
display.setCursor(0, 0);
display.println("No motion detected, Buzzer OFF");
display.display();
}
// Servo Motor
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
isLocked = !isLocked;
if (isLocked) {
servo.write(lockPosition);
Serial.println("Door Locked");
} else {
servo.write(unlockPosition);
Serial.println("Door Unlocked");
}
}
delay(50);
}
lastButtonState = buttonState;
}
long pre = 0;
void readSensor(){
if(millis() - pre > 2000){
pre = millis();
digitalWrite(trigPin, LOW);
delay(10);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2.0) / 29.0;
Blynk.virtualWrite(V5, distance); // Send distance to Blynk app
if(distance < 100){
Blynk.virtualWrite(V1, HIGH); // Turn on green LED widget
Blynk.virtualWrite(V2, LOW); // Turn off red LED widget
digitalWrite(greenLEDPin, HIGH);
digitalWrite(redLEDPin, LOW);
} else {
Blynk.virtualWrite(V1, LOW); // Turn off green LED widget
Blynk.virtualWrite(V2, HIGH); // Turn on red LED widget
digitalWrite(greenLEDPin, LOW);
digitalWrite(redLEDPin, HIGH);
}
Serial.println(distance);
}
}
// Blynk virtual pin write handlers
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
digitalWrite(greenLEDPin, pinValue);
}
BLYNK_WRITE(V2) {
int pinValue = param.asInt();
digitalWrite(redLEDPin, pinValue);
}