ESP32 WebSocket Server - Real-Time Communicatie Tutorial
WebServerWithWebSocket Voorbeeld - Real-Time Communicatie
Overzicht
Dit voorbeeld laat zien hoe u een geavanceerde multi-page webserver met real-time WebSocket-communicatie op de ESP32 kunt maken, wat bidirectionele gegevensuitwisseling tussen de browser en ESP32 mogelijk maakt.
Kenmerken
- Real-time WebSocket-communicatie voor directe bidirectionele berichtenuitwisseling
- Eenvoudige op strings gebaseerde commando’s (ping, hello, time, led on/off)
- LED-besturing via WebSocket-commando’s
- Ingebouwde HTTP-server die de WebSocket testinterface serveert
- Echo-functionaliteit voor het testen van berichttransmissie
- Monitoring van verbindingsstatus met automatische herverbinding
Benodigde Hardware
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Bibliotheek Installatie
Volg deze stappen nauwkeurig:
- Als u voor het eerst met de ESP32 werkt, raadpleeg dan de tutorial over het instellen van de omgeving voor ESP32 in de Arduino IDE.
- Verbind het 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 COM-poort.
- Open de Bibliotheekbeheerder door te klikken op het Library Manager icoon aan de linkerkant van de Arduino IDE.
- Zoek op Web Server for ESP32 en vind de mWebSockets bibliotheek van DIYables.
- Klik op de Install knop om de mWebSockets bibliotheek toe te voegen.

WebSocket Voorbeeld
- Open in Arduino IDE File Examples Web Server for ESP32 WebServerWithWebSocket om de voorbeeldcode te openen.
Code Structuur
Het project bestaat uit twee hoofdbestanden:
- websocket_html.h:
Bevat de HTML-, CSS- en JavaScript-code voor de webinterface. Dit bestand definieert de gebruikersinterface voor interactie met de ESP32 via WebSocket, inclusief knoppen voor het verzenden van commando’s, een berichtenlog en indicatoren voor de verbindingsstatus.
- WebServerWithWebSocket.ino:
Implementeert de hoofdserverlogica op de ESP32. Dit bestand zet de HTTP- en WebSocket-servers op, beheert de WiFi-verbinding, verwerkt binnenkomende WebSocket-berichten en bestuurt hardware (zoals de ingebouwde LED) op basis van ontvangen commando’s.
Circuitverbinding
Er zijn geen externe componenten nodig – dit voorbeeld gebruikt de ingebouwde LED op pin 13.
WebSocket Communicatie
Verbindingsgegevens
- Webserver Poort: 80 (HTTP)
- WebSocket Poort: 81 (WebSocket)
- Protocol: RFC 6455 compliant WebSocket
Berichttypen
De daadwerkelijke implementatie gebruikt eenvoudige stringcommando’s:
- Ping: "ping" → Reactie: "pong"
- Groet: "hello" → Reactie: "Hello from ESP32!"
- Uptime: "time" → Reactie: "Uptime: X seconds"
- LED-besturing: "led on" / "led off" → Reactie: "LED ON" / "LED OFF"
- Echo: Elke andere tekst → Reactie: "Echo: [uw bericht]"
Installatie-instructies
1. Netwerkconfiguratie
Pas de WiFi-gegevens rechtstreeks aan in het WebServerWithWebSocket.ino bestand:
2. Code uploaden en output monitoren
- Verbind uw ESP32 met de computer
- Selecteer het juiste board en de juiste poort in de Arduino IDE
- Upload de WebServerWithWebSocket.ino sketch
- Open de Seriële Monitor (9600 baud)
- Wacht op WiFi-verbinding
- Noteer zowel het HTTP- als het WebSocket-serveradres
- Als u het IP-adres niet in de Seriële Monitor ziet, druk dan op de resetknop van het ESP32-board
- Open een webbrowser en voer het IP-adres van de ESP32 in de adresbalk in (bijv. http://192.168.x.x/). U ziet de webinterface zoals hieronder:

- Klik op de "Connect" knop om via WebSocket verbinding te maken tussen de webpagina en de ESP32.
- Zodra de verbindingsstatus "Connected" toont, klikt u één voor één op de knoppen om de bidirectionele communicatie tussen de webinterface en ESP32 te testen. Het resultaat ziet er zo uit:

Webinterface Kenmerken
De HTML-interface (uit websocket_html.h) biedt:
- WebSocket-verbindingbeheer met connect/ disconnect knoppen
- Eenvoudige commando-knoppen voor ping, hello, time, LED aan/uit
- Berichtinvoerveld om aangepaste commando’s te verzenden
- Realtime berichtgeschiedenis die verstuurde en ontvangen berichten toont
- Verbindingsstatusindicator die de status van de WebSocket toont
Code Uitleg
WebSocket Server Configuratie
WebSocket Berichtverwerking
Hoofdloop met WebSocket Verwerking
JavaScript WebSocket Client
Verbindingsbeheer
Berichtverwerking
Commando’s Versturen
HTML Interface Kenmerken
WebSocket Testinterface
De bijgeleverde HTML-pagina biedt een complete WebSocket testinterface:
- Verbindingsbediening met connect/disconnect functionaliteit
- Snelle commando-knoppen voor veelgebruikte commando’s (ping, hello, time, LED-besturing)
- Berichtinvoerveld voor het verzenden van aangepaste tekstcommando’s
- Realtime berichtenlog die alle communicatie toont
- Weergave van verbindingsstatus met visuele indicatoren
Ingebouwde JavaScript Functies
De HTML-interface bevat JavaScript-functies die aansluiten bij de ESP32-commandostructuur:
Implementatienotities
Vereenvoudigde Architectuur
De daadwerkelijke implementatie gebruikt een eenvoudige aanpak:
- Gescheiden servers: WiFiServer voor HTTP en WebSocketServer voor WebSocket
- Handmatige WiFi-verbinding: standaard WiFi.begin() zonder geïntegreerd serverbeheer
- Op strings gebaseerde berichtuitwisseling: eenvoudige stringcommando’s zonder JSON-protocol
- Lambda-handlers: WebSocket event handlers gedefinieerd als inline lambda-functies
- Eenvoudige HTML-servicing: direct client.print() van HTML-inhoud uit headerbestand
Beperkingen van de Huidige Implementatie
- Geen streaming van sensordata (zoals in documentatievoorbeelden)
- Geen JSON-berichtanalyse
- Geen broadcast naar meerdere clients
- Geen uitgebreid verbindingbeheer boven connect/disconnect
- Geen heartbeat of keepalive systeem
- Geen berichtwachtrij of betrouwbaarheidssysteem
Beschikbare Commando’s
De werkende commando’s in deze implementatie:
- ping → pong
- hello → Hello from ESP32!
- time → Uptime: X seconds
- led on → LED ON (zet LED_PIN aan)
- led off → LED OFF (zet LED_PIN uit)
- Elke andere tekst → Echo: [uw bericht]
Problemen oplossen
Veelvoorkomende Problemen
WebSocket verbinding mislukt
- Controleer of poort 81 voor WebSocket toegankelijk is
- Controleer firewall-instellingen die poort 81 blokkeren
- Gebruik browser ontwikkelaarstools om WebSocket fouten te controleren
- Zorg dat het IP-adres van de ESP32 klopt
Berichten worden niet ontvangen
- Controleer de Seriële Monitor op WebSocket events en berichtontvangst
- Controleer of de commando-strings exact overeenkomen (hoofdletterongevoelig)
- Test eerst met simpele commando’s zoals "ping"
LED reageert niet
- Controleer of LED_PIN correct is gedefinieerd voor uw ESP32 board (meestal GPIO 2)
- Check Seriële Monitor voor commandoverwerking
- Controleer of "led on" en "led off" commando’s correct worden verzonden
Debug Commando’s
Gebruik deze commando’s om de WebSocket-functionaliteit te testen:
- ping - Eenvoudige connectiviteitstest
- hello - Groet-reactietest
- time - ESP32 uptime test
- led on / led off - Hardwarebesturingstest
- Elke andere tekst wordt teruggeëchood voor communicatietest
Praktische Toepassingen
Basis IoT-besturing
De huidige simpele implementatie is geschikt voor:
- Afstandsbediening van LED’s voor eenvoudige statusindicatoren
- Eenvoudige commando/antwoord systemen voor apparaatinteractie
- WebSocket connectiviteitstests tijdens ontwikkeling
- Basale demonstraties van real-time communicatie
Mogelijke Verbeteringen
Om dit voorbeeld uit te breiden voor productie, kunt u overwegen:
- JSON-berichtanalyse voor gestructureerde data
- Streaming van sensordata
- Meerdere client-verbindingen beheren
- Authenticatie en beveiligingsfuncties toevoegen
- Foutafhandeling en herverbindingslogica
Volgende Stappen
- Voeg JSON-berichtanalyse toe met de ArduinoJson bibliotheek
- Integreer echte sensoren (temperatuur, vochtigheid, etc.)
- Implementeer broadcast naar meerdere WebSocket clients
- Voeg authenticatie toe voor beveiligde toegang
- Maak mobiele app interfaces met WebSocket-verbindingen