ESP32 WebServer Bibliotheksreferenz
Überblick
Die DIYables_ESP32_WebServer-Bibliothek bietet eine umfassende Lösung zum Erstellen von mehrseitigen Webservern mit WebSocket-Unterstützung auf ESP32-Boards.
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
| 1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Beispiele
Installation
Schnelle Schritte
Folgen Sie diesen Anweisungen Schritt für Schritt:
- Wenn dies das erste Mal ist, dass Sie den ESP32 verwenden, lesen Sie das Tutorial zur Einrichtung der Entwicklungsumgebung für ESP32 in der Arduino IDE.
- Schließen Sie das ESP32-Board mit einem USB-Kabel an Ihren Computer an.
- Öffnen Sie die Arduino IDE auf Ihrem Computer.
- Wählen Sie das passende ESP32-Board (z. B. ESP32) und den COM-Port aus.
- Öffnen Sie den Bibliotheks-Manager, indem Sie auf das Library Manager-Symbol auf der linken Seite der Arduino IDE klicken.
- Suchen Sie nach Web Server for ESP32 und finden Sie die mWebSockets von DIYables.
- Klicken Sie auf die Installieren-Schaltfläche, um die mWebSockets-Bibliothek hinzuzufügen.

WebSocket-Unterstützung (integriert)
Die WebSocket-Funktionalität ist jetzt direkt in dieser Bibliothek integriert!
Die WebSocket-Implementierung basiert auf der ausgezeichneten mWebSockets-Bibliothek von Dawid Kurek, die speziell für den ESP32 integriert und optimiert wurde, um die Nutzung zu erleichtern:
- Keine zusätzliche Bibliotheksinstallation erforderlich - WebSocket-Unterstützung ist integriert
- Für ESP32 optimiert - Vereinfachte plattformabhängige Implementierung
- WiFi-Kompatibilität - Verwendet den nativen WiFi-Stack des ESP32
- RFC 6455-konform - Vollständige Unterstützung des WebSocket-Protokolls
- Echtzeit-Kommunikation - Bidirektionaler Datenaustausch
Verwendung:
- Für alles (Webserver + WebSocket): Verwenden Sie #include <DIYables_ESP32_WebServer.h>
- Das war's! - Die WebSocket-Funktionalität ist bei Bedarf automatisch verfügbar
- Speichereffizient - Nicht verwendeter WebSocket-Code wird vom Compiler automatisch optimiert
Danksagungen: WebSocket-Implementierung, adaptiert aus der Bibliothek mWebSockets (LGPL-2.1-Lizenz) von Dawid Kurek, modifiziert und für eine nahtlose ESP32-Kompatibilität integriert.
Bibliotheksklassen
DIYables_ESP32_WebServer Klasse
Die Hauptklasse zur Erstellung und Verwaltung von Webservern.
Konstruktor
Erstellt eine Webserver-Instanz auf dem angegebenen Port (Standard: 80).
Methoden
beginnen()
Startet den Webserver und beginnt, auf eingehende Verbindungen zu lauschen.
Überladene Versionen:
- begin(): Starte nur den Server (WLAN muss separat von Ihrer Anwendung verbunden werden)
- begin(ssid, password): Mit WLAN verbinden und den Server in einem einzigen Aufruf starten (veralteter Ansatz)
setNotFoundHandler()
Legt einen benutzerdefinierten Handler für 404 Not Found-Antworten fest.
printWifiStatus()
Gibt den WLAN-Verbindungsstatus und die IP-Adresse im Serial Monitor aus.
handleClient()
Verarbeitet eingehende Client-Anfragen. Dies sollte in der Hauptschleife wiederholt aufgerufen werden.
on()
Registriert eine Handler-Funktion für eine bestimmte URI und HTTP-Methode.
Parameter:
- uri: Der URI-Pfad (z. B., "/", "/led", "/api/data")
- method: HTTP-Methode (GET, POST, PUT, DELETE, usw.)
- fn: Handler-Funktion, die ausgeführt wird, wenn die Route aufgerufen wird
Hinweis: Diese Bibliothek verwendet die Methode addRoute() anstelle von on(). Siehe unten für die korrekte Verwendung.
addRoute()
Registriert eine Handler-Funktion für eine bestimmte URI. Dies ist die tatsächlich in der Bibliothek verwendete Methode.
RouteHandler Funktionsformat:
Routen-Handler müssen dieser genauen Signatur entsprechen:
Parameter:
- client: WiFiClient-Referenz zum Senden von Antworten
- method: HTTP-Methode als Zeichenkette ("GET", "POST", usw.)
- request: Vollständige Anforderungs-URI
- params: Abfrageparameter (QueryParams-Objekt)
- jsonData: JSON-Payload für POST-Anfragen (bei GET leer)
Beispiele zur Handler-Implementierung:
- Grundlegender GET-Handler:
- JSON-API-Handler (GET und POST):
- Abfrageparameter-Handler:
Antwort senden()
Sendet eine HTTP-Antwort an den Client.
Parameter:
- client: WiFiClient-Verweis (in der Handler-Funktion bereitgestellt)
- content: Inhalt des Antwortkörpers
- contentType: MIME-Typ der Antwort (Standardwert: "text/html")
Anwendungsbeispiele:
Authentifizierungsmethoden
aktivierenAuthentifizierung()
Aktiviert die HTTP-Basisauthentifizierung für alle Routen. Sobald sie aktiviert ist, erfordern alle Routen eine Authentifizierung.
Parameter:
- username: Benutzername für die Authentisierung (max. 31 Zeichen)
- password: Passwort für die Authentisierung (max. 31 Zeichen)
- realm: Authentifizierungsbereich im Browser angezeigt (max. 63 Zeichen, optional)
Anwendungsbeispiel:
Authentifizierung deaktivieren()
Deaktiviert die Authentifizierung, wodurch alle Routen wieder öffentlich zugänglich sind.
Anwendungsbeispiel:
istAuthentifizierungAktiv()
Gibt true zurück, wenn die Authentifizierung derzeit aktiviert ist, andernfalls false.
Anwendungsbeispiel:
send401()
Sendet eine 401 Unauthorized-Antwort mit dem passenden WWW-Authenticate-Header. Dies wird automatisch aufgerufen, wenn die Authentifizierung fehlschlägt, kann aber auch manuell in benutzerdefinierten Handlern verwendet werden.
Verwendungsbeispiel:
Manuelle Antwortübermittlung
Für mehr Kontrolle über HTTP-Header und Statuscodes:
Zugriff auf Abfrageparameter
Abfrageparameter-Struktur
Das QueryParams-Objekt enthält die aus der URL geparsten Abfrageparameter:
Zugriff auf Abfrageparameter
Hilfsfunktionen für Parameter
Hilfsfunktionen erstellen, um den Zugriff auf Parameter zu erleichtern:
WebSocket-Klassen (eingebaut)
WebSocket-Server
Alias für net::WebSocketServer – vereinfacht für Anfänger.
WebSocket
Alias für net::WebSocket – repräsentiert eine WebSocket-Verbindung.
WebSocket-Methoden
beginnen()
Startet den WebSocket-Server.
Schleife()
Verarbeiten Sie WebSocket-Ereignisse. Rufen Sie dies in Ihrer Hauptschleife auf.
beiVerbindung()
Legt den Callback für neue WebSocket-Verbindungen fest.
onMessage()
Legt einen Callback für eingehende WebSocket-Nachrichten fest.
beimSchließen()
Legt einen Callback für das Schließen von WebSocket-Verbindungen fest.
senden()
Sendet eine Nachricht über das WebSocket.
schließen()
Schließt die WebSocket-Verbindung.
Weitere WebSocket-Methoden
broadcastTXT()
Sendet eine Textnachricht an alle verbundenen WebSocket-Clients.
broadcastBIN()
Überträgt Binärdaten an alle verbundenen WebSocket-Clients.
verbundeneKunden()
Gibt die Anzahl der aktuell verbundenen WebSocket-Clients zurück.
istZuhören()
Gibt true zurück, wenn der WebSocket-Server aktiv auf Verbindungen hört.
WebSocket-Ereignistypen
Datentyp-Enum
- WebSocket::DataType::TEXT - Textnachrichtentyp
- WebSocket::DataType::BINARY - Binärdatentyp
CloseCode Aufzählung
Standard-WebSocket-Schließcodes für Gründe der Verbindungsbeendigung.
Fortgeschrittene WebSocket-Nutzung
Einrichtung des Ereignishandlers
Nachrichtenverarbeitung
Sensordatenübertragung
HTTP-Methoden
Die Bibliothek unterstützt Standard-HTTP-Methoden:
- HTTP_GET
- HTTP_POST
- HTTP_PUT
- HTTP_DELETE
- HTTP_PATCH
- HTTP_HEAD
- HTTP_OPTIONS
JavaScript-Integration auf der Clientseite
Grundlegende WebSocket-Verbindung
Befehle senden
Nachrichtenverarbeitung
WebSocket-Beispiele
Einfacher Echo-Server
JSON-Befehlsverarbeitung
Herzschlag-Implementierung
WebSocket-Fehlerbehebung
Häufige Probleme
WebSocket-Verbindung fehlgeschlagen
- Stelle sicher, dass der WebSocket-Server-Port (Standard: 81) erreichbar ist
- Stelle sicher, dass die IP-Adresse des ESP32 korrekt ist und erreichbar ist
- Verwende die Entwicklertools des Browsers, um WebSocket-Verbindungsfehler zu überprüfen
Nachrichten werden nicht empfangen
- Überprüfen Sie den seriellen Monitor auf WebSocket-Ereignisprotokolle.
- Vergewissern Sie sich, dass das JSON-Nachrichtenformat korrekt ist.
- Testen Sie mit einfachen Textnachrichten, bevor Sie JSON verwenden.
- Stellen Sie sicher, dass die Länge der Nachricht die Puffergrenzen nicht überschreitet.
Hoher Speicherverbrauch
- Begrenze die Anzahl gleichzeitiger WebSocket-Verbindungen
- Leere regelmäßig Nachrichtenpuffer
- Verwende effiziente String-Verarbeitung (vermeide häufige Verkettung)
- Überwache den freien Heap-Speicher
Debug-Hilfen
Leistungsüberwachung
Die Bibliothek unterstützt HTML-Vorlagen mit Platzhalterersetzung:
Häufige Platzhalter:
- %TEMPERATURE% - Temperaturwert
- %LED_STATUS% - LED-Status
- %QUERY_PARAM% - Abfrageparameter-Werte
Fortgeschrittene Webserver-Funktionen
CORS-Unterstützung
Aktivieren Sie Cross-Origin-Anfragen für Webanwendungen:
Hilfsfunktionen für JSON-Antworten
JSON-API-Entwicklung vereinfachen:
Validierung der Anfrage
Robuste Eingabevalidierung implementieren:
Erweiterte JSON-Verarbeitung
Für die komplexe JSON-Verarbeitung mit der ArduinoJson-Bibliothek:
Fehlerbehandlung
Standard-404-Handler
Die Bibliothek bietet eine Standard-404-Fehlerseite an. Sie können sie überschreiben:
Beste Praktiken
- Speicherverwaltung: Verwenden Sie das F()-Makro für Zeichenketten-Literale, die im Flash-Speicher gespeichert sind
- Nicht-blockierender Code: Halten Sie Handler-Funktionen leichtgewichtig, um den Server nicht zu blockieren
- Sicherheit: Eingabeparameter validieren und Ausgabe bereinigen
- Performance: Verwenden Sie geeignete HTTP-Statuscodes und Content-Typen
- WebSocket: Verbindungszustände ordnungsgemäß behandeln und eine Wiederverbindungslogik implementieren
Fehlersuche
Serielles Debugging aktivieren, um die Serveraktivität zu überwachen:
Kompatibilität
- ESP32: Vollständig unterstützt
- WiFi-Bibliothek: Erforderlich (im Arduino-IDE enthalten)
- Speicheranforderungen: Mindestens 32 KB Flash, 2 KB RAM
Einschränkungen
Beschränkungen des Webservers
- Maximale gleichzeitige HTTP-Verbindungen: 4 (Hardwareeinschränkung)
- Maximale URL-Länge: 256 Zeichen
- Vorlagen-Platzhalter: Keine verschachtelten Ersetzungen
WebSocket-Beschränkungen
- Maximale Größe einer WebSocket-Nachricht: 1 KB pro Nachricht
- Maximale gleichzeitige WebSocket-Verbindungen: 4–6 (je nach verfügbarem Speicher)
- Fragmentierte Nachrichten: Automatisch verarbeitet, kann jedoch die Leistung beeinträchtigen
- Binärnachrichten-Größe: Beschränkt durch den verfügbaren Arbeitsspeicher
- Verbindungs-Timeout: Standard 60 Sekunden (konfigurierbar)
Speicherbeschränkungen
- Benötigter Flash-Speicher: 32 KB
- Benötigter RAM: 2 KB für grundlegende Funktionalität
- WebSocket-Overhead: ~200–500 Bytes pro Verbindung
- Nachrichtenpuffer: ~1 KB pro aktive Verbindung