#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define RELAY_PIN 27
#define PIR_PIN 15
#define LDR_PIN 34
#define BUTTON_PIN 26
WebServer server(80);
bool relayState = false;
void handleRoot() {
String page = "<html><body><h1>Smart Light Control</h1>";
page += "<p>Light is currently: " + String(relayState ? "ON" : "OFF") + "</p>";
page += "<a href=\"/on\"><button style=\"padding: 10px; font-size: 20px;\">Turn ON</button></a>";
page += "<a href=\"/off\"><button style=\"padding: 10px; font-size: 20px;\">Turn OFF</button></a>";
page += "</body></html>";
server.send(200, "text/html", page);
}
void handleOn() {
relayState = true;
digitalWrite(RELAY_PIN, HIGH);
server.send(200, "text/html", "<p>Light is ON</p><a href=\"/\">Go back</a>");
}
void handleOff() {
relayState = false;
digitalWrite(RELAY_PIN, LOW);
server.send(200, "text/html", "<p>Light is OFF</p><a href=\"/\">Go back</a>");
}
void setup() {
Serial.begin(115200);
// Initialize pins
pinMode(RELAY_PIN, OUTPUT);
pinMode(PIR_PIN, INPUT);
pinMode(LDR_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
digitalWrite(RELAY_PIN, LOW);
WiFi.begin(ssid, password);
Serial.print("Connecting to Wi-Fi...");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected!");
server.on("/", handleRoot);
server.on("/on", handleOn);
server.on("/off", handleOff);
server.begin();
Serial.println("Web server started at: " + WiFi.localIP().toString());
}
void loop() {
server.handleClient();
int motionDetected = digitalRead(PIR_PIN);
int lightLevel = analogRead(LDR_PIN);
if (!relayState && motionDetected && lightLevel < 2000) {
digitalWrite(RELAY_PIN, HIGH);
relayState = true;
} else if (relayState && !motionDetected) {
digitalWrite(RELAY_PIN, LOW);
relayState = false;
}
if (digitalRead(BUTTON_PIN) == LOW) {
relayState = !relayState;
digitalWrite(RELAY_PIN, relayState ? HIGH : LOW);
delay(300);
}
}