wifi remote control


C++ for the Arduino ESP8266 NodeMCU to control 4 remote LEDs/Relays

#include <ESP8266WiFi.h>  // Node MCU 
const char *ssid = "*****";
const char *password = "*****";
const int LED5 = 2; // pin to control the built-in LED (2 = built-in LED on NodeMCU)
const int LED1 = 4; // pin to control output 1
const int LED2 = 5; // pin to control output 2
const int LED3 = 12; // pin to control output 3
const int LED4 = 14; // pin to control output 4
WiFiServer server(80);

void setup() {
  pinMode(LED5, OUTPUT);  digitalWrite(LED5, HIGH);
  pinMode(LED1, OUTPUT);  digitalWrite(LED1, HIGH);
  pinMode(LED2, OUTPUT);  digitalWrite(LED2, HIGH);
  pinMode(LED3, OUTPUT);  digitalWrite(LED3, HIGH);
  pinMode(LED4, OUTPUT);  digitalWrite(LED4, HIGH);
  // Serial.begin(115200);
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {delay(500);}  //Serial.println("Connecting to WiFi...");}
  // Serial.println("Connected to WiFi");
  server.begin();
  // Serial.println("Server started");
  // Serial.println(WiFi.localIP());
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {return;}

  // Wait for the client to send a request
  // Serial.println("New client");
  while(!client.available()){delay(2);}
  String request = client.readStringUntil('\r'); // Serial.println(request);
  if (request.indexOf("/LED1=ON") != -1) {
    digitalWrite(LED1, LOW);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED1 is ON</h1></body></html>");
  } else if (request.indexOf("/LED1=OFF") != -1) {
    digitalWrite(LED1, HIGH);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED1 is OFF</h1></body></html>");
  } else if (request.indexOf("/LED2=ON") != -1) {
    digitalWrite(LED2, LOW);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED2 is ON</h1></body></html>");
  } else if (request.indexOf("/LED2=OFF") != -1) {
    digitalWrite(LED2, HIGH);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED2 is OFF</h1></body></html>");
  } else if (request.indexOf("/LED3=ON") != -1) {
    digitalWrite(LED3, LOW);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED3 is ON</h1></body></html>");
  } else if (request.indexOf("/LED3=OFF") != -1) {
    digitalWrite(LED3, HIGH);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED3 is OFF</h1></body></html>");
  } else if (request.indexOf("/LED4=ON") != -1) {
    digitalWrite(LED4, LOW);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED4 is ON</h1></body></html>");
  } else if (request.indexOf("/LED4=OFF") != -1) {
    digitalWrite(LED4, HIGH);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED4 is OFF</h1></body></html>");
  } else if (request.indexOf("/LED5=ON") != -1) {
    digitalWrite(LED5, LOW);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED5 is ON</h1></body></html>");
  } else if (request.indexOf("/LED5=OFF") != -1) {
    digitalWrite(LED5, HIGH);
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>LED5 is OFF</h1></body></html>");
  } else {
    client.println("HTTP/1.1 404 Not Found");
    client.println("Content-Type: text/html");
    client.println();
    client.println("<html><body><h1>404 Not Found</h1></body></html>");
  }
  client.stop();
  // Serial.println("Client disconnected");
}

and HTML for control from a webpage.

<html>
  <head>
    <title>LED Control</title>
    <style>
      .led-display {height: 30;width: 180px;border-radius: 25px;display: inline-block;margin-right: 10px;}
    button {height: 40px;}
    </style>
      
  </head>
  </head>
  <body>
    <h1>LED Control</h1>
    <p>
      <button onclick="turnOn(1)">Turn LED1 ON</button>
      <button onclick="turnOff(1)">Turn LED1 OFF</button>
      <div id="led1-display" class="led-display" style="background-color: red;"></div>
    </p>
    <p>
      <button onclick="turnOn(2)">Turn LED2 ON</button>
      <button onclick="turnOff(2)">Turn LED2 OFF</button>
      <div id="led2-display" class="led-display" style="background-color: red;"></div>
    </p>
    <p>
      <button onclick="turnOn(3)">Turn LED3 ON</button>
      <button onclick="turnOff(3)">Turn LED3 OFF</button>
      <div id="led3-display" class="led-display" style="background-color: red;"></div>
    </p>
    <p>
      <button onclick="turnOn(4)">Turn LED4 ON</button>
      <button onclick="turnOff(4)">Turn LED4 OFF</button>
      <div id="led4-display" class="led-display" style="background-color: red;"></div>
    </p>
    <p>
      <button onclick="turnOn(5)">Turn LED5 ON</button>
      <button onclick="turnOff(5)">Turn LED5 OFF</button>
      <div id="led5-display" class="led-display" style="background-color: red;"></div>
    </p>
    <script>
      function turnOn(led) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://192.168.1.210/LED" + led + "=ON", true);
        xhr.send();
        updateDisplay(led, "green");
      }
      function turnOff(led) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://192.168.1.210/LED" + led + "=OFF", true);
        xhr.send();
        updateDisplay(led, "red");
      }
      function updateDisplay(led, color) {
        document.getElementById("led" + led + "-display").style.backgroundColor = color;
      }
    </script>
  </body>
</html>

This project was completed in 30 minutes with about 4 or 5 brief sentences given to chat.openai.com. The code worked flawlessly the first time both functionality and syntax.