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.