Systemkameras haben oft einen Anschluss für einen Fernauslöser. Mit drahtgebundenen Modellen kann man schon verwacklungsfreie Aufnahmen machen. Komfortablere Modelle sind zudem programmierbar und oft in Sender und Empfänger aufgeteilt, so dass man drahtlos über mehrere Meter auslösen kann. Aber immer muss verkabelt und alles umständlich mitgeführt werden. Da lobt man sich, wenn die Kamera vernetzbar ist. Moderne Geräte sind zwar mittlerweile WiFi-fähig, meistens macht es jedoch noch keinen richtigen Spaß, so zu arbeiten. Manchmal kann man sich nur zum eigenen WLAN verbinden und bei einer Direktverbindung von Kamera zu Smartphone-App ist der Setup eher kompliziert.
Warum also nicht ein eigenes Gerät zur WiFi-Fernsteuerung entwerfen, was die Verbindungsaufnahme zur Kamera vereinfacht, zum eigenen Kameramodell perfekt abgestimmt ist, und wesentliche Funktionen einfach per Knopfdruck bereithält…
Unsere „gpremote“ soll auf Basis der gphoto2-Bibliothek arbeiten, die unter Linux Debian auch auf dem Raspberry Pi funktioniert. Nach dem Einschalten der Fernbedienung soll ein Skript starten und die weitere Steuerung übernehmen. In der ersten Ausbaustufe soll unsere Fernsteuerung mindestens ein Sofortbild, eine kleine Fotoserie und eine zeitverzögerte Aufnahme auslösen können. Kein Problem eigentlich, das Ganze mittels gphoto-Bibliothek und etwas Python-Code zu bewerkstelligen. Wie man auf dem Raspi das Binding zu libgphoto2 installiert, um es in eigenen Python-Skripten verwenden zu können, kann man hier unter https://pypi.org/project/gphoto2/ nachlesen. Es werden viele Kameramodelle von Canon, Nikon und weiteren Herstellern unterstützt.
Bevor man diverse Funktionen nutzen kann, muss zuerst immer eine Verbindung zur Kamera hergestellt werden. Gphoto findet die eigene Kamera, wenn sie über USB am Hostrechner angeschlossen ist, oder man baut eine drahtlose Verbindung auf.
Unser Kameramodell, mit dem auch alles getestet wurde, ist eine Nikon Z6. Die hat einen Modus „Mit Smart-Gerät verbinden“, den gibt es auch bei anderen Modellen, wo man ähnlich vorgehen kann.
Wählt man nun den Accesspoint-Modus, bekommt man standardmäßig immer die gleichen Zugangsdaten angeboten. Die verwendet man im Anschluss für die Konfiguration des Pi, der sich fürderhin nicht mehr mit dem heimischen WLAN, sondern mit der Kamera verbinden soll. Ist das geschafft, findet gphoto nun die Kamera per WiFi ganz ohne Kabel. Da für das weitere Entwickeln nun keine ssh-Verbindung vom PC zum Pi mehr zur Verfügung steht (der ist ja nun mit der Kamera verbunden), sollte die Netzwerkkonfiguration der letzte Schritt sein, oder man hängt den Pi per HDMI an einen Monitor und schließt eine Tastatur direkt an.
Unser Trick ist, von /etc/wpa_supplicant/wpa_supplicant.conf zwei Kopien im gleichen Verzeichnis anzufertigen, die je nach Betriebsmodus eine Verbindung zum eigenen WLAN oder zur Kamera aufbauen. Später kann man im Menü der Fernbedienung mittels Tastendruck auf „Verbinden“ oder „Trennen“ den Modus umschalten, in dem mit der gerade benötigten Kopie überschrieben wird. Die neuen SSID und WPA-Key werden nach sudo ifdown/ifup wlan0 aktiv, ohne dass der Pi neu booten muss.
Unsere Hardware ist in einem fertigen Gehäuse untergebracht, in dem sich neben dem Pi noch ein OLED-Display, Lipo-Akku mit Ladeelektronik, ein I2C-Bus-Expander und vier Bedientaster nebst diversen passiven Bauelementen befinden. Und klar, für die Steuerung reicht uns ein Pi Zero W, für die angestrebte Kompaktbauweise ideal.
Wie immer sollten anfangs einzelne Module per Breadboard und schrittweise getestet werden. Unser OLED-Display mit SSD1306-Controller hat 128×64 Pixel, ist per I2C angebunden und es soll die Adafruit-GFX-Library verwendet werden.
Zum 3.7V-Lipo haben wir einen Baustein gewählt, der sowohl das Step-Up für die 5V-Schaltung übernehmen, als auch den Akku laden kann. Die Status-LED ist im Gehäuse nach außen sichtbar gemacht und schaltet von „Laden“ (rot) nach „Aufgeladen“ (blau) um. Am fertigen Gerät kann man später einfach ein 5V-Netzteil über Micro-USB anschließen und bei verbrauchtem Akku wieder aufladen.
Alles konnte recht platzsparend und mit geringer Bauhöhe aufgebaut werden. Im Deckel sind entsprechende Öffnungen für die Taster und die Ladekontrollanzeige untergebracht. Das Display sitzt stoßgeschützt unter einer Acrylscheibe, die auf der restlichen Fläche geschwärzt ist.
Um unter der am Pi aufgesetzten Buchsenleiste nur so viele Pins wie unbedingt nötig kontaktieren zu müssen, haben wir einen I2C-Expander vorgesehen. Unsere Schaltung „verbraucht“ damit keine zusätzlichen GPIO-Pins, nur der I2C-Bus wird genutzt. Das macht auch den Weg frei für zusätzliche HATs zur späteren Aufrüstung.
Der I2C-Expander funktioniert bidirektional, den Pegel seiner Ports kann man auf dem Bus auslesen. Davon sind bei uns vier mit den Gehäusetastern verbunden. Die sitzen gemeinsam mit dem OLED auf einer kleinen Platine in zweiter Ebene über dem Akku. Da reicht auch eine universelle Lochplatine. Und wie immer sollte man an eine gewisse Reparaturfreundlichkeit vom Aufbau denken, kann ja sein, dass man diverse Teile auch mal wechseln muss.
In der Praxis hat sich der 2000mAh-Lipo als durchaus ausreichend erwiesen, wo doch der Pi Zero und das OLED-Display nicht besonders stromhungrig sind. Vorausgesetzt, man trennt das Gerät nach getaner Arbeit vom Akku durch den Ein/Aus-Schalter am Gehäuse. Mit einem Read-Only Filesystem auf der SD-Karte des Pi könnte man auch auf den Menüpunkt „Shutdown“ verzichten und die Bedienung weiter vereinfachen. Das ist bei uns im nächsten Ausbauschritt vorgesehen.
So arbeitet unsere Fernbedienung aktuell nur mit einer einfachen Menüstruktur in zwei Ebenen, die Zahlen in der Tabelle entsprechen den vier Tastknöpfen am Gehäuse:
Hauptmenü: 1-Shutdown 2-Verbinden/Trennen 3-Foto 4-Weiter
Weiter-Menü: 1-Reboot 2-5er Serie 3-10s Verzögerung 4-Zurück
Und hier liegt wohl auch das größte Potenzial im Projekt, weiter auszubauen und spannende Funktionen nach den eigenen Vorstellungen zu ergänzen.
Mittels Gphoto in einem eigenen Python-Skript, wie in unserer Fernbedienung integriert, ist das mit etwas Vorkenntnis nicht schwer. Wie in der folgenden Beispielsequenz, wo eine Aufnahme ausgelöst und das gerade aufgenommene Kamerabild auf einem am Raspi angeschlossenen Stick unter dem Namen „pcstr“.jpg abgespeichert wird:
camera = gp.Camera()
camera.init()
file_path = camera.capture(gp.GP_CAPTURE_IMAGE)
dfile = pcstr + „.jpg“
target = os.path.join(‚/media/pi/STICK/images/‘ + dfile)
camera_file = camera.file_get(file_path.folder, file_path.name, gp.GP_FILE_TYPE_NORMAL)
camera_file.save(target)
camera.exit()
Wo Software und Hardware für unsere „gpremote“ nun stehen, kann in der Praxis losgelegt werden.
Kamera mit aktiviertem WiFi-Access einschalten, Fernbedienung einschalten. Die Verbindung (Punkt 2 im Hauptmenü) wird anfangs automatisch hergestellt. So einfach wollte ich es haben.
Natürlich gibt das Display auch noch Statusmeldungen aus, sofern sie wirklich notwendig sind. Dass nur eine kleine Anzeigefläche zur Verfügung ist, hat sich deshalb bisher nicht als wirklicher Nachteil herausgestellt.
Man hat nun eine Fernbedienung in der Hand, wo man alle Dinge aus der Ferne steuern kann, die man eben implementiert hat, ohne an der Kamera selbst „fummeln“ zu müssen. Die kann derweil gut ausgerichtet auf ihrem Stativ stehen bleiben.
An unserem Eigenbau sind alle Anschlüsse vom Pi von außen erreichbar. So kann man sich später auch zu Wartungszwecken oder mit einem Massenspeicher verbinden.
Wichtig war mir die Herausführung der GPIO-Leiste an der Oberseite, so dass man bei Bedarf zusätzliche HATs aufsetzen kann. Wie ein RTC-Modul zum Beispiel, um etwa draußen auch ohne Internetverbindung Aufnahmen in Echtzeit machen zu können.
Trotz dass meine eigene Kamera programmierbar und wie die meisten mit einer zeitverzögerten Auslösung ausgestattet ist, macht sich die Fernsteuerung gut. Denn nur so kann der Fotograf auch mit Abstand auf diverse Ereignisse reagieren, ohne am Gerät eingreifen zu müssen. Eine einfache und robuste Bluetooth-Fernbedienung hat meine Kamera leider nicht. So hat sich der Eigenbau gelohnt.
Gegenüber der vom Hersteller mitgelieferten Smartphone-App braucht es jetzt nur das Einschalten der Fernbedienung, die sich bei aktiviertem WiFi an der Kamera ohne weiteren Eingriff automatisch verbindet. Eine echte Erleichterung im Gelände. Das Handy bleibt derweil frei für alle andere Aufgaben.
Zukünftig sollen noch weitere Funktionen hinzugefügt werden. Schließlich eignet sich unser Teil auch als Alternative für teure Dockingstationen, um beispielsweise nach einer Fototour alle gerade aufgenommen Bilder von der Kamera per Funk ins heimische Netzwerk zu übertragen. Da soll in Zukunft noch etwas Arbeit ins Projekt einfließen…