DIYables WebApps-Bibliotheks-API-Referenz – Vollständige Dokumentation
Überblick
Die DIYables WebApps-Bibliothek bietet eine umfassende modulare Lösung für die Erstellung von WebSocket-basierten Webanwendungen auf dem Arduino Uno R4 WiFi und dem DIYables STEM V4 IoT. Sie umfasst mehrere vorgefertigte Webanwendungen und ein flexibles Framework zur Erstellung benutzerdefinierter Anwendungen. Speziell optimiert für die DIYables STEM V4 IoT-Bildungsplattform mit erweiterten IoT-Fähigkeiten und integrierter Sensorintegration.
Die Bibliothek verwendet eine modulare Architektur, bei der Sie nur die Webanwendungen einbinden, die Sie benötigen, was Speicher spart und die Leistung verbessert.
Funktionen
- Modulare Architektur: Fügen Sie nur die Web-Apps hinzu, die Sie benötigen, um die Speichernutzung zu optimieren
- Speichereffizient: Jede Webanwendung kann unabhängig voneinander aktiviert/deaktiviert werden
- 11+ einsatzbereite Webanwendungen: Komplette Arduino-Steuerung ohne Kenntnisse in der Webprogrammierung
- Eigenes Web-App-Framework: Erstellen Sie Ihre eigenen Anwendungen mithilfe des Basisklassen-Systems
- Echtzeit-Kommunikation: WebSocket-basiert für sofortige Aktualisierungen
- Responsives Design: Funktioniert auf Desktop-, Tablet- und Mobilgeräten
- Einfache Integration: Einfache Callback-basierte API
- Unterstützung mehrerer Web-Apps: Gleichzeitiges Hinzufügen mehrerer Web-Apps möglich
- Plattform erweiterbar: Derzeit für Arduino Uno R4 WiFi implementiert, kann aber auf andere Hardware-Plattformen erweitert werden. Siehe DIYables_WebApps_ESP32
Kernklassen
DIYablesWebAppServer
Die Hauptserverklasse, die Webanwendungen, HTTP-Anfragen und WebSocket-Kommunikation verwaltet.
Konstruktor
Erstellt eine Instanz eines Webanwendungsservers.
- httpPort: HTTP-Server-Port (Standardwert: 80)
- websocketPort: WebSocket-Server-Port (Standardwert: 81)
Methoden
Einrichtung und Verbindung
Initialisiert die Netzwerkverbindung (für Ethernet oder vorkonfigurierte Verbindungen) und startet den Webserver.
- Rückgabewert: true, wenn erfolgreich, false, falls fehlgeschlagen
- Anwendungsfall: Für zukünftige Ethernet-Unterstützung oder wenn WiFi-Zugangsdaten vorkonfiguriert sind
Initialisiert die WLAN-Verbindung und startet den Webserver.
- ssid: WLAN-Name
- password: WLAN-Passwort
- Rückgabewert: wahr, wenn erfolgreich, falsch, falls fehlgeschlagen
- Anwendungsfall: Standard-WLAN-Verbindung mit Zugangsdaten
Verarbeitet HTTP-Anfragen und WebSocket-Kommunikation. Muss in der Hauptschleife aufgerufen werden.
Gibt true zurück, wenn WLAN verbunden ist.
Gibt die IP-Adresse des Arduino als String zurück.
Anwendungsmanagement
Fügt dem Server eine Webanwendung hinzu.
- app: Zeiger auf eine Webanwendungsinstanz
Entfernt eine Webanwendung anhand des URL-Pfads.
- Pfad: URL-Pfad der Anwendung (z. B. "/chat")
Ruft eine Webanwendung anhand ihres URL-Pfads ab.
- Pfad: URL-Pfad der Anwendung
- Rückgabewert: Zeiger auf die Anwendung oder nullptr, falls nicht gefunden
Legt die 404-Fehlerseite fest (optional).
- Seite: 404-Seiteninstanz
Spezialisierter App-Zugang
Ruft die Instanz der Digital-Pins-Seite ab, sofern sie hinzugefügt wurde.
- Rückgabewert: Zeiger auf die Seite der digitalen Pins oder nullptr
Erhält die Instanz der Slider-Seite, falls sie hinzugefügt wurde.
- Rückgabewert: Zeiger auf die Slider-Seite oder nullptr
Gibt die Joystick-Seiteninstanz zurück, falls sie hinzugefügt wurde.
- Rückgabe: Zeiger auf die Joystick-Seite oder nullptr
Basisklassen
DIYablesWebAppSeitenBasis
Abstrakte Basisklasse, von der alle Webanwendungen erben. Sie bietet gemeinsame Funktionalität für die HTTP-Verarbeitung, die WebSocket-Kommunikation und die Seitenverwaltung.
Konstruktor
Erstellt eine Instanz der Basisseite mit dem angegebenen URL-Pfad.
- Seitenpfad: URL-Pfad der Seite (z. B., "/web-joystick")
Virtuelle Methoden (Muss von abgeleiteten Klassen implementiert werden)
Verarbeitet HTTP-Anfragen für diese Seite. Reine virtuelle Methode.
- Client: Web-Client-Schnittstelle zum Senden einer Antwort
Verarbeitet WebSocket-Nachrichten für diese Seite. Reine virtuelle Methode.
- ws: WebSocket-Verbindungsschnittstelle
- message: Inhalt der empfangenen Nachricht
- length: Nachrichtenlänge
Gibt den Seitenidentifikations-String zurück, der in der Anzeige der Verbindungsinformationen verwendet wird. Reine virtuelle Methode.
- Rückgabewert: Seiten-Info-String (z. B. "🕹️ Web Joystick: ")
Gibt HTML für den Navigationsbutton der Startseite zurück. Reine virtuelle Methode.
- Rückgabewert: HTML-String für Navigationskarte
Virtuelle Methoden (Optionale Überschreibungen)
Aufgerufen, wenn eine neue WebSocket-Verbindung hergestellt wird.
- ws: Neue WebSocket-Verbindung
Wird aufgerufen, wenn eine WebSocket-Verbindung geschlossen wird.
- ws: WebSocket-Verbindung geschlossen
Gängige Methoden
Gibt den URL-Pfad dieser Seite zurück.
- Rückgabewert: Seitenpfad-Zeichenkette
Überprüft, ob die Seite derzeit aktiviert ist.
- Rückgabewert: true, wenn aktiviert, false, wenn deaktiviert
Aktiviert oder deaktiviert die Seite.
- enable: wahr zum Aktivieren, falsch zum Deaktivieren
Hilfsfunktionen
Sendet Standard-HTTP-Header an den Client.
- client: Web-Client-Schnittstelle
- contentType: MIME-Typ (Standardwert: "text/html")
Sendet eine Nachricht an einen bestimmten WebSocket-Client.
- ws: Ziel-WebSocket-Verbindung
- message: Nachricht zum Senden
Sendet eine Nachricht an alle verbundenen WebSocket-Clients.
- Nachricht: Nachricht zur Übertragung
Sendet großen HTML-Inhalt mittels Chunked-Transfer-Encoding.
- client: Web-Client-Schnittstelle
- html: HTML-Inhalt zum Senden
Verwendungsbeispiel
Webanwendungsklassen
DIYables Startseite
Zentrales Navigationszentrum, das Links zu allen aktivierten Anwendungen bereitstellt.
Konstruktor
URL-Pfad
- Pfad: / (Wurzelverzeichnis)
DIYablesWebChatSeite
Interaktive Chat-Schnittstelle für die zweiseitige Kommunikation mit Arduino.
Konstruktor
URL-Pfad
- Pfad: /webchat
Methoden
Legt eine Callback-Funktion für eingehende Chatnachrichten fest.
Sendet eine Nachricht an die Web-Chat-Schnittstelle.
DIYablesWebMonitorSeite
Webbasierter serieller Monitor für Echtzeitausgabe und Befehlseingabe.
Konstruktor
URL-Pfad
- Pfad: /webmonitor
Methoden
Legt einen Callback für eingehende Monitor-Nachrichten fest.
Sendet eine Nachricht an die Webmonitor-Schnittstelle.
DIYablesWebDigitalPinsPage
Steuern und überwachen Sie digitale Pins 0–13 über die Weboberfläche.
Konstruktor
URL-Pfad
- Pfad: /webdigitalpins
Methoden
Ermöglicht eine PIN für die Websteuerung.
- Pin: Pin-Nummer (0-13)
- Modus: WEB_PIN_OUTPUT oder WEB_PIN_INPUT
Legt einen Callback für Schreibvorgänge an Pins (Ausgangspins) fest.
Legt die Callback-Funktion für Pin-Lesevorgänge fest (Eingangs-Pins).
Setzt einen Callback für Pin-Modusänderungen.
Aktualisiert den PIN-Status in Echtzeit für Web-Clients.
DIYablesWebSliderPage
Doppelschieberegler-Steuerung für analoge/PWM-Anwendungen.
Konstruktor
URL-Pfad
- Pfad: /webslider
Methoden
Legt eine Callback-Funktion für Änderungen des Sliderwerts aus dem Web fest.
- Parameter: slider1 (0-255), slider2 (0-255)
Legt einen Callback für den Web-Client fest, der aktuelle Werte anfordert.
Schiebereglerwerte an die Weboberfläche senden.
DIYablesWebJoystickSeite
2D-Joystick-Steuerung für Robotik- und Positionierungsanwendungen.
Konstruktor
- autoReturn: Ob der Joystick automatisch zur Mitte zurückkehrt
- sensitivity: Mindestbewegung in Prozent, um Aktualisierungen auszulösen
URL-Pfad
- Pfad: /webjoystick
Methoden
Legt einen Callback für Joystick-Bewegung aus dem Web fest.
- Parameter: x (-100 bis 100), y (-100 bis 100)
Legt einen Callback für den Web-Client fest, der die aktuelle Position anfordert.
Sendet die Joystick-Position an die Weboberfläche.
Legt das Verhalten der automatischen Rückkehr fest.
Stellt die Bewegungsempfindlichkeit ein (Prozentsatz).
DIYablesWebPlotterSeite
Echtzeit-Datenvisualisierung mit Unterstützung mehrerer Datenreihen.
Konstruktor
URL-Pfad
- Pfad: /webplotter
Methoden
Stellt den Diagrammtitel ein.
Achsenbeschriftungen festlegen.
Aktiviert bzw. deaktiviert die automatische Skalierung der Y-Achse.
Legt die maximale Anzahl der anzuzeigenden Datenpunkte fest.
Fügt einen Datenpunkt zu einer Datenreihe hinzu.
Alle Daten aus dem Diagramm löschen.
DIYables-Seite nicht gefunden
Optionale 404-Fehlerseite für eine bessere Benutzererfahrung.
Konstruktor
Grundlegendes Nutzungsbeispiel
Überblick über Webanwendungen
Startseite
- URL: http://[arduino-ip]/
- Zweck: Zentrale Navigationsplattform
- Funktionen: Verknüpfungen zu allen aktivierten Anwendungen, Verbindungsstatus
WebChat-Anwendung
- URL: http://[arduino-ip]/webchat
- Zweck: Zwei-Wege-Kommunikationsschnittstelle
- Funktionen: Echtzeit-Nachrichtenübermittlung, Nachrichtenverlauf, WebSocket-Status
Web-Überwachung
- URL: http://[arduino-ip]/webmonitor
- Zweck: Ersatz für den seriellen Monitor
- Funktionen: Serielle Ausgabe in Echtzeit, Befehlseingabe, dunkles Design
Webbasierte Steuerung digitaler Pins
- URL: http://[arduino-ip]/webdigitalpins
- Zweck: Digitale Pins 0-13 steuern
- Funktionen: Individuelle Pin-Steuerung, Massenoperationen, Status in Echtzeit
Web-Schieberegler-Steuerung
- URL: http://[arduino-ip]/webslider
- Zweck: Duale Analog-/PWM-Steuerung
- Eigenschaften: Zwei unabhängige Schieberegler (0-255), voreingestellte Werte, Feedback in Echtzeit
Web-Joystick-Steuerung
- URL: http://[arduino-ip]/webjoystick
- Zweck: 2D-Positionssteuerung für Roboter und Fahrzeuge
- Funktionen: Touch-/Maussteuerung, Koordinatenanzeige, Empfindlichkeitseinstellung
Webplotter
- URL: http://[arduino-ip]/webplotter
- Zweck: Echtzeit-Datenvisualisierung
- Funktionen: Mehrere Datenreihen, automatische Skalierung, konfigurierbare Titel und Achsen
WebSocket-Kommunikation
Alle Anwendungen verwenden WebSocket auf Port 81 für die Echtzeitkommunikation:
- WebSocket-URL: ws://[arduino-ip]:81
- Verbindung: Automatische Wiederverbindung bei Verbindungsabbruch
- Protokoll: Textbasiertes Nachrichtenformat
Nachrichtenformate
WebChat-Nachrichten
- Vom Web: Direkte Textnachricht
- Zum Web: Direkte Textnachricht
Webmonitor-Nachrichten
- Vom Web: Direkte Textnachricht
- Zum Web: Direkte Textnachricht
Web Digitale PIN-Nachrichten
- Vom Web: JSON-Format: {"pin": 13, "state": 1}
- Zum Web: JSON-Format: {"pin": 13, "state": 1}
Web-Slider-Nachrichten
- Aus dem Web: JSON-Format: {"slider1": 128, "slider2": 255}
- Zum Web: JSON-Format: {"slider1": 128, "slider2": 255}
Web-Joystick-Nachrichten
- Aus dem Web: JSON-Format: {"x": 50, "y": -25}
- Zum Web: JSON-Format: {"x": 50, "y": -25}
Web-Plotter-Nachrichten
- Aus dem Web: Nicht anwendbar (nur zur Anzeige)
- Zum Web: JSON-Format: {"series": "temp", "x": 10.5, "y": 23.4}
Fehlerbehandlung
Die Bibliothek enthält automatische Fehlerbehandlung für:
- WLAN-Verbindungsfehler
- WebSocket-Verbindungsabbrüche
- Ungültige Nachrichtenformate
- Client-Verbindungsgrenzen
Speicherverbrauch
Vorteile einer modularen Architektur: Schließen Sie nur die Webanwendungen ein, die Sie benötigen, um den Speicherverbrauch zu optimieren.
Geschätzter Speicherverbrauch pro Komponente:
- DIYablesWebAppServer: ca. 8 KB Flash-Speicher, ca. 2 KB Arbeitsspeicher
- DIYablesHomePage: ca. 3 KB Flash-Speicher, ca. 1 KB Arbeitsspeicher
- DIYablesWebChatPage: ca. 6 KB Flash-Speicher, ca. 1,5 KB Arbeitsspeicher
- DIYablesWebMonitorPage: ca. 5 KB Flash-Speicher, ca. 1,5 KB Arbeitsspeicher
- DIYablesWebDigitalPinsPage: ca. 8 KB Flash-Speicher, ca. 2 KB Arbeitsspeicher
- DIYablesWebSliderPage: ca. 6 KB Flash-Speicher, ca. 1,5 KB Arbeitsspeicher
- DIYablesWebJoystickPage: ca. 7 KB Flash-Speicher, ca. 1,5 KB Arbeitsspeicher
- DIYablesWebPlotterPage: ca. 10 KB Flash-Speicher, ca. 2 KB Arbeitsspeicher
- WebSocket-Puffer: ca. 1 KB Arbeitsspeicher je Verbindung
Gesamt, wenn alle Apps aktiviert sind: ~53 KB Flash-Speicher, ~12 KB RAM
Minimale Einrichtung (Server + Home + 1 App): ~17 kB Flash-Speicher, ~4,5 kB RAM
Browser-Kompatibilität
Unterstützte Browser:
- Chrome 50+
- Firefox 45+
- Safari 10+
- Edge 79+
- Mobile-Browser (iOS Safari, Chrome Mobile)
Sicherheitshinweise
- Keine Authentifizierung implementiert (nur geeignet für lokale Netzwerke)
- Nur in vertrauenswürdigen Netzwerken verwenden
- Erwägen Sie, Authentifizierung für öffentliche Bereitstellungen hinzuzufügen
Fehlerbehebung
Häufige Probleme
- Kann keine Verbindung zum WLAN herstellen
- SSID und Passwort überprüfen
- Überprüfen Sie, ob das Netzwerk 2,4-GHz verwendet (nicht 5-GHz)
- Signalstärke prüfen
i. Die WebSocket-Verbindung schlägt fehl
- Überprüfen Sie, ob die IP-Adresse korrekt ist.
- Firewall-Einstellungen überprüfen
- Versuchen Sie einen anderen Browser
- Hoher Speicherverbrauch
- Nicht verwendete Anwendungen deaktivieren
- Gleichzeitige Verbindungen begrenzen
- Starte Arduino neu, falls Speicherfragmentierung auftritt.
- Langsame Antwort
- WLAN-Signalstärke überprüfen
- Reduziere die Frequenz der WebSocket-Nachrichten
- Verwenden Sie kürzere Callback-Funktionen.
Beispielprojekte
Beispielanwendungen
Die DIYables WebApps-Bibliothek enthält umfassende Beispiele, die speziell für die Arduino Uno R4 WiFi- und DIYables STEM V4 IoT-Bildungsplattform entwickelt wurden:
Verfügbare Beispiele
- Chat-Beispiel: Bidirektionale Kommunikationsschnittstelle
- WebMonitor-Beispiel: Ersatz für den seriellen Monitor mit erweiterten Funktionen
- WebDigitalPins-Beispiel: Steuere alle digitalen Pins mit visuellem Feedback
- WebSlider-Beispiel: Duale Analog- und PWM-Steuerung mit Voreinstellungen
- WebJoystick-Beispiel: 2D-Positionssteuerung für Robotikprojekte
- MultipleWebApps-Beispiel: Alle Anwendungen laufen gleichzeitig
Hardware-Kompatibilität
- Empfohlen: DIYables STEM V4 IoT (erweiterte Funktionen, integrierte Sensoren)
- Kompatibel: Arduino Uno R4 WiFi
Tutorial-Ressourcen
Vollständige Schritt-für-Schritt-Anleitungen verfügbar unter:
- Newbiely.com/tutorials/arduino/arduino-uno-r4-wifi-web-apps
- DIYables STEM V4 IoT-spezifische Anleitungen und Beispiele zur Sensorintegration
Siehe den Ordner examples/ für vollständige Projekte und den Ordner docs/ für detaillierte Installationsanweisungen.
Plattformabstraktionsschnittstellen
Die DIYables WebApps-Bibliothek verwendet eine Plattformabstraktionsschicht mit Schnittstellen, die die Unterstützung mehrerer Hardwareplattformen ermöglichen. Diese Schnittstellen trennen die Kernfunktionalität der WebApp von plattformabhängigen Implementierungen.
Kern-Schnittstellen
IWebClient
Schnittstelle für HTTP-Client-Verbindungen.
IWebSocket
Schnittstelle für WebSocket-Verbindungen mit bidirektionaler Kommunikation.
IWebServer
Schnittstelle für die HTTP-Server-Funktionalität.
IWebSocketServer
Schnittstelle für WebSocket-Server mit Verbindungsverwaltung.
INetzwerkAnbieter
Schnittstelle zur Verwaltung der Netzwerkverbindungen.
IServerFactory
Fabrik-Schnittstelle zur Erstellung plattformabhängiger Implementierungen.
Beispiel zur Plattformimplementierung
Für Arduino Uno R4 WiFi werden die Schnittstellen mit der UnoR4WiFi_WebServer-Bibliothek implementiert:
Unterstützung für neue Plattformen hinzufügen
Um die Unterstützung für eine neue Plattform hinzuzufügen (z. B. ESP32):
- Alle Schnittstellen für die Zielplattform implementieren
- Erstelle eine ServerFactory, die deine Implementierungen instanziiert
- Behandle plattformabhängige Netzwerkkommunikation und WebSocket-Protokolle
- Teste mit bestehenden WebApp-Klassen (keine Änderungen erforderlich)
Beispielanwendung auf verschiedenen Plattformen:
Vorteile des schnittstellenbasierten Designs
- Plattformunabhängigkeit: Die Kern-WebApp-Logik funktioniert auf jeder Plattform
- Erweiterbarkeit: Es ist einfach, neue Hardware-Unterstützung hinzuzufügen
- Wartbarkeit: Plattformspezifischer Code ist isoliert
- Testbarkeit: Schnittstellen können für Unit-Tests gemockt werden
- Konsistenz: Die gleiche API über alle unterstützten Plattformen hinweg
Aktuelle Plattformunterstützung
- ✅ Arduino Uno R4 WiFi: Vollständig implementiert und getestet
- 🔄 ESP32: Verfügbar als separate Erweiterung - DIYables_WebApps_ESP32
- 🚀 Zukünftige Plattformen: Können mit demselben Schnittstellenmuster hinzugefügt werden