Inhalt
Einleitung ↑
Ziel dieses kleinen Tutorials soll es sein einen Raspberry mit Kameramodul in Betrieb zu nehmen und automatisiert Bilder auf einen FTP-Server zu laden.
Da sich meine Linuxkenntnisse sehr in Grenzen halten habe ich sämtliche Anleitung die ich nützlich fand zusammengefasst und dokumentiert.
Viel Spass!
Installation ↑
Zuerst brauchen wir eine Software um das Image auf die
SD-Karte zu bekommen, dazu nutzen wir am MAC
ApplePi Baker (
Direktlink).
Das Image von
Raspbian gibt es über den
Direktlink.
Setup ↑
Jetzt booten wir von der SD-Karte und passen die
raspi-config an. Gute Anleitungen gibts es
hier und
hier.
Das Setup kann jederzeit wieder aufgerufen werden:
sudo raspi-config
Anpassungen die ich vergenommen habe:
- expand_rootfs (Lief allerdings bei mir auf Fehler, kann man probieren)
- change_pass
- internationalisation options: Change Locale, Change Keyboard Layout und change_timezone
- enable camera
- advanced: hostname/memory split/ssh/update
Dann schließen wir die Grundkonfiguration mit
[Finish]
ab
Anpassungen ↑
Nun booten wir vom Raspberry und wählen als Benutzer
pi
und Kennwort unser zuvor vergebenes. Ansonsten ist das Defaultpasswort
raspberry
.
Die nachfolgenden Schritte habe ich von
hier.
Wir holen uns erstmal Rechte als
sudo
sudo su -
Wir aktualisieren unserer Softwarequellen (hierfür solle der Pi natürlich am LAN-Kabel hängen)
aptitude update; aptitude upgrade
WLAN einrichten ↑
Ich nutze für die Internetkommunikation einen
WLAN-USB-Dongle.
Für diesen installieren wir
wpasupplicant
aptitude install wpasupplicant
Nachfolgend noch den komfortablen Editor
mc
,
Midnight Commander ist besonders elegant wenn keine Maus am Pi angeschlossen ist und man kopieren und einfügen muss.
aptitude install mc
Mittels
cd
wechseln wir in
/etc/wpa_supplicant
cd /etc/wpa_supplicant
Mit
wpa_passphrase
erstellen wir eine WLAN-Konfig für unser bestehendes WLAN und speichern diese in der Datei
wlan.txt
ID
steht hier für unsere WLAN-SSID und
PWD
für das Passwort:
wpa_passphrase ID PWD > wlan.txt
Jetzt öffnen wir mit
mcedit
die Datei
wpa_supplicant.conf
mcedit wpa_supplicant.conf
Wir wechseln in die letzte Zeile
Über das Menü
F9 (Menü)
-
Pfeil unten
-
Datei einfügen
schreiben wir
/etc/wpa_supplicant/wlan.txt
rein.
Jetzt ist der Inhalt von
wlan.txt
eingefügt ans Ende von
wpa_supplicant.conf
Nun einfach nur noch
F2 (Speichern)
,
Bestätigen
und
F10 (Beenden)
Nun muss WLAN nur noch korrekt in den Adaptereinstellungen hinterlegt werden.
Wir öffnen
interfaces
mit
mcedit /etc/network/interfaces
Ich verpasse dem WLAN-Stick eine feste IP um dann auch komfortabel darauf zugreifen zu können
Meine
interfaces
:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
address 192.168.2.37
netmask 255.255.255.0
gateway 192.168.2.1
iface default inet dhcp
wireless-power off
Damit hätten wir WLAN eingerichtet! Zu Sicherheit booten wir mal den Pi und kontrollieren
reboot
Mit
ifconfig
sehen wir ob
wlan0
auch unsere IP
192.168.2.37
gezogen hat.
Jetzt kann der Pi theoretisch von Ein- und Ausgabegeräten getrennt werden, alles weitere geht jetzt via
SSH.
FTP Server & Client ↑
FTP-Server
Lektüre für den FTP Server kann man
hier und
hier nachlesen.
Der Server ist insofern praktisch dass man im lokalen Netzwerk z.B. den Bilderordner auslesen kann
Nach unserem
reboot
sind wir natürlich kein
su
, also alle Eingaben jetzt mit
sudo
Zum Einsatz kommt
proftpd, ein weit verbreitester FTP Server für Unix Platformen
Also installieren wir:
sudo aptitude install proftpd
Die Konfiguration des Servers findet in der Datei
/etc/proftpd/proftpd.conf
statt, diese öffnen wir auch gleich
sudo mcedit /etc/proftpd/proftpd.conf
Um virtuelle Benutzer zu erstellen fügen wir folgende Zeilen am Ende ein:
DefaultRoot ~
AuthOrder mod_auth_file.c mod_auth_unix.c
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
RequireValidShell off
Wir legen einen neuen Ordner an:
mkdir /home/pi/PiFTP
Und passen die Rechte entsprechend an:
sudo chmod g+s /home/pi/PiFTP
sudo chmod 775 /home/pi/PiFTP
Den virtuellen Benutzer erstellen wir in
/etc/proftpd/
, also
cd /etc/proftpd/
Wir taufen ihn auf den Namen
pi
, dazu schreiben wir:
sudo ftpasswd --passwd --name pi --uid 33 --gid 33 --home /home/pi/PiFTP --shell /bin/false
Jetzt kommt eine Passwortabfrage für die man 2x ein beliebiges Passwort wählt.
Damit jetzt alles greift starten wir unseren FTP Server mal neu
sudo /etc/init.d/proftpd restart
FTP-Client
Dieser wird benötigt um unsere Bilder auf einen Web-FTP zu laden.
Hierzu nutze ich
lftp.
sudo aptitude install lftp
Damit wäre die Installation schon geschafft, allerdings lief es so auf Fehler. Ich musste noch die SSL-Verifikation deaktivieren
Dazu die Datei
/etc/lftp.conf
öffnen:
sudo mcedit /etc/lftp.conf
Und folgende Zeile am Ende hinzufügen:
set ssl:verify-certificate no
F2 (Speichern)
,
Bestätigen
und
F10 (Beenden)
Fertig!
Kamera ↑
Unser Ziel ist es ja unsere aufgenommenen Bilder dann via FTP zu verschicken, dazu konfigurieren wir erst einmal unsere
angeschlossene Kamera.
Die Kamera hat eine Rote LED die stören kann, diese deaktivieren wir. Damit dies dauerhaft bleibt schreiben wir es in die
/boot/config.txt
sudo mcedit /boot/config.txt
Und ans Ende kommt die Zeile
disable_camera_led=1
F2 (Speichern)
,
Bestätigen
und
F10 (Beenden)
Knipsen wir also mal ein paar Bilder, ein guter Anfang ist die
offizielle Doku.
Ab in unser
Homeverzeichnis mit
cd $home
Kamera ist angeschlossen, also los
raspistill -o cam.jpg
raspistill
nimmt uns die Datei
cam.jpg
auf.
Eine Übersicht zu den verfügbaren Parametern findet sich
hier.
Lange Rede, kurzer Sinn: meine finale Fassung:
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540 -vf -hf
Angepasster Kontrast, Qualität, keine Vorschau, Belichtungskorrektur, Auflösung von 960x540, umgedreht und gespielt.
Script ↑
Jetzt basteln wir uns ein Script welches bei Aufruf ein Bild knipst und direkt auf unseren Web-FTP-Server hochlädt.
Dazu erstellen wir im Verzeichnis
/home/pi/PiFTP
eine Datei namens
ftpupload.sh
touch ftpupload.sh
Diese öffnen wir auch gleich
mcedit ftpupload.sh
#!/bin/bash
#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort
#Verzeichnis wechseln
cd /home/pi/PiFTP
#alte Bilder löschen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg
#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540
#Bilder zusammenführen
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg
#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 'Leipzig'" w1.jpg webcam.jpg
#FTP Upload
lftp -e 'put /home/pi/PiFTP/webcam.jpg; bye' -u $USER,$PASS $HOST
In der
Anleitung sind die einzelnen Schritte erklärt, das erspare ich mir jetzt. Die benötigte
bg.png
findet man
hier.
F2 (Speichern)
,
Bestätigen
und
F10 (Beenden)
Wir müssen unser Script aber noch ausführbar machen, das funktioniert mit
chmod.
chmod +x ftpupload.sh
Script ist fertig, testen wir einen Aufruf:
./ftpupload.sh
Damit wir aber nicht jedes Mal das Script manuell aufrufen müssen erstellen wir im nächsten Kapitel eine Automatisierung.
Cronjob ↑
Ein
Cronjob wird die Aufgabe übernehmen alle 5 Minuten unser Script auszuführen.
Dazu öffnen wir
crontab
mit:
crontab -e
Und fügen mal wieder diese Zeile ans Ende ein:
*/5 * * * * /home/pi/PiFTP/ftpupload.sh
Mit
Strg
+
O
und
Enter
abspeichern, mit
Strg
+
X
beenden.
Cronjob fertig!
Zusammenfassung ↑
Wir haben also jetzt unsere Webcam fertig.
Geplant ist noch die Anbringung eines Temperatursensors und das Schreiben der aktuellen Temperatur in eine Datenbank & grafische Auswertung
Zusatz ↑
RAM-Disk ↑
Nach und nach fallen einem ja immer noch Optimierungen ein, meine erste war eine
RAM-Disk um die Schreibzyklen auf der SD-Karte zu minimieren.
Dazu erstellen wir in
/media/
den Ordner
ramdisk
:
sudo mkdir -p /media/ramdisk
Dann wird die Datei
fstab
geöffnet.
Unsere RAM-Disk hat hiermit eine Größe von 100MB.
sudo mcedit /etc/fstab
Und um folgende Zeile ergänzt:
tmpfs /media/ramdisk tmpfs defaults,size=100 0 0
Unser
ftupload.sh
Skript wird noch angepasst:
#!/bin/bash
#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort
#Verzeichnis wechseln
cd /home/pi/PiFTP
#alte Bilder löschen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg
cp bg.png /media/ramdisk
cd /media/ramdisk
#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 540
#Bilder zusammenführen
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg
#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 'Leipzig'" w1.jpg webcam.jpg
#FTP Upload
lftp -e 'put /media/ramdisk/webcam.jpg; bye' -u $USER,$PASS $HOST
Temp-Sensor ↑
Nun findet die Erweiterung um einen Temperatursensor statt, Infos dazu gibt es
hier,
hier,
hier,
hier und
hier.
Die nächsten Schritte werden weniger ausführlich, ich denke das meiste erschließt sich aus der gewonnenen Erfahrung und den gute dokumentierten Quellen.
Wir editieren
/etc/modules
und erweitern 2 Zeilen
w1-gpio pullup=1
w1-therm
Das gleiche geschieht mit
/boot/config.txt
, auch hier wird eine Zeile ergänzt:
dtoverlay=w1-gpio,gpiopin=4
Damit sind alle Voraussetzungen für den Sensor geschaffen, diesen nun anschließen mit
lsmod
testen, hier sollten jetzt unsere zwei Sensoren auftauchen:
wire 31280 2 w1_gpio,w1_therm
Im Ordner
/sys/bus/w1/devices/
gibt es einen Unterordner (pro Sensor) mit einem ähnlichen Namen
xx-xxxxxxxxxxxx
. Wir testen unseren Sensor, müssen aber noch den den eigenen Ordnernamen anpassen:
cat /sys/bus/w1/devices/xx-xxxxxxxxxxxx/w1_slave
Ausgabe dann in etwa:
53 01 55 00 7f ff 0c 10 10 : crc=10 YES
53 01 55 00 7f ff 0c 10 10 t=21187
Am Ende sehen wir unsere Temperatur
21187
die wir noch durch 1000 teilen müssen.
Dazu erstellen wir ein Script namens
temp
in
/usr/bin
mittels:
sudo touch /usr/bin/temp
Und editieren dieses
sudo mcedit /usr/bin/temp
Und fügen folgenden Inhalt ein:
#!/bin/bash
echo $(echo "scale=1; $(grep 't=' /sys/bus/w1/devices/w1_bus_master1/xx-xxxxxxxxxxxx/w1_slave | awk -F 't=' '{print $2}') / 1000" | bc -l) °C
Wobei der Ordnername des Sensors natürlich wieder angepasst werden muss.
Datei speichern und nun noch Rechte für das Script vergeben:
sudo chmod 0755 temp
sudo chmod +x temp
Jetzt ist von überall aus das Script aufrufbar:
pi@raspberrypi ~ $ temp
21.1 °C
Unser
ftpupload.sh
Script mit Temperatur sieht jetzt wie folgt aus:
#!/bin/bash
#FTP Server
HOST=FTP-Server
USER=FTP-Benutzer
PASS=FTP-Passwort
#Verzeichnis wechseln
cd /home/pi/PiFTP
#alte Bilder löchen
rm raspistill.jpg
rm pre_webcam.jpg
rm w1.jpg
rm webcam.jpg
sudo cp bg.png /media/ramdisk
cd /media/ramdisk
#Bild aufnehmen
raspistill -v --contrast 10 --quality 80 --nopreview --ev 4 --verbose -o raspistill.jpg -w 960 -h 54
#Bilder zusammenf?hren
composite -gravity center bg.png raspistill.jpg pre_webcam.jpg
#Bild beschriften
convert -pointsize 14 -fill orange -draw "text 10,526 '$(date +"%d.%m.%Y %T UTC") '" pre_webcam.jpg
convert -pointsize 14 -fill orange -draw "text 900,526 '$(temp) '" w1.jpg webcam.jpg
#FTP Upload
lftp -e 'put /media/ramdisk/webcam.jpg; bye' -u $USER,$PASS $HOST
Eigener Aufbau ↑
Eigener Aufbau am Fensterrahmen, mit 2 Temperatursensoren. Livebild
hier.
Quellen ↑