Ein umfassende ESP32-Framework für WLAN-Management mit Web-Interface, die robuste Verbindungsverwaltung, erweiterbares Web-UI und persistente Datenspeicherung bietet.
- Intelligente WLAN-Verbindung: 3-Versuch-System mit automatischem Fallback zu AP-Modus
- Reset-Button Support: Hardware-Reset über GPIO 0 (3s = WLAN Reset, 10s = Vollreset)
- Automatischer Reconnect: Überwachung und Wiederherstellung verlorener Verbindungen
- Erweiterbares Web-Interface: Einfaches Hinzufügen eigener Konfigurationsseiten
- Custom Data API: Persistente Speicherung verschiedener Datentypen
- Debug-Modus: Ein/ausschaltbare Debug-Ausgaben für Entwicklung
- OTA-Updates: Firmware-Updates über Web-Interface
- Responsive Design: Modernes Web-UI für Desktop und Mobile
- Öffnen Sie Arduino IDE
- Gehen Sie zu Sketch > Include Library > Manage Libraries
- Suchen Sie nach "WiFiWebManager"
- Klicken Sie auf Install
- Laden Sie die neueste Version von Releases
- Entpacken Sie die ZIP-Datei in Ihren Arduino/libraries Ordner
- Starten Sie Arduino IDE neu
Diese Framework benötigt:
- ESPAsyncWebServer (wird automatisch installiert)
- AsyncTCP (Abhängigkeit von ESPAsyncWebServer)
#include <WiFiWebManager.h>
WiFiWebManager wifiManager;
void setup() {
Serial.begin(115200);
// Optional: Debug-Modus aktivieren
wifiManager.setDebugMode(true);
// Optional: Standard-Hostname setzen
wifiManager.setDefaultHostname("MeinESP32");
wifiManager.begin();
}
void loop() {
wifiManager.loop(); // WICHTIG: Muss aufgerufen werden!
}Nach dem Start ist das Web-Interface verfügbar unter:
- WLAN-Modus: IP-Adresse des ESP32
- AP-Modus: http://192.168.4.1
/- Status und Übersicht (kann vom Inhalt angepasst werden)/wlan- WLAN-Konfiguration (fix)/ntp- NTP-Einstellungen (fix)/update- Firmware-Update (fix)/reset- Reset-Optionen (fix)
// Einfache GET-Seite
wifiManager.addPage("Meine Seite", "/custom",
[](AsyncWebServerRequest *request) -> String {
return "<h1>Benutzerdefinierte Seite</h1><p>Ihr Inhalt hier</p>";
}
);
// Seite mit GET und POST
wifiManager.addPage("Einstellungen", "/settings",
// GET Handler
[](AsyncWebServerRequest *request) -> String {
String html = "<h1>Einstellungen</h1>";
html += "<form action='/settings' method='POST'>";
html += "<input name='wert' placeholder='Wert eingeben'>";
html += "<input type='submit' value='Speichern'>";
html += "</form>";
return html;
},
// POST Handler
[](AsyncWebServerRequest *request) -> String {
String wert = request->getParam("wert", true)->value();
// Wert verarbeiten...
return "<p>Gespeichert: " + wert + "</p><a href='/settings'>Zurück</a>";
}
);// Verschiedene Datentypen speichern
wifiManager.saveCustomData("deviceName", "Sensor1"); // String
wifiManager.saveCustomData("interval", 5000); // int
wifiManager.saveCustomData("enabled", true); // bool
wifiManager.saveCustomData("calibration", 1.25f); // float
// Daten laden mit Default-Werten
String name = wifiManager.loadCustomData("deviceName", "Standard");
int interval = wifiManager.loadCustomDataInt("interval", 1000);
bool enabled = wifiManager.loadCustomDataBool("enabled", false);
float calib = wifiManager.loadCustomDataFloat("calibration", 1.0);
// Existenz prüfen und löschen
if (wifiManager.hasCustomData("oldValue")) {
wifiManager.removeCustomData("oldValue");
}Verbinden Sie einen Taster zwischen GPIO 0 und GND:
- 3-10 Sekunden drücken: Nur WLAN-Daten löschen
- >10 Sekunden drücken: Kompletter Werks-Reset
// Debug-Modus aktivieren (nur über Code möglich)
wifiManager.setDebugMode(true);
// Status abfragen
bool isDebugActive = wifiManager.getDebugMode();void begin(); // Initialisierung
void loop(); // Hauptschleife (in loop() aufrufen!)
void reset(); // Software-Resetvoid setDefaultHostname(const String& hostname); // Standard setzen
String getHostname(); // Aktuellen abrufenvoid setDebugMode(bool enabled); // Debug ein/aus
bool getDebugMode(); // Status abrufenvoid addPage(const String& titel, const String& pfad,
ContentHandler getHandler,
ContentHandler postHandler = nullptr);
void removePage(const String& pfad);// Speichern
void saveCustomData(const String& key, const String& value);
void saveCustomData(const String& key, int value);
void saveCustomData(const String& key, bool value);
void saveCustomData(const String& key, float value);
// Laden
String loadCustomData(const String& key, const String& defaultValue = "");
int loadCustomDataInt(const String& key, int defaultValue = 0);
bool loadCustomDataBool(const String& key, bool defaultValue = false);
float loadCustomDataFloat(const String& key, float defaultValue = 0.0);
// Verwaltung
bool hasCustomData(const String& key);
void removeCustomData(const String& key);- WICHTIG:
wifiManager.loop()muss in derloop()Funktion aufgerufen werden - Custom Data: Verwenden Sie keine reservierten Schlüssel (
ssid,pwd,hostname, etc.) - Performance: Debug-Modus nur bei Bedarf aktivieren
- Reset-Button: GPIO 0 ist standardmäßig der Boot-Button auf den meisten ESP32-Boards
Siehe /examples Ordner für vollständige Beispiele:
Basic- Grundlegende NutzungCustomPages- Eigene Web-SeitenSensorData- IoT-Sensor mit KonfigurationSmartSwitch- Smart Home Gerät
MIT License - siehe LICENSE für Details.
Beiträge sind willkommen! Bitte lesen Sie CONTRIBUTING.md für Details.
- Issues: GitHub Issues
- Diskussionen: GitHub Discussions
- Hardware: ESP32 (alle Varianten)
- RAM: ~50KB für Framework + Webserver
- Flash: ~200KB für Code + Web-Assets
- Arduino Core: ESP32 v2.0.0 oder höher
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
WiFiWebManager() |
Konstruktor - initialisiert Reset-Button (GPIO 0) | - | - |
begin() |
Startet WiFiWebManager, verbindet WiFi oder startet AP | - | void |
loop() |
Muss in main loop() aufgerufen werden | - | void |
reset() |
Führt kompletten Werks-Reset durch | - | void |
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
setDefaultHostname(hostname) |
Setzt Standard-Hostname aus Code | String hostname |
void |
getHostname() |
Gibt aktuellen Hostname zurück | - | String |
clearWiFiConfig() |
Löscht nur WiFi-Daten (SSID/Passwort) | - | void |
clearAllConfig() |
Löscht alle Einstellungen (Werks-Reset) | - | void |
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
addPage(title, path, getHandler) |
Fügt GET-only Seite hinzu | String title, String path, ContentHandler getHandler |
void |
addPage(title, path, getHandler, postHandler) |
Fügt Seite mit GET und POST hinzu | String title, String path, ContentHandler getHandler, ContentHandler postHandler |
void |
removePage(path) |
Entfernt Custom Page | String path |
void |
| Funktion | Beschreibung | Parameter | Einschränkungen |
|---|---|---|---|
saveCustomData(key, value) |
Speichert String-Wert | String key, String value |
Key max. 14 Zeichen |
saveCustomData(key, value) |
Speichert Integer-Wert | String key, int value |
Key max. 14 Zeichen |
saveCustomData(key, value) |
Speichert Boolean-Wert | String key, bool value |
Key max. 14 Zeichen |
saveCustomData(key, value) |
Speichert Float-Wert | String key, float value |
Key max. 14 Zeichen |
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
loadCustomData(key, defaultValue) |
Lädt String-Wert | String key, String defaultValue = "" |
String |
loadCustomDataInt(key, defaultValue) |
Lädt Integer-Wert | String key, int defaultValue = 0 |
int |
loadCustomDataBool(key, defaultValue) |
Lädt Boolean-Wert | String key, bool defaultValue = false |
bool |
loadCustomDataFloat(key, defaultValue) |
Lädt Float-Wert | String key, float defaultValue = 0.0 |
float |
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
hasCustomData(key) |
Prüft ob Key existiert | String key |
bool |
removeCustomData(key) |
Löscht gespeicherten Wert | String key |
void |
getCustomDataKeys() |
Gibt alle Custom Keys zurück | - | std::vector<String> |
| Funktion | Beschreibung | Parameter | Rückgabe |
|---|---|---|---|
setDebugMode(enabled) |
Aktiviert/deaktiviert Debug-Ausgaben | bool enabled |
void |
getDebugMode() |
Gibt Debug-Status zurück | - | bool |
- Maximale Länge: 14 Zeichen
- Reservierte Keys (können nicht verwendet werden):
ssid,pwd,hostnameuseStaticIP,ip,gateway,subnet,dnsntpEnable,ntpServer,bootAttempts
- Max. 3 Verbindungsversuche bei WiFi-Fehlern
- Nach 3 fehlgeschlagenen Versuchen → automatischer AP-Modus
- Erfolgreiche Verbindung setzt Counter zurück
| Druckdauer | Aktion |
|---|---|
| 3-10 Sekunden | Nur WiFi-Daten löschen |
| >10 Sekunden | Kompletter Werks-Reset |
#include "WiFiWebManager.h"
WiFiWebManager wwm;
// Custom Page Handler
String handleMyPage(AsyncWebServerRequest *request) {
return "<h1>Meine Seite</h1><p>Status: " +
wwm.loadCustomData("status", "OK") + "</p>";
}
void setup() {
Serial.begin(115200);
// Hostname setzen
wwm.setDefaultHostname("MeinESP32");
// Debug aktivieren
wwm.setDebugMode(true);
// Custom Page hinzufügen
wwm.addPage("Status", "/status", handleMyPage);
// Custom Data speichern (Key max. 14 Zeichen!)
wwm.saveCustomData("temp_max", 25.5f);
wwm.saveCustomData("alerts", true);
wwm.saveCustomData("count", 42);
wwm.begin();
}
void loop() {
wwm.loop();
// Custom Data laden
float maxTemp = wwm.loadCustomDataFloat("temp_max", 20.0f);
bool alertsOn = wwm.loadCustomDataBool("alerts", false);
}Das System stellt automatisch folgende Seiten bereit:
- / - Home/Status-Übersicht
- /wlan - WiFi-Konfiguration
- /ntp - NTP-Zeitserver Einstellungen
- /update - OTA Firmware-Update
- /reset - Reset-Optionen