Raspberry Pi Kamera per GPIO Knopfdruck auslösen

In diesem Tutorial geht es darum, wie man eine Raspberry Pi Kamera mittels eines Buttons auslösen kann. Dazu schließen wir einen Knopf an den GPIOs an und schreiben den entsprechenden Code via Python. Sobald das Bild erstellt wurde, können wir es weiterverarbeiten, z.B. indem wir mit OpenCV eine Farb- oder Gesichtserkennung darüber laufen lassen.

 

Zubehör

Raspberry Pi Überwachungskamera Livestream NoIR

Der fehlende IR Filter der offiziellen RPi Kamera sorgt für eine höhere Lichtempfindlichkeit.

Im Prinzip kann jede USB-Kamera, die am Raspberry Pi erkannt wird, für dieses Tutorial genutzt werden. Die offizielle Raspberry Pi Kamera hat allerdings den Vorteil, dass man keinen USB Anschluss verwendet, sondern nur den CSI Anschluss, der speziell für das Kameramodul angebracht wurde.

Falls du das offizielle Kamera Modul nutzen willst, so gibt es dies in zwei Varianten. Mit und ohne Infrarot Filter. Mehr Informationen zu den Unterschieden findest du hier.

Dieses Zubehör habe ich für das Tutorial verwendet:

Falls du diese Komponenten nicht einzeln erwerben willst, so empfiehlt sich ein Raspberry Pi Starterset. Diese Sind sowohl mit Raspberry Pi, als auch ohne verfügbar.

 

Raspberry Pi Kamera anschließen und GPIOs verbinden

Raspberry Pi Kamera CSI PortR

Die Kontaktseite des CSI Kabels muss nach oben.

Die offizielle Raspberry Pi Kamera lässt sich einfach über ein Flachbandkabel an den CSI Anschluss (Camera Serial Interface) anschließen. Die Kamera benötigt keine weitere Stromzufuhr und somit sind wir bereits fertig.

Um den Taster anzuschließen, bauen wir das folgende Schaubild nach. Der 10k Ohm Widerstand wird zwischen Masse (Ground) und dem GPIO 17 (Pin 11) gesetzt. Auf der anderen Seite des Tasters wird die 3.3V Spannung des Raspberry Pi’s angeschlossen (Pin 1):

Raspberry Pi Kamera per GPIO Knopfdruck auslösen_Steckplatine

Schaltplan für den Taster mit Pull-Down Widerstand.

 

Hier findest du noch eine gesamte Übersicht, aller GPIO Belegungen. Du kannst natürlich auch jeden anderen freien GPIO nutzen. Vergiss dann aber nicht, den Code entsprechend anzupassen.

Raspberry Pi GPIO Pin Belegung

Raspberry Pi GPIO Pin Belegung

 

Kamera-Software installieren und Python-Skript erstellen

Die Kamera ist standardmäßig deaktiviert und muss erst freigeschaltet werden. Gehe dazu in ein SSH Terminal und gib folgendes ein:

sudo raspi-config

Unter „Interfacing Options“ navigierst du zu „Camera“ und aktivierst diese. Danach kannst du aus dem Konfigurations-Assistenten raus, woraufhin der Raspberry Pi neugestartet werden muss.

Nach dem erfolgreichen Neustart geht es weiter, indem wir einen ersten Test machen. Wir nehmen ein Bild auf:

raspistill -o ~/img.jpg

Im Homeverzeichnis (/home/pi) befindet sich nun ein Bild mit dem Namen „img.jpg“. Du kannst dieses entweder direkt am Raspberry Pi ansehen, oder z.B. via Remotedesktopverbindung.

Hat das soweit geklappt, kommen wir zu unserem Skript. Hier möchten wir also bei jedem Tastendruck (GPIOs) ein Bild aufnehmen. Solltest du noch keine Erfahrung mit den GPIOs haben, ist dieses Tutorial hilfreich.

Python Skript zum Foto schießen per Knopfdruck

Zunächst erstellen wir eine neue Datei, in der wir unseren Python3 Code hinein schreiben. Anschließend führen wir diese aus.

sudo nano camera_button.py

Die Datei bekommt folgenden Inhalt:

Speichere mit STRG+O und beende den Nano Editor mittels STRG+X.

Was haben wir hier nun getan?

  • Zeile 1: Das Encoding ist wichtig, falls es mit Python2 ausgeführt wird, aber schadet nicht.
  • Zeile 2-4: Wir importieren die Bibliotheken, die wir gleich nutzen werden.
  • Zeile 7: Definition des GPIO Pins, an dem der Button angeschlossen ist (siehe Pin Belegung weiter oben).
  • In Zeile 9-12 befindet sich die Funktion, die aufgerufen wird, sobald der Button gedrückt wird. Hier kann noch mehr Code stehen, der ausgeführt werden soll. Unter anderem setzen wir einen Dateinamen und führen das Tool raspistill aus, das wir vorher schon getestet haben.
  • Zeile 15: Angabe, dass wir die GPIO Nummern statt Board Nummerierung nehmen wollen.
  • In Zeile 16 definieren wir den GPIO als Input und setzen einen Pull-Down Widerstand. Das letztere wäre nicht zwingend nötig, da wir das bereits per Schaltung gebaut haben, ist aber auch nicht verkehrt.
  • Zeile 17 gibt an, dass die Funktion aufgerufen wird, wenn sich der Status von 0 auf 1 („Rising“) verändert.
  • Zeile 19-23: Endlose While Schleife, damit das Skript nicht sofort beendet wird.

Anschließend wollen wir dieses Skript ausführen:

sudo python3 camera_button.py

Wir drücken nun den Taster und sehen, wie eine neue Datei erstellt wird.

Voilà! Im Homeverzeichnis wurde nun eine neue Datei angelegt. Dies kannst du in der Konsole auch herausfinden:

ls /home/pi/

 

3 Kommentare

  1. Zeile 1: Das Encoding ist wichtig, falls es mit Python2 ausgeführt wird, aber schadet nicht.
    Meintest du nicht, Das Encoding ist NICHT wichtig?

    Antworten
  2. Hallo,
    erstmal: Ich bin absoluter Raspi-Neuling…., und jetzt zwei Fragen:
    1. Board: Nachdem nichts gelötet werden muss, ist mir die Funktion des Boards bei diesem Projekt nicht ganz klar; es geht doch auch ohne, direkt, also: Taster Eins an Pin1, Taster zwei an Pin 11. Gut so?
    Dann erübrigt sich, glaube ich, im Programm die Zeile 15?
    2. Verstehe ich das richtig: Zwischen den Taster an Pin 11 und Pin 11 kommt ein Widerstand. Richtig?
    3. Was muss ich ergänzen, wenn die Fotos der Reihe nach auf USB-Stick gespeichert werden sollen?
    4. Gibt es was Ähnliches auch zum Drucken? Also: Tastendruck, und das Foto wird ausgedruckt?

    Erstmal vielen, herzlichen Dank und: Bleib(t) gesund! Heinz

    Antworten
  3. Hallo,
    erstmal: Ich bin absoluter Raspi-Neuling…., und jetzt zwei (vier, sorry) Fragen:
    1. Board: Nachdem nichts gelötet werden muss, ist mir die Funktion des Boards bei diesem Projekt nicht ganz klar; es geht doch auch ohne, direkt, also: Taster Eins an Pin1, Taster zwei an Pin 11. Gut so?
    Dann erübrigt sich, glaube ich, im Programm die Zeile 15?
    2. Verstehe ich das richtig: Zwischen den Taster an Pin 11 und Pin 11 kommt ein Widerstand. Richtig?
    3. Was muss ich ergänzen, wenn die Fotos der Reihe nach auf USB-Stick gespeichert werden sollen?
    4. Gibt es was Ähnliches auch zum Drucken? Also: Tastendruck, und das Foto wird ausgedruckt?

    Erstmal vielen, herzlichen Dank und: Bleib(t) gesund! Heinz

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!