#include <WiFi.h>
#include <WebServer.h>
#include <WebSocketsServer.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WebServer server(80);
WebSocketsServer webSocket(81);
void handleRoot() {
String html = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<title>ESP32 LED Control</title>
<script>
let socket = new WebSocket('ws://' + window.location.hostname + ':81/');
socket.onmessage = (e) => document.getElementById("status").innerHTML = e.data;
function toggleLED() { socket.send("toggle"); }
</script>
</head>
<body>
<button onclick="toggleLED()">TOGGLE LED</button>
<div id="status">LED is OFF</div>
</html>
)rawliteral";
server.send(200, "text/html", html);
}
void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) {
if (type == WStype_TEXT && strcmp((char*)payload, "toggle") == 0) {
static bool ledState = false;
ledState = !ledState;
digitalWrite(2, ledState);
webSocket.broadcastTXT("LED is " + String(ledState ? "ON" : "OFF"));
}
}
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(100);
Serial.print("OPEN THIS URL: http://");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
webSocket.begin();
webSocket.onEvent(webSocketEvent);
}
void loop() {
server.handleClient();
webSocket.loop();
}