Mass_Hari

Untitled

Nov 4th, 2025
1,021
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.24 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <WiFiUdp.h>
  3. #include <NTPClient.h>
  4. #include <ESP8266WebServer.h>
  5.  
  6. #define RELAY_PIN D1
  7. #define LDR_PIN   A0
  8.  
  9. // ===== Wi-Fi Credentials =====
  10. const char* ssid = "TestESP";
  11. const char* password = "12345678";
  12.  
  13. // ===== Settings =====
  14. int threshold = 600;      // Default LDR threshold
  15. int startHour = 18, startMinute = 0, startSecond = 0;
  16. int endHour   = 6,  endMinute = 0, endSecond = 0;
  17.  
  18. WiFiUDP ntpUDP;
  19. NTPClient timeClient(ntpUDP, "pool.ntp.org", 19800, 60000); // +5:30 offset (India)
  20. ESP8266WebServer server(80);
  21.  
  22. bool manualOverride = false;
  23. bool manualState = false;
  24.  
  25. void handleRoot() {
  26.   int ldrValue = analogRead(LDR_PIN);
  27.   timeClient.update();
  28.   int hourNow = timeClient.getHours();
  29.  
  30.   bool dark = (ldrValue < threshold);
  31.   bool night = (hourNow >= startHour || hourNow < endHour);
  32.   bool autoState = (dark || night);
  33.   bool lightOn = manualOverride ? manualState : autoState;
  34.  
  35.   String html = R"rawliteral(
  36.  <!DOCTYPE html><html><head>
  37.  <meta name='viewport' content='width=device-width, initial-scale=1'>
  38.  <title>Smart Auto Light</title>
  39.  <style>
  40.  body{margin:0;font-family:Poppins,Arial;background:#111;color:#fff;text-align:center;}
  41.  .container{max-width:400px;margin:auto;padding:20px;}
  42.  input,button{width:90%;padding:10px;margin:8px 0;border:none;border-radius:10px;font-size:16px;}
  43.  button{cursor:pointer;}
  44.  .on{background:#4caf50;color:white;}
  45.  .off{background:#f44336;color:white;}
  46.  .switch{background:#2196f3;color:white;}
  47.  .card{background:#222;border-radius:15px;padding:15px;margin:10px 0;}
  48.  </style></head><body>
  49.  <div class='container'>
  50.  <h2>🌙 Smart Auto Light</h2>
  51.  <div class='card'>
  52.    <b>LDR Value:</b> <span id='ldr'>)rawliteral" + String(ldrValue) + R"rawliteral(</span><br>
  53.    <b>Time:</b> <span id='time'>)rawliteral" + String(hourNow) + R"rawliteral(:00</span><br>
  54.    <b>Mode:</b> <span id='mode'>)rawliteral" + String(manualOverride ? "Manual" : "Auto") + R"rawliteral(</span><br>
  55.    <b>Light:</b> <span id='light'>)rawliteral" + String(lightOn ? "ON" : "OFF") + R"rawliteral(</span>
  56.  </div>
  57.  
  58.  <div class='card'>
  59.    <h3>Manual Control</h3>
  60.    <button class='on' onclick="send('on')">ON</button>
  61.    <button class='off' onclick="send('off')">OFF</button>
  62.    <button class='switch' onclick="send('mode')">Switch to )rawliteral" + String(manualOverride ? "Auto" : "Manual") + R"rawliteral(</button>
  63.  </div>
  64.  
  65.  <div class='card'>
  66.    <h3>Settings</h3>
  67.    <form onsubmit="updateSettings(event)">
  68.      Threshold: <input type='number' id='th' value=')rawliteral" + String(threshold) + R"rawliteral('><br>
  69.      Start Time (HH:MM:SS): <input type='text' id='st' value=')rawliteral" + String(startHour) + ":" + String(startMinute) + ":" + String(startSecond) + R"rawliteral('><br>
  70.      End Time (HH:MM:SS): <input type='text' id='et' value=')rawliteral" + String(endHour) + ":" + String(endMinute) + ":" + String(endSecond) + R"rawliteral('><br>
  71.      <button class='switch' type='submit'>Update</button>
  72.    </form>
  73.  </div>
  74.  
  75.  </div>
  76.  <script>
  77.  function send(cmd){
  78.    fetch('/'+cmd).then(()=>location.reload());
  79.  }
  80.  function updateSettings(e){
  81.    e.preventDefault();
  82.    const th = document.getElementById('th').value;
  83.    const st = document.getElementById('st').value;
  84.    const et = document.getElementById('et').value;
  85.    fetch(`/set?th=${th}&st=${st}&et=${et}`).then(()=>location.reload());
  86.  }
  87.  </script>
  88.  </body></html>
  89.  )rawliteral";
  90.  
  91.   server.send(200, "text/html", html);
  92. }
  93.  
  94. void handleCommand() {
  95.   String cmd = server.uri();
  96.   if (cmd == "/on") { manualOverride = true; manualState = true; }
  97.   else if (cmd == "/off") { manualOverride = true; manualState = false; }
  98.   else if (cmd == "/mode") { manualOverride = !manualOverride; }
  99.   server.sendHeader("Location", "/");
  100.   server.send(303);
  101. }
  102.  
  103. void handleSet() {
  104.   if (server.hasArg("th")) threshold = server.arg("th").toInt();
  105.   if (server.hasArg("st")) {
  106.     sscanf(server.arg("st").c_str(), "%d:%d:%d", &startHour, &startMinute, &startSecond);
  107.   }
  108.   if (server.hasArg("et")) {
  109.     sscanf(server.arg("et").c_str(), "%d:%d:%d", &endHour, &endMinute, &endSecond);
  110.   }
  111.   server.sendHeader("Location", "/");
  112.   server.send(303);
  113. }
  114.  
  115. void setup() {
  116.   Serial.begin(115200);
  117.   pinMode(RELAY_PIN, OUTPUT);
  118.   digitalWrite(RELAY_PIN, LOW);
  119.  
  120.   Serial.println("\nConnecting to Wi-Fi...");
  121.   WiFi.begin(ssid, password);
  122.   while (WiFi.status() != WL_CONNECTED) {
  123.     delay(500);
  124.     Serial.print(".");
  125.   }
  126.   Serial.println("\nWi-Fi connected: " + WiFi.localIP().toString());
  127.  
  128.   timeClient.begin();
  129.   timeClient.update();
  130.  
  131.   server.on("/", handleRoot);
  132.   server.on("/on", handleCommand);
  133.   server.on("/off", handleCommand);
  134.   server.on("/mode", handleCommand);
  135.   server.on("/set", handleSet);
  136.   server.begin();
  137.   Serial.println("Web server started!");
  138. }
  139.  
  140. void loop() {
  141.   server.handleClient();
  142.   timeClient.update();
  143.  
  144.   int ldrValue = analogRead(LDR_PIN);
  145.   int hourNow = timeClient.getHours();
  146.   bool dark = (ldrValue < threshold);
  147.   bool night = (hourNow >= startHour || hourNow < endHour);
  148.   bool autoState = (dark || night);
  149.   bool lightOn = manualOverride ? manualState : autoState;
  150.  
  151.   digitalWrite(RELAY_PIN, lightOn ? LOW : HIGH);
  152.   delay(1000);
  153. }
  154.  
Advertisement
Comments
  • wmgubuw
    2 days
    # text 0.12 KB | 0 0
    1. ⭐Make 3000$ with Swapzone Exchange Method
    2.  
    3. >>> docs.google.com/document/d/1IB4SkLZdU8hex0Kn-GyFHXSSV6kLUXhhOhxPwmEuuc4
Add Comment
Please, Sign In to add comment