#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const char* ssid = "ESP32-AP";
const char* password = "12345678";
const int pirPin = 2; // PIR sensor
const int ledPin = 18; // LED alarm
const int buzzerPin = 19; // Buzzer alarm
const int buttonPin = 35; // Reset button
bool alarmOn = false;
WebServer server(80);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void handleRoot() {
String html = "<html><head><meta charset=\"utf-8\"><title>Security System</title></head><body>";
html += "<h1>Alarm Status</h1>";
html += "<p>Status: <b style='color:";
html += alarmOn ? "red'>⚠️ ALARM TRIGGERED ⚠️" : "green'>✅ Normal";
html += "</b></p>";
html += "<form action='/reset' method='get'>";
html += "<button style='padding:10px;font-size:16px;'>Reset Alarm</button>";
html += "</form></body></html>";
server.send(200, "text/html; charset=utf-8", html);
}
void handleReset() {
resetAlarm();
server.sendHeader("Location", "/");
server.send(303);
}
void resetAlarm() {
alarmOn = false;
digitalWrite(ledPin, LOW);
digitalWrite(buzzerPin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Status: Normal");
}
void checkPIR() {
int pirState = digitalRead(pirPin);
if (pirState == HIGH && !alarmOn) {
alarmOn = true;
Serial.println("Motion detected! Alarm triggered!");
digitalWrite(ledPin, HIGH);
digitalWrite(buzzerPin, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ALARM TRIGGERED");
}
}
void checkButton() {
if (digitalRead(buttonPin) == LOW && alarmOn) {
Serial.println("🔘 Reset button pressed.");
resetAlarm();
delay(500); // debounce
}
}
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // internal pull-up
// LCD init
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("System Starting...");
delay(2000);
resetAlarm();
WiFi.softAP(ssid, password);
Serial.println("✅ ESP32 AP started");
Serial.print("👉 IP address: ");
Serial.println(WiFi.softAPIP());
server.on("/", HTTP_GET, handleRoot);
server.on("/reset", HTTP_GET, handleReset);
server.begin();
Serial.println("✅ HTTP server started");
}
void loop() {
server.handleClient();
checkPIR();
checkButton();
}