Diesen Sonnabend haben wir die ersten Experimente mit dem Raspberry Pi Zero W gemacht. Das ist ein kleiner Computer mit WLAN, SD-Karte, USB und Kameraanschlus. Unsere Idee ist, damit eine Kamera für das Hasenhotel in der Station zu bauen und später auch für einen Vogel-Nistkasten.

Unsere Experimente waren von durchwachsenem Erfolgt. Nachdem wir relativ schnell Bilder und Videos übertragen konnten gab es leider sehr schnell und oft Verbindungsprobleme die erst mit einem Neustart behoben werden konnten. Zuerst dachten wir, es liegt an Überhitzung des Prozessors. Nachdem wir eine Serielle Konsole angeschlossen haben konnten wir sehen, dass es ziemlich zufällige verschiedene Ausnahmefehler im Betriebssystem sind. Es ergab keinen Sinn und auch das Internet wusste ersteinmal keinen Rat – außer „Arbeitsspeicher kaputt“.

Eine lange Suche hat ergeben, dass wohl die eingestellte Spannung für den Prozessor zu niedrig ist und deswegen Rechenfehler entstehen, welche die Software an mehr oder weniger zufälligen Stellen zum Absturz bringt. Nach Korrektur der Konfiguration scheint es jetzt zu gehen.

Bleibt noch die Frage der Zeitsteuerung, der Aufnahmesoftware und der Energieversorgung. Es gibt noch viel zu tun…

Das Beitragsbild von heute zeigt was die Hasen machen, wenn wir gerade nicht hinschauen. Deswegen brauchen wir eine Hasenhotel-Kamera! 🙂 Das Bild ist aus dem Codex „The Breviary of Marguerite de Bar“ aus dem Jahr ca. 1302 und wurde wiederentdeckt vom Sexy Codicology Team.

Die Hardware

Der Raspberry Pi Zero W ist nur 6,5*3cm groß und ca. 2cm Hoch mit dem Kühlkörper. Die Platine hat einen Anschluss für Kameras, den 40-Pin Erweiterungsstecker, ein Micro-USB für Strom, ein Micro-USB für Geräte, einen Mini-HDMI Anschluss für Bildschirme und einen microSD Kartenslot. Der Prozessor hat einen Rechenkern und 512MB Arbeitsspeicher. Der integrierte Graphikprozessor verarbeitet die Rohdaten von der Kamera. Zudem ist ein Funkchip und Antenne für WLAN und Bluetooth integriert. Man kann auch eine U.FL Buchse für externe Antennen auflöten.

Es gibt viele verschiedene Kameramodule für den Raspberry Pi. Wir haben eine einfache Kamera mit 160° Blickfeld ausgewählt. Der OV5647 Sensor hat 5 Megapixel und kann 1080p Videos mit 30 Bildern pro Sekunde liefern. Bei kleinerer Auflösung 640×480 Pixel sogar bis 90 Bilder pro Sekunde.

Für das Vogelhaus werden wir später eine Kamera mit Nachtsichtfunktion brauchen. Bei diesen ist der Filter gegen Nah-Infrarot Licht entfernt und es gibt Infrarot-Scheinwerfer dazu. Durch den fehlenden NIR-Filter klappt der Weißabgleich nicht wie gewohnt: Pflanzen mit Chlorophyl in den Blättern reflektieren viel NIR Licht und erscheinen im Kamerabild rostig rot statt grün. Aber Nachts sind alle Katzen grau – dann brauchen wir keinen Weißabgleich…

Betriebssystem einrichten

Auf der Raspberry Pi Webseite gibt es das Hilfsprogramm Raspberry Pi Imager mit dem wir die SD-Karte vorbereitet haben. Wir haben Raspberry OS Lite installiert und anschließend die Konfigurationsdateien bearbeitet.

WLAN einrichten

Auf der SD-Karte gibt es eine Partition Namens boot. Dort muss die Textdatei wpa_supplicant.conf angelegt werden. Der Inhalt sieht so aus:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
  ssid="NAME DES WLANS"
  psk="PASSWORT"
}

Diese Datei wird beim ersten Start automatisch an die richtige Stelle verschoben und dann das WLAN gestartet. Dank mDNS findet man den Rechner unter dem Namen raspberrypi.local im eigenen Netzwerk. Die Netzwerkadresse können wir aber auch über die Serielle Schnittstelle herausfinden.

$ ping raspberrypi.local
PING raspberrypi.local (192.168.178.33): 56 data bytes
64 bytes from 192.168.178.33: icmp_seq=0 ttl=64 time=68.995 ms
64 bytes from 192.168.178.33: icmp_seq=1 ttl=64 time=6.133 ms
^C
--- raspberrypi.local ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 6.133/37.564/68.995/31.431 ms

Um den Fernzugriff übers Netzwerk zu aktivieren muss zudem die Textdatei /boot/ssh angelegt werden ohne Inhalt. Dies aktiviert den Secure Shell Dienst auf dem Raspberry Pi.

Serielle Konsole einrichten

Am Ende der Konfigurationsdatei /boot/config.txt wird eine Zeile mit enable_uart=1 hinzugefügt, um die RXD und TXD Pins in dem 40-Pin Erweiterungsstecker zu aktivieren. Damit wirklich alle Ausgaben des Systems auf diesem Anschluss ankommen, muss in der Datei /boot/cmdline.txt die Reihenfolge Konsolen wie folgt umgedreht werden: console=tty1 console=serial0,115200. Der letzte console Parameter in der Liste wird als Standard-Konsole benutzt.

Nun kann man einen USB zu Serial Adapter anschließen. Verbunden werden muss GND mit GND, RXD am Adapter mit TXD am Raspi, sowie TXD am Adapter mit RXD am Raspi.

Ein einfacher Weg um über diese Serielle Schnittstelle mit dem Rasperry Pi zu reden ist mit dem Programm screen in einem Terminal: screen /dev/tty.SLAB_USBtoUART 115200. Der erste Parameter ist der Fernschreiber (teletype) der mit dem Raspi verbunden ist. Die Datei kann je nach Betriebssystem anders heißen. Der zweite Parameter ist die Übertragungsgeschwindigkeit und muss zu dem Wert in /boot/cmdline.txt passen.

Eine der letzten Textausgaben beim Starten ist die Netzwerkadresse die der Raspberry bekommen hat. Da gibt es eine Zeile wie diese: My IP address is 192.168.178.33. Nach dem Starten kann man sich mit dem Benutzernamen pi und Passwort raspberry einloggen.

Software aktualisieren

Nachdem der Raspi gestartet hat und man sich über SSH oder der Seriellen Konsole eingeloggt hat, kann die Betriebssystem-Software aktualisiert werden:

sudo apt update
sudo apt dist-upgrade
sudo apt install mc
sudo reboot

Kameraunterstützung aktivieren

Um die Kameraunterstützung zu aktivieren, haben wir zwei Zeilen am Ende der /boot/config.txt hinzugefügt bzw. die existierenden Zeilen entsprechend geändert:

start_x=1
gpu_mem=128

Das start_x sorgt dafür, dass die Firmware für die Graphikunterstützung beim Starten geladen wird. Ohne der geht die Kamera nicht. Die zweite Zeile gibt dem Graphikprozessor 128MB des Arbeitsspeichers. Es wird mindestens so viel für die Verarbeitung der Kameradaten gebraucht.

Weitere Informationen zu den Kameras:

Spannung konfigurieren

Laut der Tabelle im der Overclocking Anleitung soll der Parameter over_voltage nur für den Raspberry Pi Zero auf 6 statt 0 gestellt sein. Eine Überprüfung der Werte zeigt, dass die Hardware nichts davon weiß:

pi@raspberrypi:~ $ vcgencmd get_config over_voltage
over_voltage=0
pi@raspberrypi:~ $ vcgencmd get_config over_voltage_min
over_voltage_min=0

Kein Wunder also, dass es zu merkwürdigen Abstürzen kommt, wenn der Prozessor mal zu tun hat, hochtaktet und dann nicht genug Spannung anliegt, um im gewünschten Tempo arbeiten zu können. Daher muss am Ende der Datei /boot/config.txt der Parameter over_voltage=6 hinzugefügt werden. Laut Diskussionen im Internet soll wohl auch schon 2 reichen.

Für uns hat der erste Test mit 6 statt 0 erfolg gezeigt: eine Stunde Video mit 3GB Daten wurden aufgenommen und per WLAN übertragen. Die Temperatur des Prozessors stieg dabei auf 46°C.

Weitere Informationen:

Schreiben auf die SD-Karte reduzieren

Wir hatten später Probleme die durch diese Schritte entstanden sind. Zum Beispiel nicht mehr synchronisierte Uhr. Also bitte mit Vorsicht genießen und im Zweifel nicht ausprobieren.

Damit die SD-Karte länger hält, sollte nicht sinnloses Zeug wie Logdateien auf sie geschrieben werden. Nagut, manchmal wäre das für die spätere Fehleranalyse interessant. Aber dann könnte man die Logdaten auch gleich per WLAN weiterleiten. Zuerst entfernen wir ein paar unnötige Programme:

sudo apt remove --purge cron triggerhappy dphys-swapfile samba-common
sudo apt autoremove --purge

Dann binden wir Arbeitsspeicher-Dateisysteme in die Pfade ein, die häufig geschrieben aber nicht über den Neustart aufgehoben werden müssen. Dazu am Ende der Datei /etc/fstab folgende Zeilen hinzufügen:

tmpfs           /var/log        tmpfs   nodev,nosuid          0 0
tmpfs           /var/tmp        tmpfs   nodev,nosuid          0 0
tmpfs           /tmp            tmpfs   nodev,nosuid          0 0

Nun sagen wir dem Betriebssystem, dass es keine Auslagerungsdatei auf der SD-Karte geben wird. Dazu in der /boot/cmdline.txt den Parameter noswap am Ende der Zeile hinzufügen.

Das Paket fake-hwclock und ntp wird gebraucht, um die Uhrzeit des RaspberryPi zu korrigieren. Das sollte nicht entfernt werden. Ansonsten muss man das Datum und Uhrzeit per Hand jedesmal setzen oder ein RTC Modul an den RaspberryPi anschließen. Leider funktioniert die Uhrzeit-Synchronisation nicht mehr, wenn wir das tmpfs umgestellt haben wie oben beschrieben. Also Lösung:

sudo apt install -y ntp fake-hwclock
sudo cp /lib/systemd/system/ntp.service /etc/systemd/system/ntp.service
sudo nano /etc/systemd/system/ntp.service
# PrivateTmp=True auf PrivateTmp=false ändern; mit CTRL-O speichern, CTLR-X beenden
sudo systemctl daemon-reload
sudo systemctl enable --now ntp
sudo systemctl status ntp
# sollte nun keine Fehler mehr zeigen

Final können wir noch die Datei mit dem aktuellen DNS-Server verschieben, damit sie nicht immer wieder neu auf die SD-Karte geschrieben wird, wenn wir uns mit dem WLAN verbinden. Die tägliche Softwareaktualisierung können wir auch abschalten. Dann neu starten.

sudo mv /etc/resolv.conf /tmp/resolv.conf
sudo ln -s /tmp/resolv.conf /etc/resolv.conf
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.timer 
sudo reboot

Videos aufnehmen

Für’s erste ist das Programm raspivid sehr hilfreich. Damit kann man alle Parameter einstellen und die Daten direkt über eine Netzwerverbindung an einen anderen Rechner schicken. Dort kann man sie zum Beispiel mit dem Programm netcat empfangen und in eine Datei speichern. Also zuerst Netcat auf dem Empfänger-Rechner starten:

nc -l 8000 > test.h264

Dann auf dem Raspberry die Aufnahme starten:

raspivid \
  -v -n -w 1296 -h 972 -cd H264 \
  -t 0 -fps 24 -a 12 -pf baseline \
  -o tcp://192.168.178.32:8000

Die Aufnahme läuft so beliebig lang und kann mit Strg-C abgebrochen werden. Bei einer Stunde Video kommen ca. 2GB Daten zusammen. Das lässt sich bestimmt weiter reduzieren, da die effektive Auflösung mit dem Objektiv bei weitem nicht 5MP zu sein scheint. Wir haben aber auch noch nicht versucht, den Fokus einzustellen.

Kategorien: DigitaltechnikElektronik