#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WebServer server(80);
String htmlPage() {
return R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<title>ESP32 OTA Demo</title>
</head>
<body style="text-align:center;font-family:Arial;">
<h2>ESP32 OTA Academic Demo</h2>
<button onclick="location.href='/update'"
style="padding:15px;font-size:18px;">
Check for Firmware Update
</button>
</body>
</html>
)rawliteral";
}
void simulateOTA() {
Serial.println("Checking for firmware update...");
delay(1000);
Serial.println("Firmware found!");
delay(1000);
Serial.println("Downloading firmware...");
delay(1500);
Serial.println("Writing to flash...");
delay(1500);
Serial.println("Verifying firmware...");
delay(1000);
Serial.println("Update Successful!");
Serial.println("Restarting ESP32...");
delay(2000);
ESP.restart();
}
void handleRoot() {
server.send(200, "text/html", htmlPage());
}
void handleUpdate() {
server.send(200, "text/html", "<h3>Updating Firmware... Check Serial Monitor</h3>");
simulateOTA();
}
void setup() {
Serial.begin(115200);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/update", handleUpdate);
server.begin();
Serial.println("Web server started");
}
void loop() {
server.handleClient();
}