Mehrere Kameras am Raspberry Pi
Mehr als eine Kamera am RasPi sind ein Problem: Die Schnittstellenzuordnung ändert sich beim Booten oder dem Wiederanschluß. Mit udev-Regeln verhindert man das.
Zwei Drucker, aber nur ein Kamerabild: das typische Anzeichen, dass OctoPrint mit den verkehrtern Schnittstellen arbeitet.
- Heinz Behling
Im Artikel "Druckserver für mehrere 3D-Drucker" (Make 4/20, ab Seite 98) haben Sie bereits zwei Instanzen des Druckservers OctoPrint eingerichtet. Die Herausforderung dabei: Die Schnittstellenbezeichnungen für die Drucker und die Kameras können sich bei jedem Bootvorgang, dem Wiederanschluss oder -einschalten der Drucker beziehungsweise Kameras ändern.
Der Druckserver jedoch braucht feste Bezeichnungen, sonst bringt er die Geräte durcheinander. Feste Zuordnungen der Schnittstellen können Sie mit Hilfe von udev-Regeln erreichen. Wie das für die Drucker geht, können Sie im Online-Artikel "RasPi: Feste USB-Schnittstellen-Namen durch udev-Regeln" lesen.
Ähnlich geht es auch mit den Kameras. Allerdings legt uns das Raspbian-Betriebssystem hier noch ein paar Steine in den Weg. Für jede angeschlossene USB-Kamera legt es nämlich mehrere Devices an. Selbst bei nur einer Kamera können da einige Einträge zusammenkommen, was Sie im Konsolenfenster mit dem folgenden Befehl kontrollieren können:
ls /dev |grep "video"
Aber über welches dieser Devices haben wir nun Zugriff auf das jeweilige Kamerabild? Um das herauszufinden, müssen wir zunächst den schon laufenden Webcam-Server von OctoPi beenden mit
sudo systemctl stop webcamd
Dann brauchen wir ein Programm, das uns das Kamerabild zur VerfĂĽgung stellen kann. In diesem Fall verwenden wir mjpg_streamer. OctoPi bringt das schon mit. Wechseln Sie daher ins Verzeichnis mit
cd mjpg-streamer
Dann probieren Sie einfach nacheinander alle zuvor gefundenen Video-Devices aus, indem Sie versuchen, das jeweilige Kamerabild zu streamen und mit Hilfe eines Wiedergabeprogramms wie etwa VLC anzuschauen. Falls VLC noch nicht nstalliert ist, holen Sie das nach mit
sudo apt-get install vlc
Falls Sie wie empfohlen ein RasPi-Kameramodul verwenden, lautet der Streaming-Befehl
./mjpg_streamer -o "output_http.so -w ./www-octopi -p 8080 -n" -i "input_raspicam.so -d /dev/v4l/by-path/platform-bcm2835-codec-video-index0"
Die Wiedergabe in VLC starten Sie unter Medien, Netzwerkstream öffnen mit dieser Adresse:
http://<octopi.local>:8080/?action=stream
Jetzt sollten Sie das Bild der RasPi-Kamera sehen. Beenden Sie den Streamer mit der Tastenkombination STRG und C oder mit
sudo killall mjpg_streamer
Sie können die Schnittstellenbezeichnung des Kameramoduls auch noch einfacher herausfinden mit dem Befehl:
ls -l /dev/v4l/by-path
Der gibt dann so etwas aus:
Da das Modul direkt am BCM-Chip des Raspis hängt, steht die erste Kameraschnittstelle somit fest: /dev/v4l/by-path/platform-bcm2835-codec-video-index0. Sie wird sich auch nach einem Bootvorgang nicht verändern (daher die Empfehlung für das Kameramodul).
Aber wir haben ja noch mindestens eine USB-Kamera. Mit diesem Befehl können Sie Bilder der USB-Kameras streamen:
./mjpg_streamer -o "output_http.so -w ./www-octopi -p 8080 -n" -i "input_uvc.so -d /dev/videoX"
Das X hinter video mĂĽssen Sie durch eine der zuvor ermittelten Nummern ersetzen. Falls das Resultat nach dem Befehl im Konsolenfenster so aussieht:
haben Sie ein Device verwendet, das kein Bild liefert. Probieren Sie alle Nummern (in diesem Beispiel sind das 1, 2, 3, 10, 11 und 12, siehe Bild oben) durch und notieren Sie sich die Nummern, bei denen Sie ein Bild erhalten, und zu welchem Drucker das Bild gehört. Nach jedem Start des mjpg_streamers und der Kontrolle des Bildes müssen Sie den Streamer übrigens von Hand beenden. Das geht entweder mit der Tastenkombination STRG und C oder mit dem Befehl
sudo killall mjpg_streamer
Jetzt haben Sie also die Device-Bezeichnungen, die im Moment die richtigen Schnittstellen bezeichnen. In diesem Beispiel steckt hinter /dev/video2 die USB-Kamera. Haben Sie mehr als zwei Kameras, bestimmen Sie so auch die anderen Device-Bezeichnungen und die dazugehörenden Drucker.