CCCPaste

101250218f472

#include 
#include 
#include 
#include 

#define RELAY_PIN D1
#define LDR_PIN   A0

// ===== Wi-Fi Credentials =====
const char* ssid = "TestESP";
const char* password = "12345678";

// ===== Settings =====
int threshold = 600;      // Default LDR threshold
int startHour = 18, startMinute = 0, startSecond = 0;
int endHour   = 6,  endMinute = 0, endSecond = 0;

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000); // +5:30 offset (India)
ESP8266WebServer server(80);

bool manualOverride = false;
bool manualState = false;

void handleRoot() {
  int ldrValue = analogRead(LDR_PIN);
  timeClient.update();
  int hourNow = timeClient.getHours();

  bool dark = (ldrValue < threshold);
  bool night = (hourNow >= startHour || hourNow < endHour);
  bool autoState = (dark || night);
  bool lightOn = manualOverride ? manualState : autoState;

  String html = R"rawliteral(
  
  
  Smart Auto Light
  
  

🌙 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

Threshold:
Start Time (HH:MM:SS):
End Time (HH:MM:SS):
)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); }