🌙 Smart Auto Light
LDR Value: )rawliteral" + String(ldrValue) + R"rawliteral(
Time: )rawliteral" + String(hourNow) + R"rawliteral(:00
Mode: )rawliteral" + String(manualOverride ? "Manual" : "Auto") + R"rawliteral(
Light: )rawliteral" + String(lightOn ? "ON" : "OFF") + R"rawliteral(
Manual Control
Settings
)rawliteral";
server.send(200, "text/html", html);
}
void handleCommand() {
String cmd = server.uri();
if (cmd == "/on") { manualOverride = true; manualState = true; }
else if (cmd == "/off") { manualOverride = true; manualState = false; }
else if (cmd == "/mode") { manualOverride = !manualOverride; }
server.sendHeader("Location", "/");
server.send(303);
}
void handleSet() {
if (server.hasArg("th")) threshold = server.arg("th").toInt();
if (server.hasArg("st")) {
sscanf(server.arg("st").c_str(), "%d:%d:%d", &startHour, &startMinute, &startSecond);
}
if (server.hasArg("et")) {
sscanf(server.arg("et").c_str(), "%d:%d:%d", &endHour, &endMinute, &endSecond);
}
server.sendHeader("Location", "/");
server.send(303);
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("\nConnecting to Wi-Fi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi connected: " + WiFi.localIP().toString());
timeClient.begin();
timeClient.update();
server.on("/", handleRoot);
server.on("/on", handleCommand);
server.on("/off", handleCommand);
server.on("/mode", handleCommand);
server.on("/set", handleSet);
server.begin();
Serial.println("Web server started!");
}
void loop() {
server.handleClient();
timeClient.update();
int ldrValue = analogRead(LDR_PIN);
int hourNow = timeClient.getHours();
bool dark = (ldrValue < threshold);
bool night = (hourNow >= startHour || hourNow < endHour);
bool autoState = (dark || night);
bool lightOn = manualOverride ? manualState : autoState;
digitalWrite(RELAY_PIN, lightOn ? LOW : HIGH);
delay(1000);
}