Raspberry Pi Kameramodule überprüfen

Für den Raspberry Pi existieren eine Reihe von offiziellen Kameramodulen. Softwareseitig existieren mit den rpicam-apps, eine Reihe von Werkzeugen um diese zu testen. Dazu müssen diese im ersten Schritt installiert werden:

apt install rpicam-apps

Anschließend kann auf den Desktop-Varianten von Raspberry OS rpicam-hello gestartet werden. Dieses öffnet eine Vorschau, so das die Kamera überprüft und ihr Bild in Augenschein genommen werden kann. Daneben existieren weitere Tools, welche ebenfalls aus diesem Paket stammen. So kann mittels:

rpicam-jpeg --output test.jpg

ein Bild mit der Kamera aufgenommen und als Bilddatei gespeichert werden. Auch die Aufzeichnung von Video ist möglich, z.B. über rpicam-vid.

Probleme mit der Stromversorgung des Raspberry Pi 5

Für eine Installation nutzte ich einen Raspberry Pi 5. Neben einigen Problemen mit der thermischen Belastbarkeit zeigte sich noch ein anderes interessantes Verhalten, welches mit der Stromversorgung zusammenhing. Versorgt würde der Raspberry Pi über ein USB-Kabel, welches an einem Industrienetzteil angeschlossen war.

Besagte Installation

Am Rechner selbst waren einige USB-Geräte angeschlossen, welche sporadisch ausfielen und wieder neu starteten. Normalerweise würde der Raspberry Pi die Spannung per Power Delivery mit dem Netzteil aushandeln. Schlägt dies fehl, kann es zu beschreibendem Verhalten kommen, da der Strom für die USB-Geräte auf 600 mA limitiert wird. Um dieses Problem bei einem ausreichend dimensionierten Netzteil zu umgehen, kann der Parameter usb_max_current_enable gesetzt werden. Dazu muss im ersten Schritt die entsprechende Konfiguration bearbeitet werden:

nano /boot/firmware/config

Dort wird nun der Parameter (im Bereich all) auf den Wert 1 gesetzt:

usb_max_current_enable=1

Nach einem Neustart sollte das Verhalten verschwinden, solange die neue Limitierung (etwa 1,6 Ampere) nicht überschritten wird.

Kiosk-System auf dem Raspberry Pi einrichten

Wer auf einem Raspberry Pi ein Kiosk-System einrichten möchte, kann hierfür mit dem Raspberry OS Lite beginnen. Dort sollte über einen Aufruf von raspi-config der Autologin aktiviert werden (System Options -> S6 Auto Login).

Im nächsten Schritt wird der Wayland Compositor Sway installiert:

apt install sway xwayland

Nach der Installation wird im lokalen Nutzer, welcher für den Kiosk-Modus benutzt werden soll, eine Konfiguration-Datei angelegt:

mkdir -p ~/.config/sway/
nano ~/.config/sway/config

Diese wird mit folgender Konfiguration befüllt:

# Sway kiosk configuration for Raspberry Pi + Raspberry Pi Touch Display 2

# Configure sway
default_border none
default_floating_border none

# Set and transform output
output DSI-2 transform 90

# Execute application
exec_always sh -c '/home/seeseekey/testapp'

Die Konfiguration sorgt dafür das Sway rahmenlos arbeitet und der Bildschirm des Raspberry Touch 2 Display um 90 Grad gedreht wird. Im letzten Schritt wird in der Konfiguration eine Applikation gestartet.

Für Debugzwecke können daneben bei Bedarf noch folgende Zeilen hinzugefügt werden:

# Debug (write outputs and tree into file)
exec_always sh -c 'sleep 4 && swaymsg -t get_outputs > /tmp/outputs.json'
exec_always sh -c 'sleep 4 && swaymsg -t get_tree > /tmp/tree.json'

Zwar ist mit dieser Konfiguration das Display gedreht, aber die Eingaben werden noch in der ursprünglichen Rotation übermittelt. Hierzu muss im ersten Schritt mittels libinput-tools das Gerät ermittelt werden:

apt install libinput-tools
libinput list-devices

Nachdem das Touchscreen-Gerät ermittelt wurde, kann der Name des Gerätes genutzt werden, um eine udev-Regel zu definieren:

nano /etc/udev/rules.d/99-touch-rotation.rules

Dort wird die Rotation ebenfalls um 90 Grad gedreht:

ATTRS{name}=="11-005d Goodix Capacitive TouchScreen", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1"

Nachdem diese Konfiguration hinterlegt sind, wird eine lokale systemd-Unit erstellt:

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/sway.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Sway
After=graphical-session.target
Requires=graphical-session.target

[Service]
ExecStart=/usr/bin/sway
Restart=always
Environment=XDG_RUNTIME_DIR=/run/user/%U

[Install]
WantedBy=default.target

Anschließend kann die systemd-Unit aktiviert werden.

systemctl --user enable sway

Nun kann der Raspberry Pi neugestartet werden. Im Idealfall startet das System führt den Login durch und startet die Applikation. Sollte es hier Probleme geben, kann es an bestimmten Bibliotheken wie libxi6 liegen, welche noch nachinstalliert werden müssen.

Rust-Cross-Compiling unter macOS

Unter Rust ist das crosscompilen, also das Erstellen von Binaries für andere Architekturen relativ einfach. Im Falle des Raspberry Pi 5, muss als Erstes die passende Zielarchitektur installiert werden:

rustup target add aarch64-unknown-linux-gnu

Da Rusts Standardbibliothek std auf C-Bibliotheken wie libc aufbaut, muss gegen das Zielsystem gelinkt werden; in diesem Fall das Linux auf dem Raspberry Pi. Dafür wird die entsprechende Toolchain benötigt:

brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu

Nun muss das bestehende Rust-Projekt noch modifiziert werden. Dazu muss eine Cargo-Konfiguration unter .cargo/config.toml erstellt werden:

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"

Anschließend kann das Release erzeugt werden:

cargo build --release --target aarch64-unknown-linux-gnu

Nach dem Buildprozess findet sich das Kompilat im Ordner target/aarch64-unknown-linux-gnu/release/ und kann auf dem Raspberry Pi ausgeführt werden.

GPi CASE für den Raspberry Pi Zero

Gehäuse für die Raspberry Pi-Familie existieren wie Sand am Meer. Aus dieser Fülle stechen bestimmte Exemplare allerdings hervor, so wie das GPi CASE. Hierbei handelt es sich um ein Gehäuse für den Raspberry Pi Zero. Das Gehäuse orientiert sich an einem Game Boy und die Verarbeitung wirkt solide. Das Gefühl von Billigplastik kommt nicht auf.

Im Gegensatz zum Original, verfügt das GPi CASE über einige zusätzliche Tasten, wie z.B. vier Aktionsbuttons. Gewöhnungsbedürftig und nicht wirklich sinnvoll angeordnet sind die Schultertasten, welche sich mittig auf der Rückseite befinden. Ebenfalls im Gehäuse verbaut ist ein Bildschirm, mit 2,8 Zoll (ca. 7 cm) Diagonale, zur Anzeige der Inhalte.

Das GPi Case in Aktion

Der Raspberry Pi Zero wird in der Cartridge untergebracht, welche wie beim Game Boy, gewechselt werden kann. Damit können unterschiedliche Systeme genutzt werden. Die Leistung des Raspberry Pi Zero reicht problemlos für klassische Game Boy-Spiele aus und auch andere Konsolen wie das SNES können emuliert werden, allerdings gibt es hier, je nach Spiel, gelegentliche Slowdowns. Bezogen werden kann das Gehäuse über Retroflag, für knapp 70 US-Dollar.