ESP32 WebServer Bibliotheek Referentie
Overzicht
De DIYables_ESP32_WebServer bibliotheek biedt een complete oplossing voor het maken van multi-pagina webservers met WebSocket-ondersteuning op ESP32 boards.
Benodigde hardware
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Voorbeelden
Installatie
Snelle stappen
Volg deze instructies stap voor stap:
- Is dit de eerste keer dat u met ESP32 werkt? Raadpleeg dan de handleiding over het opzetten van de omgeving voor ESP32 in de Arduino IDE.
- Verbind de ESP32-board met uw computer via een USB-kabel.
- Start de Arduino IDE op uw computer.
- Selecteer het juiste ESP32 board (bijv. ESP32) en de bijbehorende COM-poort.
- Open de Bibliotheekbeheerder door te klikken op het Bibliotheekbeheerder-icoon aan de linkerzijde van de Arduino IDE.
- Zoek naar Web Server for ESP32 en vind de mWebSockets van DIYables.
- Klik op de Installeren-knop om de mWebSockets bibliotheek toe te voegen.

WebSocket Ondersteuning (Ingebouwd)
WebSocket-functionaliteit is nu direct geïntegreerd in deze bibliotheek!
De WebSocket-implementatie is gebaseerd op de uitstekende mWebSockets bibliotheek van Dawid Kurek, die speciaal is aangepast en geoptimaliseerd voor ESP32 om het gebruiksgemak te vergroten:
- Geen extra bibliotheekinstallatie nodig - WebSocket-support is ingebouwd
- Geoptimaliseerd voor ESP32 - Eenvoudige, platform-specifieke implementatie
- WiFi-compatibiliteit - Maakt gebruik van de native WiFi-stack van ESP32
- RFC 6455 compliant - Volledige ondersteuning van het WebSocket-protocol
- Realtime communicatie - Bidirectionele data-uitwisseling
Gebruik:
- Voor alles (Web Server + WebSocket): Gebruik #include <DIYables_ESP32_WebServer.h>
- Dat is alles! - WebSocket-functionaliteit is automatisch beschikbaar wanneer nodig
- Geheugenefficiënt - Ongebruikte WebSocket code wordt automatisch door de compiler geoptimaliseerd verwijderd
Credits: WebSocket-implementatie is aangepast van de mWebSockets bibliotheek (LGPL-2.1 Licentie) door Dawid Kurek, gemodificeerd en geïntegreerd voor naadloze ESP32-compatibiliteit.
Bibliotheek Klassen
DIYables_ESP32_WebServer Klasse
De hoofdklasse voor het creëren en beheren van webservers.
Constructor
Maakt een instantie van de webserver aan op de opgegeven poort (standaard: 80).
Methoden
begin()
Start de webserver en begint inkomende verbindingen te accepteren.
Alternatieve versies:
- begin(): Start alleen de server (WiFi dient door uw applicatie apart verbonden te zijn)
- begin(ssid, password): Verbind met WiFi en start server in één commando (verouderde methode)
setNotFoundHandler()
Stelt een eigen handler in voor 404 Not Found antwoorden.
printWifiStatus()
Print de WiFi verbindingsstatus en het IP-adres naar de Serial Monitor.
handleClient()
Verwerkt binnenkomende client verzoeken. Dit dient herhaaldelijk aangeroepen te worden in de main loop.
on()
Registreert een handler-functie voor een specifieke URI en HTTP-methode.
Parameters:
- uri: Het URI-pad (bijv. "/", "/led", "/api/data")
- method: HTTP-methode (GET, POST, PUT, DELETE, etc.)
- fn: Handler-functie die wordt uitgevoerd wanneer de route wordt benaderd
Opmerking: Deze bibliotheek gebruikt in plaats van on() de addRoute()-methode. Zie hieronder voor hoe dit correct gebruikt wordt.
addRoute()
Registreert een handler-functie voor een specifieke URI. Dit is de daadwerkelijke methode die in de bibliotheek wordt gebruikt.
RouteHandler Functie Formaat:
Route handlers moeten deze exacte handtekening aanhouden:
Parameters:
- client: Referentie naar WiFiClient voor het verzenden van antwoorden
- method: HTTP-methode als string ("GET", "POST", etc.)
- request: Volledige request URI
- params: Query parameters (QueryParams object)
- jsonData: JSON payload voor POST-requests (leeg voor GET)
Voorbeelden handler implementaties:
- Basale GET handler:
- JSON API handler (GET en POST):
- Query Parameters handler:
sendResponse()
Verstuurt een HTTP-antwoord naar de client.
Parameters:
- client: WiFiClient referentie (geleverd in handler functie)
- content: Inhoud van het antwoord
- contentType: MIME-type van het antwoord (standaard: "text/html")
Gebruik Voorbeelden:
Authenticatiemethoden
enableAuthentication()
Schakelt HTTP Basic Authenticatie in voor alle routes. Na inschakeling vereisen alle routes authenticatie.
Parameters:
- username: Gebruikersnaam voor authenticatie (max 31 tekens)
- password: Wachtwoord voor authenticatie (max 31 tekens)
- realm: Authenticatierealm die in de browser wordt getoond (max 63 tekens, optioneel)
Voorbeeld gebruik:
disableAuthentication()
Schakelt authenticatie uit, waardoor alle routes weer openbaar toegankelijk zijn.
Voorbeeld gebruik:
isAuthenticationEnabled()
Geeft true terug als authenticatie momenteel is ingeschakeld, anders false.
Voorbeeld gebruik:
send401()
Verstuurt een 401 Unauthorized antwoord met correcte WWW-Authenticate header. Wordt automatisch aangeroepen bij mislukte authenticatie, maar kan ook handmatig gebruikt worden in eigen handlers.
Voorbeeld gebruik:
Handmatig Antwoord Versturen
Voor meer controle over HTTP-headers en statuscodes:
Query Parameters Toegang
QueryParams Structuur
Het QueryParams object bevat geparseerde query parameters uit de URL:
Query Parameters Benaderen
Helper Functies Voor Parameters
Creëer helper-functies voor eenvoudiger parameters ophalen:
WebSocket Klassen (Ingebouwd)
WebSocketServer
Alias voor net::WebSocketServer — vereenvoudigd voor beginners.
WebSocket
Alias voor net::WebSocket — vertegenwoordigt een WebSocket verbinding.
WebSocket Methoden
begin()
Start de WebSocket server.
loop()
Verwerkt WebSocket-events. Roep dit aan in uw hoofdprogramma (loop).
onConnection()
Stelt callback in voor nieuwe WebSocket verbindingen.
onMessage()
Stelt callback in voor binnenkomende WebSocket berichten.
onClose()
Stelt callback in voor het sluiten van WebSocket verbindingen.
send()
Verstuurt een bericht via de WebSocket.
close()
Sluit de WebSocket verbinding.
Extra WebSocket Methodes
broadcastTXT()
Zend een tekstbericht naar alle verbonden WebSocket-clients.
broadcastBIN()
Zend binaire data naar alle verbonden WebSocket-clients.
connectedClients()
Geeft het aantal momenteel verbonden WebSocket-clients terug.
isListening()
Geeft true terug als de WebSocket-server actief verbindingen accepteert.
WebSocket Event Types
##### DataType Enum
- WebSocket::DataType::TEXT - Type tekstbericht
- WebSocket::DataType::BINARY - Type binaire data
##### CloseCode Enum
Standaard WebSocket afsluitcodes voor verbindingsbeëindigingsredenen.
Geavanceerd WebSocket Gebruik
Event Handler Setup
Berichten Verwerken
Sensor Data Uitzenden
HTTP Methoden
De bibliotheek ondersteunt de standaard HTTP-methoden:
- HTTP_GET
- HTTP_POST
- HTTP_PUT
- HTTP_DELETE
- HTTP_PATCH
- HTTP_HEAD
- HTTP_OPTIONS
Client-Side JavaScript Integratie
Basis WebSocket Verbinding
Commando’s Verzenden
Berichtafhandeling
WebSocket Voorbeelden
Eenvoudige Echo Server
JSON Commando Verwerking
Heartbeat Implementatie
WebSocket Probleemoplossing
Veelvoorkomende Problemen
WebSocket Verbinding Mislukt
- Controleer of de poort van de WebSocket server (standaard 81) bereikbaar is
- Controleer of het ESP32 IP-adres correct en bereikbaar is
- Gebruik browser developer tools om WebSocket verbindingsfouten te analyseren
Berichten Worden Niet Ontvangen
- Controleer de Serial Monitor voor WebSocket event logs
- Controleer of het JSON-bericht formaat klopt
- Test eerst met eenvoudige tekstberichten voordat u JSON gebruikt
- Zorg dat berichtlengtes niet de bufferlimieten overschrijden
Hoge Geheugenbelasting
- Beperk het aantal gelijktijdige WebSocket connecties
- Ruim message buffers regelmatig op
- Gebruik efficiënte String verwerking (vermijd veel concatenatie)
- Monitor beschikbare vrije heap geheugen
Debug Helpers
Performance Monitoring
De bibliotheek ondersteunt HTML-templates met placeholder vervanging:
Veelvoorkomende placeholders:
- %TEMPERATURE% - Temperatuur waarde
- %LED_STATUS% - LED status
- %QUERY_PARAM% - Query parameter waarden
Geavanceerde Web Server Functionaliteiten
CORS Ondersteuning
Schakel cross-origin aanvragen in voor webapplicaties:
JSON Response Helpers
Vereenvoudig JSON API ontwikkeling:
Validatie van Requests
Implementeer robuuste invoervalidatie:
Uitgebreide JSON Verwerking
Voor complexere JSON-afhandeling met de ArduinoJson bibliotheek:
Foutafhandeling
Standaard 404 Handler
De bibliotheek biedt een standaard 404 foutpagina. U kunt deze overschrijven:
Beste Praktijken
- Geheugenbeheer: Gebruik de F() macro voor string literals die in flash geheugen opgeslagen worden
- Niet-blokkerende Code: Houd handler functies lichtgewicht om serverblocking te voorkomen
- Beveiliging: Valideer inputparameters en sanitize output
- Prestaties: Gebruik gepaste HTTP-statuscodes en content types
- WebSocket: Beheer verbindingstoestanden correct en implementeer reconnect logica
Debugging
Schakel seriële debugging in om serveractiviteit te monitoren:
Compatibiliteit
- ESP32: Volledig ondersteund
- WiFi Bibliotheek: Vereist (meegeleverd met Arduino IDE)
- Geheugenvereisten: Minimaal 32KB flash, 2KB RAM
Beperkingen
Web Server Beperkingen
- Maximaal gelijktijdige HTTP-verbindingen: 4 (hardware beperking)
- Maximale URL-lengte: 256 tekens
- Template placeholders: Geen geneste vervangingen
WebSocket Beperkingen
- Maximale WebSocket berichtgrootte: 1KB per bericht
- Maximaal aantal gelijktijdige WebSocket verbindingen: 4-6 (afhankelijk van beschikbaar geheugen)
- Fragmenteren van berichten: automatisch afgehandeld maar kan effect hebben op prestaties
- Binaire berichtgrootte: Beperkt door RAM
- Verbindings-timeout: standaard 60 seconden (aanpasbaar)
Geheugenbeperkingen
- Minimale flash geheugen: 32KB
- Minimale RAM: 2KB voor basisfunctionaliteit
- WebSocket overhead: ca. 200-500 bytes per verbinding
- Incoming bericht buffering: ca. 1KB per actieve verbinding