#include <WiFi.h>
#include <WebServer.h>
// Replace with your network credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Assign output variables to GPIO pins
const int output26 = 26;
const int output27 = 27;
String output26State = "off";
String output27State = "off";
// Create a web server object
WebServer server(80);
// Function to handle turning GPIO 26 on
void handleGPIO26On() {
output26State = "on";
digitalWrite(output26, HIGH);
handleRoot();
}
// Function to handle turning GPIO 26 off
void handleGPIO26Off() {
output26State = "off";
digitalWrite(output26, LOW);
handleRoot();
}
// Function to handle turning GPIO 27 on
void handleGPIO27On() {
output27State = "on";
digitalWrite(output27, HIGH);
handleRoot();
}
// Function to handle turning GPIO 27 off
void handleGPIO27Off() {
output27State = "off";
digitalWrite(output27, LOW);
handleRoot();
}
// Function to handle the root URL and show the current states
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
html += "<link rel=\"icon\" href=\"data:,\">";
html += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}";
html += ".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}";
html += ".button2 { background-color: #555555; }</style></head>";
html += "<body><h1>ESP32 Web Server</h1>";
// Display GPIO 26 controls
html += "<p>GPIO 26 - State " + output26State + "</p>";
if (output26State == "off") {
html += "<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>";
} else {
html += "<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>";
}
// Display GPIO 27 controls
html += "<p>GPIO 27 - State " + output27State + "</p>";
if (output27State == "off") {
html += "<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>";
} else {
html += "<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>";
}
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// Initialize the output variables as outputs
pinMode(output26, OUTPUT);
pinMode(output27, OUTPUT);
// Set outputs to LOW
digitalWrite(output26, LOW);
digitalWrite(output27, LOW);
// Connect to Wi-Fi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set up the web server to handle different routes
server.on("/", handleRoot);
server.on("/26/on", handleGPIO26On);
server.on("/26/off", handleGPIO26Off);
server.on("/27/on", handleGPIO27On);
server.on("/27/off", handleGPIO27Off);
// Start the web server
server.begin();
Serial.println("HTTP server started");
}
void loop() {
// Handle incoming client requests
server.handleClient();
}