C
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
// WLAN-Zugangsdaten
const char* ssid = "WLAN-Name";
const char* password = "WLAN-Passwort";
// GPIO-Pin für den Reset-Button des PCs
const int resetPin = 12;
// Webserver-Instanz
ESP8266WebServer server(80);
void setup() {
// Serial-Verbindung für die Ausgabe von Debug-Informationen
Serial.begin(115200);
// Verbindung zum WLAN herstellen
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WLAN-Verbindung hergestellt");
// GPIO-Pin für den Reset-Button als Ausgang konfigurieren
pinMode(resetPin, OUTPUT);
// Webserver starten
server.begin();
server.on("/", handleRoot);
server.on("/reset", handleReset);
server.on("/resetconfirm", handleResetConfirm);
}
void loop() {
// Webserver-Anfragen verarbeiten
server.handleClient();
}
void handleRoot() {
// Senden der HTML-Seite mit dem Button zum Zurücksetzen des PCs
String html = R"(
<!DOCTYPE html>
<html>
<head>
<title>Server-Reset</title>
</head>
<body>
<h1>Server-Reset</h1>
<p>Button tippen, um den Server neuzustarten:</p>
<form action="/reset" method="post">
<input type="submit" value="Server Neustart">
</form>
</body>
</html>
)";
server.send(200, "text/html", html);
}
void handleReset() {
// Bestätigungsmeldung vom Benutzer abfragen
String html = R"(
<!DOCTYPE html>
<html>
<head>
<title>Wirklich Neustarten?</title>
</head>
<body>
<h1>Wirklich Neustarten?</h1>
<p>Sicher?</p>
<form action="/resetconfirm" method="post">
<input type="submit" value="Ja, jetzt mach endlich!">
</form>
<p><a href="/">Nope</a></p>
</body>
</html>
)";
server.send(200, "text/html", html);
}
void handleResetConfirm() {
// Reset-Signal an den PC senden
digitalWrite(resetPin, LOW);
delay(5000);
digitalWrite(resetPin, HIGH);
// Bestätigungsmeldung an den Benutzer senden
String html = R"(
<!DOCTYPE html>
<html>
<head>
<title>Reset erfolgreich</title>
</head>
<body>
<h1>Reset erfolgreich</h1>
<p>Reset erfolgreich. Dauert etwa 2 Minuten.</p>
</body>
</html>
)";
server.send(200, "text/html", html);
// Log-Ausgabe auf der seriellen Konsole
Serial.println("Server-Reset wurde ausgeführt!");
}
Alles anzeigen
----->
----->
und im LOG (damit ich das hier beim Testen per Fernwartung verfolgen kann).
Läuft mit den vorerst angegebenen 5 Sekunden Verzögerung.
Das sollte also laufen. Code mit Googles-Gemini erstellt.
Ich mußte nur die Bibliotheken wechseln. Spezifischer für den ESP8266.
Dann gab es beim ersten Durchlauf noch ein Problem, dass der Code kein "Ende" gefunden hat. Der confirmrest lief ins nichts.
Nach kurzem Hinweis darauf wurde auch das korrigiert.