#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "your_SSID"; // Replace with your network credentials
const char* password = "your_PASSWORD";
WebServer server(80);
// GPIO pin assignments
#define LIGHT_PIN1 18
#define LIGHT_PIN2 19
#define LIGHT_PIN3 21
#define LIGHT_PIN4 22
#define SWITCH_PIN1 34
#define SWITCH_PIN2 35
#define SWITCH_PIN3 32
#define SWITCH_PIN4 31
void handleRoot() {
String html = "<html>\
<h1>Smart Home Control</h1>\
<form action='/light1' method='POST'><button>Toggle Light 1</button></form>\
<form action='/light2' method='POST'><button>Toggle Light 2</button></form>\
<form action='/light3' method='POST'><button>Toggle Light 3</button></form>\
<form action='/light4' method='POST'><button>Toggle Light 4</button></form>\
</html>";
server.send(200, "text/html", html);
}
void handleLight1() {
digitalWrite(LIGHT_PIN1, !digitalRead(LIGHT_PIN1)); // Toggle the light
server.sendHeader("Location", "/");
server.send(300);
}
void handleLight2() {
digitalWrite(LIGHT_PIN2, !digitalRead(LIGHT_PIN2)); // Toggle the light
server.sendHeader("Location", "/");
server.send(300);
}
void handleLight3() {
digitalWrite(LIGHT_PIN3, !digitalRead(LIGHT_PIN3)); // Toggle the light
server.sendHeader("Location", "/");
server.send(300);
}
void handleLight4() {
digitalWrite(LIGHT_PIN4, !digitalRead(LIGHT_PIN4)); // Toggle the light
server.sendHeader("Location", "/");
server.send(300);
}
void setup() {
// Serial Monitor for debugging
Serial.begin(115200);
// Pin mode configuration
pinMode(LIGHT_PIN1, OUTPUT);
pinMode(LIGHT_PIN2, OUTPUT);
pinMode(LIGHT_PIN3, OUTPUT);
pinMode(LIGHT_PIN4, OUTPUT);
pinMode(SWITCH_PIN1, INPUT);
pinMode(SWITCH_PIN2, INPUT);
pinMode(SWITCH_PIN3, INPUT);
pinMode(SWITCH_PIN4, INPUT);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
Serial.println(WiFi.localIP());
// Start server and route handling
server.on("/", handleRoot);
server.on("/light1", HTTP_POST, handleLight1);
server.on("/light2", HTTP_POST, handleLight2);
server.on("/light3", HTTP_POST, handleLight3);
server.on("/light4", HTTP_POST, handleLight4);
server.begin();
}
void loop() {
// Handle the web server
server.handleClient();
// Physical switch control
if (digitalRead(SWITCH_PIN1) == HIGH) {
digitalWrite(LIGHT_PIN1, !digitalRead(LIGHT_PIN1));
delay(500); // Debounce delay
}
if (digitalRead(SWITCH_PIN2) == HIGH) {
digitalWrite(LIGHT_PIN2, !digitalRead(LIGHT_PIN2));
delay(500);
}
if (digitalRead(SWITCH_PIN3) == HIGH) {
digitalWrite(LIGHT_PIN3, !digitalRead(LIGHT_PIN3));
delay(500);
}
if (digitalRead(SWITCH_PIN4) == HIGH) {
digitalWrite(LIGHT_PIN4, !digitalRead(LIGHT_PIN4));
delay(500);
#include <WiFi.h>
#include <WebServer.h>
}
}