Zielstellung #3: Videostream von ESP32-CAM via Hotspot an einen PC senden
(EN google-translate)
(PL google-translate)
Damit in Zukunft ein Regler, der als Software auf dem PC oder Laptop läuft, das Fahrzeug lenken kann, müssen die Videodaten vom Fahrzeug an den PC/Laptop geschickt werden. Im ersten Teil wird das Video in einem Webbrowser am PC/Laptop angezeigt während das Board über USB mit dem PC verbunden ist. Im zweiten Teil soll sich der ESP32-CAM im gleichen Hotspot-Netz verbinden, jedoch per Akku versorgt werden. Im dritten Teil wird das Video durch einen Java-Processing-Sketch angezeigt. Dies wird dann die Grundlage bilden, um ein Programm schreiben zu können, das die herein kommenden Bilddaten verarbeiten kann.
Materialien
Wie bei "Zielstellung #2: Blinkende LED", jedoch zusätzlich:
|
Arbeitsschritte
|
Erläuterungen
zu 1.: Hotspot einrichten und starten
Anleitung für Android:
|
Bild 0-1: Screenshot des aktivierten Hotspots am Android-Smartphone
zu 2.: Laptop/PC bei Hotspot anmelden
|
zu 3.: Streaming-Programm für ESP32 anpassen, damit es sich beim Hotspot anmeldet, Sketch kompilieren und flashen.
Siehe auch FAQ#7
|
Bild 0-2: Einstellungen bei "Werkzeuge"
zu 4.: Videostream im Webbrowser anzeigen
|
Bild 0-3: Beim Hochfahren und Starten des Videostreams gibt der ESP32 über die serielle Schnittstelle zum PC seine IP-Adresse bekannt, hier: 192.168.137.92
Bild 0-4: Nach Eingabe der IP-Adresse des ESP32-CAM in einem Webbrowser kann mit "Start Stream" der Videostream vom ESP32-CAM im Webbrowser angezeigt werden.
zu 5.: Videostream im Webbrowser anzeigen, jedoch den ESP32-CAM mit der Powerbank versorgen
Das folgende funktioniert nur, wenn der Hotspot an den ESP32-CAM bei erneuter Anmeldung wieder die gleiche IP-Adresse vergibt! Dies kann bei einem W-LAN-Router eingestellt werden. Bei einem Android-Hotspot muss das nicht unbedingt so eintreffen.
|
Am Android-Gerät kann verfolgt werden, dass nach Abkoppeln des ESP32 vom PC/Laptop nur noch ein Gerät (der Laptop/PC) verbunden ist. Nach Verbinden mit dem Akku erscheint dann wieder, dass zwei Geräte verbunden sind. Jetzt muss sich die Webseite neu laden lassen und der Videostream kann auch wieder gestartet werden.
Bei Verwendung eines Access-Points statt eines Hotspots, wird der Access-Point über LAN-Kabel mit dem PC verbunden.
Für die Programmierung wichtige Konfigurationsdetails:
|
Ändert sich die IP-Adresse des esp32, so muß diese im Webbrowser und später im Java/Processing-Programm angepasst werden. Leider sind die IP-Adressen der angemeldeten Netzteilnehmer beim Android-Hotspot nicht einsehbar, wohingegen sie bei einem W-LAN-Router über die Web basierte Konfigurationsschnittstelle am PC einsehbar sind. Um diese bei Verwendung eines Hotspots dennoch sehen zu können, müsste der Bootvorgang einmal mit USB-Anschluss am PC vorgenommen werdeen und dabei der serielle Monitor bei der Arduino-IDE geöffnet werden, wo die IP dann angezeigt wird. Leider ist der Produktionsbetrieb Powerbank-basiert, was bedeutet, dass es wieder einen weiteren Bootvorgang gibt, bei dem sich theoretisch wieder die IP ändern könnte.
zu 6.: Videostream in einem Java-Processing-Programm empfangen
|
Vorteile bei Verwendung von Processing sind u.a. die relative Plattform-Unabhängigkeit (Betriebssystem) und die Möglichkeit gut zusammen arbeitende Klassenbibliotheken über das Netz nach zu installieren.
Eine solche hier benötigte Bibliothek ist die UDP-Bibliothek. Sie wird später benötigt, um PWM-Daten zur Motorsteuerung vom PC auf den esp32 zu übertragen. Nach dem ersten Start von Processing sollte diese Zusatzbibliothek über Sketch->Library importieren->Library hinzufügen ergänzt werden. Eine bestehende Internet-Verbindung ist dabei Voraussetzung. Ist die UDP-Zusatzbibliothek installiert, so erscheint sie unter Sketch->Library importieren->Library hinzufügen in der Auflistung als installiert (Haken):
Bild 0-5: UDP-Library taucht in der Liste der installierten Zusatz-Bibliotheken auf.
Zudem werden typischerweise Beispiele mit den Bibliotheken mitgeliefert. Diese Finden sich hier unter Datei->Beispiele->Contributed Libraries->UDP. Bibliotheken mit ergänzeneden Java-Klassen müssen in einem Sketch eingebunden werden. In dem Beispiel "udp" sieht man, dass dies mit dem Befehl "import hypermedia.net.*;" geschieht.
Bild 0-6: Verfügbare Beispiele nach Installation der Zusatzbibliothek UDP.
Beispiele, Quelltexte und kompilierte Bibliothek einer Zusatzbibliothek, liegen nach der Installation ein einem Bestimmten Ordner des Processing-Installationspfades. Unter Linux beim Benutzernamen fhbstud wäre das: /home/linux/sketchbook/libraries:
Bild 0-7: Installationspfad der Zusatzbibliotheken
Typischerweise besteht ein Bibliotheks-Ordnern aus den Unterordnern examples, library, reference, src und der Datei library.properties:
Bild 0-8: Unterordner eines Bibliotheks-Ordners.
Anstatt Bibliotheken über die Processing-Oberfläche zu installieren, kann auch einfach der entsprechende .zip-Ordner im Verzeichnis /home/linux/sketchbook/libraries entpackt werden.
Um die hier erforderlichen Installationen zu vereinfachen, sollten Sie genau so vorgehen, also die nachfolgenden .zip-Files in /home/fhbstud/sketchbook/libraries entpacken, FALLS DIESE ORDNER DORT NICHT BEREITS EXISTIEREN:
IPCapture.zip -- nötig, um den Videostream in einem Java/Processing-Programm empfangen zu können.
IPCapture gehört nicht zu den Bibliotheken, die über die Oberfläche von Processing installiert werden können. Die Originalquelle der hier verwendeten Version 0.3.1 ist hier verfügbar:
Mittlerweile gibt es eine neuere Version 0.4.0 (NICHT VERWENDEN):
Wie man sieht, liegen die Libraries eine Ebene tiefer als die eigenen Projekte (Sketches) in Processing. Der s.g. Sketch-Folder ist hier: /home/fhbstud/sketchbook. Bei Windows heißt der Sketchfolder "Processing".
Auch Sketche lassen sich als .zip-File importieren. Damit diese in der Entwicklungsumgebung sichtbar werden (Datei->Sketchbook), muss Processing neu gestartet werden, nachdem man einen Projektordner im Sketchbook entpackt hat.
Hier kommt der eigentliche Versuch:
Nachdem die UDP-Library und die IPCapture-Library importiert sind, Sie mit dem PC bei Ihrem Hotspot angemeldet sind und danach des esp32 mit dem Programm esp32_CamWebServer001 geflasht und gebootet haben (vergl. weiter oben), kann der folgende Sketch installiert und getestet werden:
Passen Sie dazu den Sketch individuell an, indem Sie in Zeile 13 die IP-Adresse Ihres esp32 eintragen, wie sie aktuell vom Hotspot vergeben wurde:
Siehe auch FAQ#8
cam = new IPCapture(this, "http://192.168.137.92:81/stream", "", "");
Code 0-1: Anzupassende Zeile 13 im Sketch CaptureJavaRT2022_001.
Hinweis: :81 gibt den Port an. 81 ist derjenige für Streaming-Daten, Port 80 der für HTML-Daten. Der Zusatz /stream startet unmittelbar beim esp32 das Streaming, so, dass keine Benutzerinteraktion dazu nötig ist.
Nachfolgender Screenshot zeigt einen Teil des Quelltextes und das Angezeigte Videobild:
Bild 0-9: Erfolgreich laufender Test: Der Videostream wird im Java/Processing-Programm "CaptureJavaRT2022_001" angezeigt.
Bild 0-10: Unveränderter Hardware-Aufbau, jedoch Versorgung über Akku.
Weitere Hinweise zu den hier angeschnittenen Themen:
... zu Processing: 78_Processing... zu UDP: 30_Informatik3/16_Nuetzliches/05_Internetprogrammierung/04_Java