DIYables WebApps Bibliotheek API Referentie - Volledige Documentatie
Overzicht
De DIYables WebApps bibliotheek biedt een uitgebreide modulaire oplossing voor het maken van WebSocket-gebaseerde webapplicaties op Arduino Uno R4 WiFi en DIYables STEM V4 IoT. Het bevat meerdere kant-en-klare webapplicaties en een flexibel framework voor het maken van aangepaste applicaties. Speciaal geoptimaliseerd voor het DIYables STEM V4 IoT educatieve platform met verbeterde IoT-mogelijkheden en ingebouwde sensor integratie.
De bibliotheek gebruikt een modulaire architectuur waarbij u alleen de webapplicaties insluit die u nodig heeft, waardoor geheugen wordt bespaard en prestaties verbeteren.
Functies
- Modulaire Architectuur: Voeg alleen de web-apps toe die u nodig heeft om geheugengebruik te optimaliseren
- Geheugen Efficiënt: Elke web-app kan onafhankelijk worden in- of uitgeschakeld
- 11+ Gebruiksklare Webapplicaties: Volledige Arduino controle zonder webprogrammeerkennis
- Aangepast Web-App Framework: Maak uw eigen applicaties met het basisklasse systeem
- Real-time Communicatie: WebSocket-gebaseerd voor directe updates
- Responsief Ontwerp: Werkt op desktop, tablet en mobiele apparaten
- Eenvoudige Integratie: Simpele callback-gebaseerde API
- Ondersteuning Meerdere Apps: Ondersteuning voor het gelijktijdig toevoegen van meerdere web-apps
- Platform Uitbreidbaar: Momenteel geïmplementeerd voor Arduino Uno R4 WiFi, maar kan worden uitgebreid voor andere hardware platforms. Zie DIYables_WebApps_ESP32
Kernklassen
DIYablesWebAppServer
De hoofdserver klasse die webapplicaties, HTTP-verzoeken en WebSocket-communicatie beheert.
Constructor
Maakt een web-app server instantie aan.
- httpPort: HTTP-server poort (standaard: 80)
- websocketPort: WebSocket-server poort (standaard: 81)
Methoden
Installatie en Verbinding
Initialiseert netwerkverbinding (voor Ethernet of vooraf geconfigureerde verbindingen) en start de webserver.
- Retourneert: true als succesvol, false als gefaald
- Gebruiksgeval: Voor toekomstige Ethernet ondersteuning of wanneer WiFi-referenties vooraf zijn geconfigureerd
Initialiseert WiFi-verbinding en start de webserver.
- ssid: WiFi-netwerknaam
- password: WiFi-wachtwoord
- Retourneert: true als succesvol, false als gefaald
- Gebruiksgeval: Standaard WiFi-verbinding met referenties
Verwerkt HTTP-verzoeken en WebSocket-communicatie. Moet worden aangeroepen in de hoofdlus.
Retourneert true als WiFi verbonden is.
Retourneert het IP-adres van de Arduino als string.
Applicatie Beheer
Voegt een webapplicatie toe aan de server.
- app: Pointer naar een webapplicatie instantie
Verwijdert een webapplicatie op basis van het URL-pad.
- path: URL-pad van de applicatie (bijv. "/chat")
Haalt een webapplicatie op op basis van 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: 404 pagina instantie
Gespecialiseerde App Toegang
Haalt de digitale pinnen pagina instantie op als toegevoegd.
- Retourneert: Pointer naar de digitale pinnen pagina of nullptr
Haalt de slider pagina instantie op als toegevoegd.
- Retourneert: Pointer naar de slider pagina of nullptr
Haalt de joystick pagina instantie op als toegevoegd.
- Retourneert: Pointer naar de joystick pagina of nullptr
Basisklassen
DIYablesWebAppPageBase
Abstracte basisklasse waarvan alle webapplicaties erven. Biedt gemeenschappelijke functionaliteit voor HTTP-afhandeling, 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. Puur virtuele methode.
- client: Web client interface voor het verzenden van reactie
Verwerkt WebSocket-berichten voor deze pagina. Puur virtuele methode.
- ws: WebSocket-verbinding interface
- message: Ontvangen berichtinhoud
- length: Berichtlengte
Retourneert pagina identificatiestring gebruikt in verbindingsinfo weergave. Puur virtuele methode.
- Retourneert: Pagina info string (bijv. "🕹️ Web Joystick: ")
Retourneert HTML voor startpagina navigatieknop. Puur virtuele methode.
- Retourneert: HTML string voor navigatiekaart
Virtuele Methoden (Optionele overschrijvingen)
Wordt aangeroepen wanneer een nieuwe WebSocket-verbinding wordt opgezet.
- ws: Nieuwe WebSocket-verbinding
Wordt aangeroepen wanneer een WebSocket-verbinding wordt gesloten.
- ws: Gesloten WebSocket-verbinding
Gemeenschappelijke Methoden
Haalt het URL-pad voor deze pagina op.
- Retourneert: Pagina pad string
Controleert of de pagina momenteel ingeschakeld is.
- 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
Zendt standaard HTTP-headers naar client.
- client: Web client interface
- contentType: MIME-type (standaard: "text/html")
Zendt een bericht naar specifieke WebSocket client.
- ws: Doel WebSocket-verbinding
- message: Te verzenden bericht
Zendt een bericht naar alle verbonden WebSocket clients.
- message: Te verzenden bericht
Zendt grote HTML-inhoud met chunked transfer encoding.
- client: Web client interface
- html: Te verzenden HTML-inhoud
Gebruiksvoorbeeld
Webapplicatie Klassen
DIYablesHomePage
Centrale navigatiehub die links biedt naar alle ingeschakelde applicaties.
Constructor
URL Pad
- Pad: / (root)
DIYablesWebChatPage
Interactieve chat interface voor tweerichtingscommunicatie met Arduino.
Constructor
URL Pad
- Pad: /webchat
Methoden
Stelt callback in voor inkomende chatberichten.
Zendt een bericht naar de webchat interface.
DIYablesWebMonitorPage
Web-gebaseerde seriële monitor voor real-time uitvoer en commando-invoer.
Constructor
URL Pad
- Pad: /webmonitor
Methoden
Stelt callback in voor inkomende monitor berichten.
Zendt een bericht naar de webmonitor interface.
DIYablesWebDigitalPinsPage
Bestuur en monitor digitale pinnen 0-13 via webinterface.
Constructor
URL Pad
- Pad: /webdigitalpins
Methoden
Schakelt een pin in voor webbediening.
- pin: Pin nummer (0-13)
- mode: WEB_PIN_OUTPUT of WEB_PIN_INPUT
Stelt callback in voor pin schrijfoperaties (uitvoerpinnen).
Stelt callback in voor pin leesoperaties (invoerpinnen).
Stelt callback in voor pin modus wijzigingen.
Werkt pin status real-time bij voor webclients.
DIYablesWebSliderPage
Dubbele slider besturing voor analoge/PWM-toepassingen.
Constructor
URL Pad
- Pad: /webslider
Methoden
Stelt callback in voor slider waarde wijzigingen van web.
- Parameters: slider1 (0-255), slider2 (0-255)
Stelt callback in voor webclient die huidige waarden opvraagt.
Zendt slider waarden naar webinterface.
DIYablesWebJoystickPage
2D joystick besturing voor robotica en positioneringstoepassingen.
Constructor
- autoReturn: Of joystick automatisch naar centrum terugkeert
- sensitivity: Minimaal bewegingspercentage om updates te activeren
URL Pad
- Pad: /webjoystick
Methoden
Stelt callback in voor joystick beweging van web.
- Parameters: x (-100 tot 100), y (-100 tot 100)
Stelt callback in voor webclient die huidige positie opvraagt.
Zendt joystick positie naar webinterface.
Stelt automatisch terugkeer gedrag in.
Stelt bewegingsgevoeligheid in (percentage).
DIYablesWebPlotterPage
Real-time datavisualisatie met ondersteuning voor meerdere datareeksen.
Constructor
URL Pad
- Pad: /webplotter
Methoden
Stelt de plot titel in.
Stelt aslabels in.
Schakelt automatische Y-as schaling in of uit.
Stelt maximum aantal datapunten in om weer te geven.
Voegt een datapunt toe aan een reeks.
Wist alle data uit de plot.
DIYablesNotFoundPage
Optionele 404 foutpagina voor betere gebruikerservaring.
Constructor
Basis Gebruiksvoorbeeld
Webapplicaties Overzicht
Startpagina
- URL: http://[arduino-ip]/
- Doel: Centrale navigatiehub
- Functies: Links naar alle ingeschakelde applicaties, verbindingsstatus
WebChat Applicatie
- URL: http://[arduino-ip]/webchat
- Doel: Tweerichtingscommunicatie interface
- Functies: Real-time messaging, berichtgeschiedenis, WebSocket status
Web Monitor
- URL: http://[arduino-ip]/webmonitor
- Doel: Vervanging voor seriële monitor
- Functies: Real-time seriële uitvoer, commando-invoer, donker thema
Web Digital Pins Besturing
- URL: http://[arduino-ip]/webdigitalpins
- Doel: Bestuur digitale pinnen 0-13
- Functies: Individuele pinbediening, bulk operaties, real-time status
Web Slider Besturing
- URL: http://[arduino-ip]/webslider
- Doel: Dubbele analoge/PWM-besturing
- Functies: Twee onafhankelijke sliders (0-255), vooraf ingestelde waarden, real-time feedback
Web Joystick Besturing
- URL: http://[arduino-ip]/webjoystick
- Doel: 2D positiebesturing voor robots/voertuigen
- Functies: Aanraking/muis besturing, coördinaten weergave, gevoeligheidsaanpassing
Web Plotter
- URL: http://[arduino-ip]/webplotter
- Doel: Real-time datavisualisatie
- Functies: Meerdere datareeksen, auto-schaling, configureerbare titels en assen
WebSocket Communicatie
Alle applicaties gebruiken WebSocket op poort 81 voor real-time communicatie:
- WebSocket URL: ws://[arduino-ip]:81
- Verbinding: Automatische herverbinding bij verbreken
- Protocol: Tekstgebaseerd berichtformaat
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 weergave)
- Naar Web: JSON-formaat: {"series": "temp", "x": 10.5, "y": 23.4}
Foutafhandeling
De bibliotheek bevat automatische foutafhandeling voor:
- WiFi-verbindingsfouten
- WebSocket-verbindingsonderbrekingen
- Ongeldige berichtformaten
- Client verbindingslimieten
Geheugengebruik
Modulaire Architectuur Voordelen: Sluit alleen de webapplicaties in die u nodig heeft om geheugengebruik te optimaliseren.
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: ~53KB Flash, ~12KB RAM
Minimale setup (server + startpagina + 1 app): ~17KB Flash, ~4.5KB RAM
Browsercompatibiliteit
Ondersteunde browsers:
- Chrome 50+
- Firefox 45+
- Safari 10+
- Edge 79+
- Mobiele browsers (iOS Safari, Chrome Mobile)
Beveiligingsopmerkingen
- Geen authenticatie geïmplementeerd (alleen geschikt voor lokale netwerken)
- Alleen gebruiken in vertrouwde netwerken
- Overweeg authenticatie toe te voegen voor publieke implementaties
Probleemoplossing
Veelvoorkomende Problemen
- Kan geen verbinding maken met WiFi
- Controleer SSID en wachtwoord
- Verifieer dat netwerk 2.4GHz is (niet 5GHz)
- Controleer signaalsterkte
- WebSocket-verbinding faalt
- Verifieer dat IP-adres correct is
- Controleer firewall-instellingen
- Probeer andere browser
- Hoog geheugengebruik
- Schakel ongebruikte applicaties uit
- Beperk gelijktijdige verbindingen
- Herstart Arduino als geheugenfragmentatie optreedt
- Langzame reactie
- Controleer WiFi-signaalsterkte
- Verminder WebSocket-berichtfrequentie
- Gebruik kortere callback-functies
Voorbeeldprojecten
Voorbeeldapplicaties
De DIYables WebApps bibliotheek bevat uitgebreide voorbeelden ontworpen voor Arduino Uno R4 WiFi en DIYables STEM V4 IoT educatief platform:
Beschikbare Voorbeelden
- Chat Voorbeeld: Tweerichtingscommunicatie interface
- WebMonitor Voorbeeld: Vervanging voor seriële monitor met verbeterde functies
- WebDigitalPins Voorbeeld: Bestuur alle digitale pinnen met visuele feedback
- WebSlider Voorbeeld: Dubbele analoge/PWM-besturing met voorinstellingen
- WebJoystick Voorbeeld: 2D positiebesturing voor robotica projecten
- MultipleWebApps Voorbeeld: Alle applicaties gelijktijdig werkend
Hardware Compatibiliteit
- Aanbevolen: DIYables STEM V4 IoT (verbeterde functies, ingebouwde sensoren)
- Compatibel: Arduino Uno R4 WiFi
Tutorial Bronnen
Volledige stap-voor-stap tutorials beschikbaar op:
- Newbiely.com/tutorials/arduino/arduino-uno-r4-wifi-web-apps
- DIYables STEM V4 IoT specifieke gidsen en sensor integratie voorbeelden
Zie de examples/ map voor volledige projecten en docs/ map voor gedetailleerde installatie-instructies.
Platform Abstractie Interfaces
De DIYables WebApps bibliotheek gebruikt een platform abstractielaag met interfaces die ondersteuning voor meerdere hardware platforms mogelijk maken. Deze interfaces scheiden de kern WebApp functionaliteit van platform-specifieke implementaties.
Kern Interfaces
IWebClient
Interface voor HTTP client verbindingen.
IWebSocket
Interface voor WebSocket verbindingen met bidirectionele communicatie ondersteuning.
IWebServer
Interface voor HTTP server functionaliteit.
IWebSocketServer
Interface voor WebSocket server met verbindingsbeheer.
INetworkProvider
Interface voor netwerkconnectiviteitsbeheer.
IServerFactory
Factory interface voor het maken van platform-specifieke implementaties.
Platform Implementatie Voorbeeld
Voor Arduino Uno R4 WiFi worden de interfaces geïmplementeerd met de UnoR4WiFi_WebServer bibliotheek:
Nieuw Platform Ondersteuning Toevoegen
Om ondersteuning toe te voegen voor een nieuw platform (bijv. ESP32):
- Implementeer alle interfaces voor het doelplatform
- Maak een ServerFactory die uw implementaties instantieert
- Verwerk platform-specifieke netwerken en WebSocket-protocollen
- Test met bestaande WebApp-klassen (geen wijzigingen nodig)
Voorbeeldgebruik met verschillende platforms:
Voordelen van Interface-Gebaseerd Ontwerp
- Platform Onafhankelijkheid: Kern WebApp-logica werkt op elk platform
- Uitbreidbaarheid: Eenvoudig nieuwe hardwareondersteuning toevoegen
- Onderhoudbaarheid: Platform-specifieke code is geïsoleerd
- Testbaarheid: Interfaces kunnen worden nagebootst voor unit testing
- Consistentie: Dezelfde API voor alle ondersteunde platforms
Huidige Platform Ondersteuning
- ✅ Arduino Uno R4 WiFi: Volledig geïmplementeerd en getest
- 🔄 ESP32: Beschikbaar als aparte extensie - DIYables_WebApps_ESP32
- 🚀 Toekomstige Platforms: Kunnen worden toegevoegd met hetzelfde interface patroon