DIYables ESP32 WebApps Library API Referentie - Complete Documentatie
Overzicht
De DIYables ESP32 WebApps Library biedt een uitgebreide modulaire oplossing voor het maken van WebSocket-gebaseerde webapplicaties op de ESP32. De bibliotheek bevat meerdere vooraf gebouwde webapplicaties en een flexibel framework voor het creëren van eigen toepassingen.
De bibliotheek gebruikt een modulaire architectuur, waarbij u alleen de webapplicaties toevoegt die u nodig heeft, wat geheugen spaart en de prestaties verbetert.
Kenmerken
- Modulaire architectuur: Voeg alleen de webapps toe die u nodig heeft om het geheugenverbruik te optimaliseren
- Geheugenefficiënt: Elke webapp kan onafhankelijk in- of uitgeschakeld worden
- Meer dan 11 kant-en-klare webapplicaties: Volledige ESP32-besturing zonder webprogrammeervaardigheden
- Framework voor eigen webapplicaties: Maak uw eigen applicaties met het basis klassensysteem
- Realtime communicatie: WebSocket-gebaseerd voor directe updates
- Responsief ontwerp: Werkt op desktop, tablet en mobiele apparaten
- Eenvoudige integratie: Simpele callback-gebaseerde API
- Ondersteuning voor meerdere apps: Meerdere webapps simultaan toevoegen mogelijk
Kernklassen
DIYablesWebAppServer
De hoofdserverklasse die webapplicaties, HTTP-verzoeken en WebSocket-communicatie beheert.
Constructor
Maakt een webapp-server instantie aan.
- httpPort: Poort voor de HTTP-server (standaard: 80)
- websocketPort: Poort voor de WebSocket-server (standaard: 81)
Methoden
Setup en Connectie
Initialiseert de netwerkverbinding (voor Ethernet of vooraf geconfigureerde verbindingen) en start de webserver.
- Retourneert: true als succesvol, false bij mislukking
- Gebruik: Voor toekomstige Ethernet-ondersteuning of wanneer WiFi-credentials vooraf ingesteld zijn
Initialiseert WiFi-verbinding en start de webserver.
- ssid: WiFi-netwerknaam
- password: WiFi-wachtwoord
- Retourneert: true als succesvol, false bij mislukking
- Gebruik: Standaard WiFi-verbinding met credentials
Behandelt HTTP-verzoeken en WebSocket-communicatie. Moet aangeroepen worden in de hoofdloop.
Geeft true terug als WiFi verbonden is.
Geeft het IP-adres van de Arduino als string terug.
Applicatiebeheer
Voegt een webapplicatie toe aan de server.
- app: Pointer naar een webapplicatie-instantie
Verwijdert een webapplicatie via de URL-pad.
- path: URL-pad van de applicatie (bijv. "/chat")
Haal een webapplicatie op via het URL-pad.
- path: URL-pad van de applicatie
- Retourneert: Pointer naar de app of nullptr als niet gevonden
Stelt de 404 Not Found-pagina in (optioneel).
- page: Instantie van de 404-pagina
Gespecialiseerde App Toegang
Haalt de digitale pinnen pagina op als deze toegevoegd is.
- Retourneert: Pointer naar de digitale pinnen pagina of nullptr
Haalt de slider pagina op als deze toegevoegd is.
- Retourneert: Pointer naar de slider pagina of nullptr
Haalt de joystick pagina op als deze toegevoegd is.
- Retourneert: Pointer naar de joystick pagina of nullptr
Basisklassen
DIYablesWebAppPageBase
Abstracte basisklasse waar alle webapplicaties van erven. Biedt algemene functionaliteit voor HTTP-verwerking, WebSocket-communicatie en paginabeheer.
Constructor
Maakt een basispagina-instantie aan met het opgegeven URL-pad.
- pagePath: URL-pad voor de pagina (bijv. "/web-joystick")
Virtuele Methoden (Moeten geïmplementeerd worden door afgeleide klassen)
Verwerkt HTTP-verzoeken voor deze pagina. Pure virtuele methode.
- client: Web client interface voor versturen van response
Verwerkt WebSocket-berichten voor deze pagina. Pure virtuele methode.
- ws: WebSocket connectie interface
- message: Ontvangen berichtinhoud
- length: Lengte van het bericht
Geeft een identificatiestring van de pagina terug, gebruikt in verbindingsinfo-weergave. Pure virtuele methode.
- Retourneert: Pagina-informatie string (bijv. "🕹️ Web Joystick: ")
Geeft HTML terug voor de navigatieknop op de homepagina. Pure virtuele methode.
- Retourneert: HTML-string voor navigatiekaart
Virtuele Methoden (Optionele overrides)
Wordt aangeroepen wanneer een nieuwe WebSocket-verbinding tot stand komt.
- ws: Nieuwe WebSocket-verbinding
Wordt aangeroepen wanneer een WebSocket-verbinding wordt gesloten.
- ws: Gesloten WebSocket-verbinding
Algemene Methoden
Geeft het URL-pad terug voor deze pagina.
- Retourneert: Padstring
Controleert of de pagina momenteel is ingeschakeld.
- Retourneert: true als ingeschakeld, false als uitgeschakeld
Schakelt de pagina in of uit.
- enable: true om in te schakelen, false om uit te schakelen
Hulpmethoden
Verzendt standaard HTTP-headers naar de client.
- client: Web client interface
- contentType: MIME-type (standaard: "text/html")
Verzendt een bericht naar een specifieke WebSocket-client.
- ws: Doel WebSocket-verbinding
- message: Te verzenden bericht
Zend een bericht uit naar alle verbonden WebSocket-clients.
- message: Bericht om uit te zenden
Verzendt grote HTML-inhoud met chunked transfer encoding.
- client: Web client interface
- html: HTML-inhoud om te verzenden
Voorbeeld Gebruik
Webapplicatie Klassen
DIYablesHomePage
Centraal navigatiepunt met links naar alle ingeschakelde applicaties.
Constructor
URL Pad
- Pad: / (root)
DIYablesWebChatPage
Interactieve chatinterface voor tweerichtingscommunicatie met Arduino.
Constructor
URL Pad
- Pad: /webchat
Methoden
Stelt callback in voor binnenkomende chatberichten.
Verzendt een bericht naar de webchat-interface.
DIYablesWebMonitorPage
Webgebaseerde seriële monitor voor realtime output en commando-invoer.
Constructor
URL Pad
- Pad: /webmonitor
Methoden
Stelt callback in voor binnenkomende monitorberichten.
Verzendt een bericht naar de webmonitor-interface.
DIYablesWebDigitalPinsPage
Besturing en monitoring van digitale pinnen 0-13 via webinterface.
Constructor
URL Pad
- Pad: /webdigitalpins
Methoden
Schakelt een pin in voor webbesturing.
- pin: Pinnummer (0-13)
- mode: WEB_PIN_OUTPUT of WEB_PIN_INPUT
Stelt callback in voor schrijfoperaties op pinnen (output pins).
Stelt callback in voor leesoperaties op pinnen (input pins).
Stelt callback in voor wijzigingen in pinmode.
Update pinstatus realtime voor webclients.
DIYablesWebSliderPage
Dubbele slider besturing voor analoge/PWM toepassingen.
Constructor
URL Pad
- Pad: /webslider
Methoden
Stelt callback in voor schuifwaarde veranderingen vanaf het web.
- Parameters: slider1 (0-255), slider2 (0-255)
Stelt callback in wanneer webclient huidige waarden opvraagt.
Verzendt sliderwaarden naar de webinterface.
DIYablesWebJoystickPage
2D joystick besturing voor robotica en positioneringsprojecten.
Constructor
- autoReturn: Of de joystick automatisch teruggaat naar midden
- sensitivity: Minimale beweging in procenten om updates te triggeren
URL Pad
- Pad: /webjoystick
Methoden
Stelt callback in voor joystickbeweging vanaf het web.
- Parameters: x (-100 tot 100), y (-100 tot 100)
Stelt callback in wanneer webclient huidige positie opvraagt.
Verzendt joystickpositie naar webinterface.
Stelt in of joystick automatisch terugkeert.
Stelt bewegingsgevoeligheid in (percentage).
DIYablesWebPlotterPage
Realtime datavisualisatie met ondersteuning voor meerdere dataseries.
Constructor
URL Pad
- Pad: /webplotter
Methoden
Stelt de titel van de plot in.
Stelt de assenlabels in.
Schakelt automatische schaling van de Y-as aan of uit.
Stelt maximaal aantal weer te geven datapunten in.
Voegt een datapunt toe aan een serie.
Leegt alle data uit de plot.
DIYablesNotFoundPage
Optionale 404-foutpagina voor betere gebruikerservaring.
Constructor
Basis Voorbeeld Gebruik
Overzicht Webapplicaties
Home Pagina
- URL: http://[esp32-ip]/
- Doel: Centraal navigatiepunt
- Kenmerken: Links naar alle ingeschakelde applicaties, verbindingsstatus
WebChat Applicatie
- URL: http://[esp32-ip]/webchat
- Doel: Tweerichtings communicatie-interface
- Kenmerken: Realtime berichten, berichtgeschiedenis, WebSocket-status
Web Monitor
- URL: http://[esp32-ip]/webmonitor
- Doel: Vervanging seriële monitor
- Kenmerken: Realtime seriële output, commando-invoer, dark theme
Web Digital Pins Control
- URL: http://[esp32-ip]/webdigitalpins
- Doel: Besturing digitale pinnen 0-13
- Kenmerken: Individuele pinbediening, bulkoperaties, realtime status
Web Slider Control
- URL: http://[esp32-ip]/webslider
- Doel: Dubbele analoge/PWM-besturing
- Kenmerken: Twee onafhankelijke sliders (0-255), preset waarden, realtime feedback
Web Joystick Control
- URL: http://[esp32-ip]/webjoystick
- Doel: 2D positiecontrole voor robots/voertuigen
- Kenmerken: Touch/muisbesturing, coördinatenweergave, gevoeligheidsaanpassing
Web Plotter
- URL: http://[esp32-ip]/webplotter
- Doel: Realtime datavisualisatie
- Kenmerken: Meerdere dataseries, autoscaling, configureerbare titels en assen
WebSocket Communicatie
Alle applicaties gebruiken WebSocket op poort 81 voor realtime communicatie:
- WebSocket URL: ws://[esp32-ip]:81
- Verbinding: Automatisch opnieuw verbinden bij verlies
- Protocol: Tekstgebaseerd berichtenformaat
Berichtformaten
WebChat Berichten
- Van Web: Direct tekstbericht
- Naar Web: Direct tekstbericht
Web Monitor Berichten
- Van Web: Direct tekstbericht
- Naar Web: Direct tekstbericht
Web Digital Pin Berichten
- Van Web: JSON formaat: {"pin": 13, "state": 1}
- Naar Web: JSON formaat: {"pin": 13, "state": 1}
Web Slider Berichten
- Van Web: JSON formaat: {"slider1": 128, "slider2": 255}
- Naar Web: JSON formaat: {"slider1": 128, "slider2": 255}
Web Joystick Berichten
- Van Web: JSON formaat: {"x": 50, "y": -25}
- Naar Web: JSON formaat: {"x": 50, "y": -25}
Web Plotter Berichten
- Van Web: Niet van toepassing (alleen display)
- Naar Web: JSON formaat: {"series": "temp", "x": 10.5, "y": 23.4}
Foutafhandeling
De bibliotheek bevat automatische foutafhandeling voor:
- WiFi-verbinding mislukt
- WebSocket-verbinding verbroken
- Ongeldige berichtformaten
- Limiet op clientverbindingen
Geheugengebruik
Voordelen Modulaire Architectuur: Alleen de webapplicaties toevoegen die u nodig heeft, beperkt het geheugengebruik.
Geschat geheugengebruik per component:
- DIYablesWebAppServer: ~8KB Flash, ~2KB RAM
- DIYablesHomePage: ~3KB Flash, ~1KB RAM
- DIYablesWebChatPage: ~6KB Flash, ~1.5KB RAM
- DIYablesWebMonitorPage: ~5KB Flash, ~1.5KB RAM
- DIYablesWebDigitalPinsPage: ~8KB Flash, ~2KB RAM
- DIYablesWebSliderPage: ~6KB Flash, ~1.5KB RAM
- DIYablesWebJoystickPage: ~7KB Flash, ~1.5KB RAM
- DIYablesWebPlotterPage: ~10KB Flash, ~2KB RAM
- WebSocket Buffer: ~1KB RAM per verbinding
Totaal als alle apps ingeschakeld zijn: ~53KB Flash, ~12KB RAM
Minimale setup (server + home + 1 app): ~17KB Flash, ~4.5KB RAM
Browsercompatibiliteit
Ondersteunde browsers:
- Chrome 50+
- Firefox 45+
- Safari 10+
- Edge 79+
- Mobiele browsers (iOS Safari, Chrome Mobile)
Beveiligingsnotities
- Geen authenticatie geïmplementeerd (alleen geschikt voor lokale netwerken)
- Gebruik alleen in vertrouwde netwerken
- Overweeg authenticatie toe te voegen voor publieke implementaties
Problemen en Oplossingen
Veelvoorkomende problemen
- Kan niet verbinden met WiFi
- Controleer SSID en wachtwoord
- Verifieer dat netwerk 2.4GHz is (geen 5GHz)
- Controleer signaalsterkte
- WebSocket verbinding mislukt
- Controleer of IP-adres correct is
- Controleer firewall-instellingen
- Probeer een andere browser
- Hoog geheugengebruik
- Schakel ongebruikte applicaties uit
- Beperk aantal gelijktijdige verbindingen
- Herstart ESP32 bij geheugenfragmentatie
- Trage respons
- Controleer WiFi signaalsterkte
- Verlaag frequentie van WebSocket-berichten
- Gebruik kortere callbackfuncties
Voorbeeldprojecten
Voorbeeldapplicaties
De DIYables ESP32 WebApps Library bevat uitgebreide voorbeelden gericht op het ESP32 educatieve platform:
Beschikbare voorbeelden
- Chat Voorbeeld: Tweezijdige communicatie-interface
- WebMonitor Voorbeeld: Vervanging seriële monitor met extra functies
- WebDigitalPins Voorbeeld: Bestur alle digitale pinnen met visuele feedback
- WebSlider Voorbeeld: Dubbele analoge/PWM besturing met presets
- WebJoystick Voorbeeld: 2D positiecontrole voor robotica projecten
- MultipleWebApps Voorbeeld: Alle applicaties tegelijkertijd actief
Zie de map examples/ voor complete projecten en de map docs/ voor gedetailleerde installatie-instructies.
Platform Abstractie Interfaces
De DIYables ESP32 WebApps Library gebruikt een platformabstractielaag met interfaces die ondersteuning bieden voor meerdere hardwareplatforms. Deze interfaces scheiden de kern WebApp-functionaliteit van platformspecifieke implementaties.
Kerninterfaces
IWebClient
Interface voor HTTP client verbindingen.
IWebSocket
Interface voor WebSocket-verbindingen met bidirectionele communicatieondersteuning.
IWebServer
Interface voor HTTP server functionaliteit.
IWebSocketServer
Interface voor WebSocket-server met verbindingsbeheer.
INetworkProvider
Interface voor netwerkconnectiviteitbeheer.
IServerFactory
Factory interface voor aanmaken van platformspecifieke implementaties.
Platform Implementatie Voorbeeld
Voor de ESP32 zijn de interfaces geïmplementeerd met de DIYables_ESP32_WebServer bibliotheek:
Nieuwe Platformondersteuning Toevoegen
Om ondersteuning voor een nieuw platform toe te voegen (bijv. ESP32):
- Implementeer alle interfaces voor het doelsysteem
- Maak een ServerFactory die uw implementaties instanties maakt
- Beheer platformspecifieke netwerken en WebSocket-protocollen
- Test met bestaande WebApp klassen (wijzigingen niet nodig)
Voorbeeldgebruik met verschillende platforms:
Voordelen van Interface Ontwerp
- Platformonafhankelijkheid: Kern WebApp-logica werkt op elk platform
- Uitbreidbaarheid: Gemakkelijk nieuwe hardware ondersteuning toevoegen
- Onderhoudbaarheid: Platforms specifieke code is geïsoleerd
- Testbaarheid: Interfaces kunnen gemockt worden voor unittests
- Consistentie: Zelfde API op alle ondersteunde platforms
Huidige Platformondersteuning
- ✅ ESP32: Volledig geïmplementeerd en getest
- 🔄 ESP32: Beschikbaar als aparte uitbreiding - DIYables_WebApps_ESP32
- 🚀 Toekomstige Platforms: Kunnen toegevoegd worden met hetzelfde interfaceschema
Dit is de volledige vertaling volgens richtlijnen met behoud van technische specificaties, consistente terminologie, en een behulpzame, professionele Nederlandse stijl.