kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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:

  1. Ihr eigenes Smartphone als Hotspot, oder alternativ ein W-LAN-Router.
Arbeitsschritte
  1. Hotspot einrichten und starten
  2. Laptop/PC bei Hotspot anmelden
  3. Streaming-Programm für ESP32 anpassen, damit es sich beim Hotspot anmeldet, Sketch kompilieren und flashen.
  4. Videostream im Webbrowser anzeigen
  5. Videostream im Webbrowser anzeigen, jedoch den ESP32-CAM mit der Powerbank versorgen
  6. Videostream in einem Java-Processing-Programm empfangen
Erläuterungen

zu 1.: Hotspot einrichten und starten

Anleitung für Android:

  1. Gehen Sie auf Einstellungen -> Netzwerk & Internet -> WLAN und schalten das WLAN aus. Grund: Wir arbeiten nur mit einem lokalen Funknetz und nicht mit dem Internet.
  2. Gehen Sie auf Einstellungen -> Netzwerk & Internet -> Hotspot und Thetering -> WLAN-Hotspot
  3. Richten Sie einen Hotspot mit einem einfachen Namen (zukünftig HOTSPOTNAME genannt) und einem einfachen Passwort (zukünftig HOTSPOTPASSWORT genannt) ein.
  4. Sicherheit: WPA2-Personal
  5. Wählen Sie 2,4GHz Band aus.
  6. Schalten Sie bei Erweitert "Hotspot automatisch deaktivieren" aus.
  7. Schalten Sie schließlich den Hotspot ein.
Screenshot des aktivierten Hotspots am Android-Smartphone

Bild 0-1: Screenshot des aktivierten Hotspots am Android-Smartphone

zu 2.: Laptop/PC bei Hotspot anmelden

  • Trennen Sie bei Ihrem PC/Laptop alle bestehenden W-LAN oder LAN-Verbindungen.
  • Melden Sie nun Ihren PC/Laptop bei Ihrem eigenen Hotspot an.

zu 3.: Streaming-Programm für ESP32 anpassen, damit es sich beim Hotspot anmeldet, Sketch kompilieren und flashen.

Siehe auch FAQ#7

esp32_CamWebServer001.zip -- Projekt für Streaming-Versuch
  1. Laden Sie die Datei esp32_CamWebServer001.zip (s.o.) herunter und entpacken sie diese im Sketch-Ordner von Arduino, bei Linux: /home/USER/Arduino, bzw. /home/fhbstud/Arduino.
  2. Schließen Sie den ESP32-CAM via USB-Seriell-Umsetzer an den PC/Laptop an.
  3. Starten Sie die Arduino-IDE.
  4. VERBINDEN SIE DEN BOOT-mode Jumper beim ESP32-Board
  5. BETÄTIGEN SIE EINMAL RESET beim ESP32-Board.
  6. Wählen Sie in der IDE bei Werkzeuge "AI Thinker ESP32-CAM" aus und ansonsten die gleichen Einstellungen, wie bei "Zielstellung #2: Blinkende LED".
  7. Wählen Sie aus den Beispielen den Sketch "esp32_CamWebServer001" aus.
  8. WICHTIG: Speichern Sie das Beispiel unter dem Namen esp32_CamWebServer002 im Sketchbook ab, weil es angepasst werden muss.
  9. Wählen Sie bei Datei -> Voreinstellungen "Zeilennummern anzeigen"
  10. Tragen Sie in den Zeilen 22 und 23 HOTSPOTNAME und HOTSPOTPASSWORT ein, speichern, kompilieren und flashen Sie den Sketch.
Einstellungen bei

Bild 0-2: Einstellungen bei "Werkzeuge"

zu 4.: Videostream im Webbrowser anzeigen

  1. Belassen Sie den esp32 per USB verbunden, aber kappen Sie die Stromversorgung zwischen esp32cam, indem Sie die rote +5-Volt-Leitung vom USB-Seriell-Umsetzer zum esp32cam auf einer Seite herausziehen.
  2. ENTFERNEN SIE DEN BOOT-mode Jumper.
  3. Öffnen Sie in der IDE den Serial Monitor und setzen die Baudrate auf 115200.
  4. Verbinden Sie nun wieder die Stromversorgung zum esp32cam. Der bootet dann und sendet Textdaten an den Seriellen Monitor der Arduino-IDE
  5. Merken Sie sich die im seriellen Monitor angezeigte IP-Adresse und geben Sie diese in einem Webbrowser am PC/Laptop ein.
  6. Scrollen Sie auf der angezeigten Webseite nach unten und betätigen Sie "Start Stream". Das Video vom ESP32-CAM sollte dann erscheinen.
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-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

Nach Eingabe der IP-Adresse des ESP32-CAM in einem Webbrowser kann mit

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.

  1. Schließen Sie den seriellen Monitor.
  2. Trennen Sie die USB-Verbindung vom ESP32-CAM zum PC/Laptop.
  3. Verbinden Sie statt dessen den ESP32-CAM über die Powerbank. (BOOT-mode Jumper bleibt getrennt!)
  4. Laden Sie nach einiger Zeit die Webseite neu.
  5. FALLS DIE WEBSITE NICHT ERSCHEINT: Wiederholen verwenden Sie wieder USB zum PC und den Seriellen Monitor, um noch einmal alles zu kontrollieren.

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:

  • Das esp32-Programm "kennt" den Login für den W-LAN-Hotspot, aber es wird nicht die Ziel-IP (PC) benötigt, an die der Stream gesendet wird.
  • Das Empfängerprogramm benötigt die IP des esp32 im Hotspot-Netz.
  • Nehmen Sie die Anmeldungen beim Hotspot immer in der gleichen Reihenfolge vor, um möglichst keine IP-Änderungen anpassen zu müssen.

Ä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

  • Sie benötigen eine Version der Processing-Entwicklungsumgebung.
  • Sollte auf Ihrem System keine installiert sein, so ist diese über processing.org verfügbar.
  • Verwenden Sie die Version 3.5.4, nicht 4.X.
Download-Seite bei processing.org: https://processing.org/download

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):

UDP-Library taucht in der Liste der installierten Zusatz-Bibliotheken auf.

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.

Verfügbare Beispiele nach Installation der Zusatzbibliothek UDP.

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:

Installationspfad der Zusatzbibliotheken

Bild 0-7: Installationspfad der Zusatzbibliotheken

Typischerweise besteht ein Bibliotheks-Ordnern aus den Unterordnern examples, library, reference, src und der Datei library.properties:

Unterordner eines Bibliotheks-Ordners.

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:

udp.zip -- nötig, um Befehle über W-LAN vom PC an das esp32AV zu schicken.
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:

https://github.com/singintime/ipcapture/releases/tag/0.3.1

Mittlerweile gibt es eine neuere Version 0.4.0 (NICHT VERWENDEN):

https://github.com/singintime/ipcapture

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

CaptureJavaRT2022_001.zip -- Processing-Sketch, um den Videostream in einem Java/Processing-Programm anzeigen zu können.
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:

Erfolgreich laufender Test: Der Videostream wird im Java/Processing-Programm

Bild 0-9: Erfolgreich laufender Test: Der Videostream wird im Java/Processing-Programm "CaptureJavaRT2022_001" angezeigt.

Unveränderter Hardware-Aufbau, jedoch Versorgung über Akku.

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