#define BLYNK_TEMPLATE_ID "TMPL6U8iA5sE7"
#define BLYNK_TEMPLATE_NAME "Bank Security Lock"
#define BLYNK_AUTH_TOKEN "IDYaAiRF-pJzzegB5QcV1NGQPq1ypC_M"
#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// --- Pin Definitions ---
#define PIR_PIN 32
#define RELAY_PIN 33
#define GREEN_LED 25
#define RED_LED 26
#define BUZZER_PIN 14
#define RST_PIN 4
#define SS_PIN 5
// --- OLED Display Settings ---
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// --- RFID Instance ---
MFRC522 mfrc522(SS_PIN, RST_PIN);
// --- WiFi & Blynk Setup ---
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Default for Wokwi
char pass[] = "";
void setup() {
Serial.begin(115200);
// Pin Modes
pinMode(PIR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Initialize Hardware
SPI.begin();
mfrc522.PCD_Init();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println("SYSTEM BOOTING...");
display.display();
Blynk.begin(auth, ssid, pass);
display.clearDisplay();
display.setCursor(0, 10);
display.println("SECURE VAULT");
display.println("SYSTEM READY");
display.display();
}
// --- Blynk Controls ---
// V1: Manual Relay Control (Button)
BLYNK_WRITE(V1) {
int value = param.asInt();
digitalWrite(RELAY_PIN, value);
}
// V2: Manual Buzzer Control (Button)
BLYNK_WRITE(V2) {
int value = param.asInt();
digitalWrite(BUZZER_PIN, value);
}
void loop() {
Blynk.run();
// 1. PIR Motion Logic
int motionDetected = digitalRead(PIR_PIN);
if (motionDetected == HIGH) {
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
updateDisplay("WARNING!", "MOTION DETECTED");
} else {
digitalWrite(RED_LED, LOW);
// Keep buzzer off unless Blynk turned it on (or reset here if strictly PIR controlled)
digitalWrite(BUZZER_PIN, LOW);
}
// 2. RFID Logic
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(GREEN_LED, HIGH);
updateDisplay("ACCESS GRANTED", "LOCK OPENED");
delay(3000); // Keep open for 3 seconds
digitalWrite(RELAY_PIN, LOW);
digitalWrite(GREEN_LED, LOW);
updateDisplay("SECURE VAULT", "SYSTEM READY");
mfrc522.PICC_HaltA(); // Stop reading same card
}
}
// Helper to update OLED quickly
void updateDisplay(String line1, String line2) {
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 10);
display.println(line1);
display.setCursor(0, 30);
display.println(line2);
display.display();
}Loading
mfrc522
mfrc522
Motion Sensor
Buzzer
Card Scan
Ground
5 V
Led's for Indication
Relay for opening lock
Lock Open