{"id":112,"date":"2013-06-26T00:24:31","date_gmt":"2013-06-25T22:24:31","guid":{"rendered":"http:\/\/florianko.de\/blog\/?p=112"},"modified":"2013-06-26T00:24:31","modified_gmt":"2013-06-25T22:24:31","slug":"erste-schritte-mit-dem-kameramodul-fur-den-raspberry-pi","status":"publish","type":"post","link":"http:\/\/florianko.de\/blog\/2013\/06\/26\/erste-schritte-mit-dem-kameramodul-fur-den-raspberry-pi\/","title":{"rendered":"Erste Schritte mit dem Kameramodul f\u00fcr den Raspberry Pi"},"content":{"rendered":"<p>Da ist es mir doch glatt gelungen, f\u00fcr rund 30\u20ac eines der neuen Kameramodule zu ergattern, die inzwischen f\u00fcr den Raspberry Pi auf dem Markt sind &#8212; w\u00e4hrend manche H\u00e4ndler erstmal restlos ausverkauft sind und Versandtermine im September oder Oktober anpeilen. Es war zwar durchaus vorher schon m\u00f6glich, Webcams am RasPi zu betreiben und diesen so etwa als Camserver zu verwenden, jedoch war dies stark von der verwendeten Hardware abh\u00e4ngig, da nicht alle Treiber zuverl\u00e4ssig liefen. Das Kameramodul hingegen ist an den Pi angepasst und wird direkt \u00fcber die gerade daf\u00fcr vorgesehene CSI-Schnittstelle angeschlossen.<\/p>\n<p><!--more--><\/p>\n<h4>Technische Details<\/h4>\n<p><div id=\"attachment_204\" style=\"width: 157px\" class=\"wp-caption alignleft\"><a href=\"http:\/\/florianko.de\/blog\/wp-content\/uploads\/2013\/06\/RaspiCam2.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-204\" src=\"http:\/\/florianko.de\/blog\/wp-content\/uploads\/2013\/06\/RaspiCam2-147x150.jpg\" alt=\"Kameramodul\" width=\"147\" height=\"150\" class=\"size-thumbnail wp-image-204\" \/><\/a><p id=\"caption-attachment-204\" class=\"wp-caption-text\">Das Kameramodul<\/p><\/div> Die Rahmendaten, die das Kameramodul aufweist, sind nat\u00fcrlich nicht \u00fcberragend &#8212; das gesamte Raspberry-Projekt ist ja in erster Linie f\u00fcr T\u00fcftler und zu Lehrzwecken gedacht &#8212; k\u00f6nnen sich aber immerhin sehen lassen. So verf\u00fcgt das Modul \u00fcber einen 5 Megapixel Sensor und erm\u00f6glicht Videoaufnahmen &#8212; ohne Ton &#8212; mit 1080p (bei 30fps), 720p (bei 60fps) und VGA (bei 90fps), sowie Einzelbilder mit maximal 2592 x 1944 Pixel. Dabei ist die Platine kaum 10mm dick und nicht breiter als 2,5cm.<\/p>\n<h4>Auspacken und anschlie\u00dfen<\/h4>\n<p><div id=\"attachment_203\" style=\"width: 263px\" class=\"wp-caption alignright\"><a href=\"http:\/\/florianko.de\/blog\/wp-content\/uploads\/2013\/06\/RaspiCam1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-203\" src=\"http:\/\/florianko.de\/blog\/wp-content\/uploads\/2013\/06\/RaspiCam1-253x300.jpg\" alt=\"Anschluss des Kabels\" width=\"253\" height=\"300\" class=\"size-medium wp-image-203\" \/><\/a><p id=\"caption-attachment-203\" class=\"wp-caption-text\">Anschluss des Verbindungskabels<\/p><\/div>Geliefert wird die kleine Kamera in einem Antistatik-Beutel und man ist wohl auch gut damit beraten, die Warnung darauf ernst zu nehmen: Damit die Elektronik keinen Schaden nimmt sollte man sich erden bevor man die Kamera anfasst, indem man etwa einen Heizk\u00f6rper ber\u00fchrt. Die eigentliche Installation ist unkompliziert: Man zieht den Verschluss des CSI-Port nach oben (siehe Abbildung), achtet beim Einsetzen des Flachbandkabels darauf, wo die Kontakte sitzen und dass das Kabel auf beiden Seiten ebenm\u00e4\u00dfig in der Schnittstelle verschwindet, und dr\u00fcckt den Verschluss wieder nach unten. Das war&#8217;s mit der Hardware.<\/p>\n<h4>Kamera-Support aktivieren<\/h4>\n<p>Um die Kamera dann unter <a title=\"Homepage von raspbian.org\" href=\"http:\/\/www.raspbian.org\/\" target=\"_blank\" rel=\"noopener\">Raspbian<\/a> ((Auch andere Betriebssysteme laufen auf dem Pi, in der Entwicklung ist gerade sogar eine Portierung von Android.)) zum Laufen zu kriegen, muss der Kamerasupport aktiviert werden. Verwendet man eine aktuelle Version, ist dieser wohl schon integriert; ((Eine Schritt-f\u00fcr-Schritt-Anleitung wie man Raspbian installiert und konfiguriert, bietet etwa <a title=\"Zur Anleitung\" href=\"http:\/\/www.raspiprojekt.de\/anleitungen\/betriebssysteme\/1-raspbian-installieren-und-einrichten.html\" target=\"_blank\" rel=\"noopener\">raspiprojekt.de<\/a>.)) andernfalls muss man sein System zun\u00e4chst auf den neuesten Stand bringen:<\/p>\n<p>[white_box]<code>sudo apt-get update<br \/>\nsudo apt-get upgrade<\/code>[\/white_box]<\/p>\n<p>Anschlie\u00dfend muss man den Support noch in der Konfiguration aktivieren, indem man diese \u00fcber [white_box]<code>sudo raspi-config<\/code>[\/white_box] aufruft und den entsprechenden Men\u00fcpunkt anw\u00e4hlt. Zum Abschluss muss noch rebootet werden, bevor der eigentliche Spa\u00df beginnen kann.<\/p>\n<h4>Der eigentliche Spa\u00df<\/h4>\n<p>Nach dem die Prozedur der Einrichtung \u00fcberstanden ist, stehen zwei Kommandozeilenprogramme zur Verf\u00fcgung: <code>raspistill<\/code> dient der Aufnahme von Bildern, <code>raspivid<\/code> dementsprechend der Aufnahme von Videos. Beide bringen vielf\u00e4ltige Optionen mit, um die Aufnahme zu steuern. Ein einfacher Programmaufruf, um ein Bild aufzunehmen, s\u00e4he etwa so aus:<br \/>\n<code>raspistill -o \/pfad\/bild.jpg<\/code> <code>-o<\/code> oder <code>-output<\/code> definiert dabei den Speicherort bzw. den Dateinamen des aufgenommenen Bildes.<\/p>\n<p>Und ein simpler Aufruf, um ein Video von 20 Sekunden aufzuzeichnen, so:<br \/>\n[white_box]<code>raspivid -o \/pfad\/video.h264 -t 20000<\/code>[\/white_box] Auch hier wird mit <code>-o<\/code> der Ausgabeort und der Dateiname festgelegt. Der Parameter <code>-t<\/code> bestimmt die L\u00e4nge des Videos.<\/p>\n<p>Das sind nat\u00fcrlich nur die Grundlagen, die tats\u00e4chlichen M\u00f6glichkeiten reichen noch deutlich weiter. Eine <a title=\"Dokumentation auf GitHub.com\" href=\"https:\/\/github.com\/raspberrypi\/userland\/blob\/master\/host_applications\/linux\/apps\/raspicam\/RaspiCamDocs.odt\" target=\"_blank\" rel=\"noopener\">ausf\u00fchrliche, englischsprachige Dokumentation<\/a> gibt es nat\u00fcrlich auch.<\/p>\n<h4>Was man damit machen kann&#8230;<\/h4>\n<p>Ein Anwendungsbeispiel, das ich in den kommenden Tagen gerne mal ausprobieren m\u00f6chte, ist die Aufnahme von Zeitrafferaufnahmen. <code>raspistill<\/code> bringt daf\u00fcr schon alles mit, was man braucht. Ein Beispiel: Der Befehl<br \/>\n[white_box]<code>raspistill -o \/pfad\/bild_%04d.jpg -t 18000000 -tl 30000<\/code>[\/white_box] nimmt f\u00fcr eine Dauer von 5 Stunden (18000000ms) alle 30 Sekunden (30000ms) ein Bild auf und benennt es fortlaufend mit &#8222;bild_0001.jpg, bild_0002.jpg&#8220; usf.<\/p>\n<p>Nun geh\u00f6rt es zu den Eigenheiten von Linux, einen Prozess, der von einem Nutzer gestartet wurde, zusammen mit dessen Session zu beenden &#8212; unabh\u00e4ngig davon, ob der Prozess gerade aktiv ist oder nicht. Bedient man seinen RasPi also via SSH, so wird der Prozess beendet, sobald die Verbindung getrennt wird. Ideal ist das nicht. Vielmehr m\u00f6chte ich den RasPi nicht dauerhaft am LAN-Kabel halten oder nur im Empfangsereich meines WLAN verwenden. Dazu ist es notwendig, den Befehl <code>nohup<\/code> vorzuschalten, der Prozesse auch nach Beenden der Session &#8222;am Leben erh\u00e4lt&#8220;, bis der Prozess sein regul\u00e4res Ende erreicht hat. Das s\u00e4he dann so aus:<br \/>\n[white_box]<code>nohup raspistill -o a%04d.jpg -t 18000000 -tl 30000 &gt; \/dev\/null 2&gt;&amp;1 &amp;<\/code>[\/white_box] Zur Erl\u00e4uterung:<br \/>\nDer Programmaufruf von eben &#8212; <code>raspistill -o a%04d.jpg -t 18000000 -tl 30000<\/code> &#8212; wird als der Prozess \u00fcbergeben, der auch bei Beenden der Session beibehalten werden soll.<br \/>\n<code>&gt; \/dev\/null<\/code> und <code> 2&gt;&amp;1<\/code> dienen der Umleitung der Ausgabe (STDOUT und STDERR) des Prozesses &#8212; STDOUT wird nach <code>\/dev\/null<\/code> und STDERR in den Standardoutput umgeleitet.<br \/>\nDas abschlie\u00dfende <code>&amp;<\/code> sorgt schlie\u00dflich daf\u00fcr, dass der gesamte Vorgang im Hintergrund ausgef\u00fchrt wird. <\/p>\n<p>M\u00f6chte man den Vorgang dann doch vorzeitig abbrechen, kann man sich des Kommandos [white_box]<code>sudo pkill raspistill<\/code>[\/white_box] bedienen, um den Prozess zu terminieren.<\/p>\n<h4>Und wie komme ich an die Aufnahmen?<\/h4>\n<p>Um relativ einfach an die Bilder zu kommen, bediene ich mich einer Kombination zweier M\u00f6glichkeiten. Zum einen ist das Verzeichnis <code>\/boot\/<\/code>, das bei der Installation des Betriebssystems auf der SD-Karte angelegt wird, in FAT32 formatiert, sodass dieses auch angezeigt wird, wenn man die Karte auf einem Windows-Rechner ausliest. Dementsprechend habe ich die Gr\u00f6\u00dfe dieses Verzeichnisses angepasst (er nimmt jetzt den gr\u00f6\u00dften Teil meiner Speicherkarte ein) und dort einen Ordner namens <code>speicher<\/code> angelegt, in dem meine Aufnahmen abgespeichert werden.<\/p>\n<p>Zus\u00e4tzlich habe ich f\u00fcr besagten Ordner eine Samba-Freigabe angelegt, womit auf die darin gespeicherten Inhalte auch von Windows-Rechnern (oder anderen Ger\u00e4ten) im gleichen Netzwerk zugegriffen werden kann. Wie das geht, wird etwa <a title=\"Anleitung zur Einrichtung einer SMB-Freigabe in einem deutschen RasPi-Forum\" href=\"http:\/\/www.forum-raspberrypi.de\/Thread-tutorial-samba-windows-freigabe-server-installation-raspbian-debian\" target=\"_blank\" rel=\"noopener\">hier<\/a> beschrieben.<\/p>\n<h4>Zu viel zu tippen?<\/h4>\n<p>Wem das zu viel zu tippen ist oder wer ohnehin gr\u00f6\u00dftenteils vorgefertigte Parameter verwenden m\u00f6chte &#8212; oder sich schlicht die elende Umrechnung aller Zeiteinheiten in Millisekunden ersparen m\u00f6chte &#8212; der kann sich nat\u00fcrlich das Leben etwas leichter machen indem er ein eigenes Skript schreibt, das ihm die Arbeit abnimmt. Ich habe mich mal daran versucht einen Code zu schreiben, der das Aufnehmen von Time-Lapse-Serien nach der oben genannten Methode etwas vereinfacht. Da mir aber leider die Zeit fehlt, um ein ausgereiftes Skript zu programmieren, das eventuelle Fehler abf\u00e4ngt oder insgesamt &#8222;sauberer&#8220; programmiert ist, dient der folgende Code eher zu Inspirationszwecken. Er ist zwar an sich lauff\u00e4hig aber wie gesagt in einem eher rudiment\u00e4ren Entwickklungsstadium&#8230; Daher ist wohl der folgende Warnhinweis angebracht:<br \/>\n[alert_box]Die Benutzung des folgenden Codes erfolgt auf eigene Gefahr![\/alert_box]<\/p>\n<pre class=\"lang:sh decode:true\">#!\/bin\/bash\n\n#Variable f\u00fcr Ordnernamen mit aktuellem Datum setzen\nFOLDERNAME=$(date -u \"+%d-%m-%Y\")\n\n#Falls Ordner noch nicht vorhanden ist, diesen erstellen\nif [ ! -d \"\/boot\/speicher\/$FOLDERNAME\" ];\n    then\n    sudo mkdir \"\/boot\/speicher\/$FOLDERNAME\"\nfi\n\n#Variablendeklaration und setzen von Standardwerten\nDAUER=3600000    #1 Stunde\nINTERVALL=30000  #30 Sekunden\n\nDAUER=$[$1*3600000]\nINTERVALL=$[$2*1000]\n\n#Programmaufruf und R\u00fcckmeldung\nsudo nohup raspistill -o \/boot\/speicher\/$FOLDERNAME\/bild_%04d.jpg -t $DAUER -tl $INTERVALL &gt; \/dev\/null 2&gt;&amp;1 &amp;\necho \"Ausf\u00fchrung gestartet. F\u00fcr $1 Stunde(n) alle $2 Sekunden ein Bild.\"<\/pre>\n<p>Um dieses Skript nutzen zu k\u00f6nnen, legt man eine neue Datei mit der Endung <code>.sh<\/code> an &#8212; in meinem Fall hei\u00dft sie <code>tlapse.sh<\/code>. In dieser wird der vorgenannte Code eingetragen und die Datei gespeichert. Nun muss die Datei ausf\u00fchrbar gemacht werden:<br \/>\n[white_box]<code>chmod +x tlapse.sh<\/code>[\/white_box] Um nun global auf die Datei zugreifen zu k\u00f6nnen, verschiebt man sie noch wie folgt:<br \/>\n[white_box]<code>sudo cp tlapse.sh \/usr\/bin\/tlapse<\/code> ((Sollte man nicht der einzige Nutzer auf dem System sein, sollte man die Datei besser nach <code>\/usr\/local\/bin<\/code> verschieben.))[\/white_box] Danach kann das Skript von jedem Verzeichnis des Systems aus aufgerufen werden:<br \/>\n[white_box]<code>tlapse 3 30<\/code>[\/white_box] nimmt beispielsweise f\u00fcr eine Dauer von 3 Stunden alle 30 Sekunden ein Bild auf und speichert es am voreingestellten Ort.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Da ist es mir doch glatt gelungen, f\u00fcr rund 30\u20ac eines der neuen Kameramodule zu ergattern, die inzwischen f\u00fcr den Raspberry Pi auf dem Markt sind &#8212; w\u00e4hrend manche H\u00e4ndler erstmal restlos ausverkauft sind und Versandtermine im September oder Oktober anpeilen. Es war zwar durchaus vorher schon m\u00f6glich, Webcams am RasPi zu betreiben und diesen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[85,102,122,123,134],"class_list":["post-112","post","type-post","status-publish","format-standard","hentry","category-technik-it","tag-kameramodul","tag-maker-culture","tag-raspberry-pi","tag-raspbian","tag-shell-skript","post-preview"],"_links":{"self":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts\/112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/comments?post=112"}],"version-history":[{"count":0,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions"}],"wp:attachment":[{"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/media?parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/categories?post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/florianko.de\/blog\/wp-json\/wp\/v2\/tags?post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}