Normalerweise kriegen Eltern von ihren Kindern was Gebasteltes als Geschenk. Manchmal freut man sich, manchmal fragt man sich, was man nun damit tun soll. Diesmal ist es jedoch anders: Die Eltern basteln was für die Kinder. Es sollte eine einfache Musikbox werden. Für kleinere Kinder sollte es sein und einfach zu bedienen.
Nach einiger Recherche ist meine Wahl auf den Raspberry Pi und der Phoniebox Software als Grundarchitektur gefallen. Die Idee war, die Kiste mit WLAN auszurüsten und mit Spotify zu verbinden. Beides wird zum Glück schon von der Software unterstützt. Mit verschiedenen RFID-Karten sollten dann unterschiedliche Playlisten angestossen werden können. Die Zeit war gekommen, ein paar Komponenten zu kaufen und einen Prototyp zu bauen. Ich war mir nämlich nicht sicher, ob der Plan mit den Spotify-Playlisten funktionieren würde. Zudem habe ich mich gefragt, ob die Soundqualität ausreichend sein wird und ob die Startzeit des Raspberry Pis nicht allzu viel Zeit in Anspruch nehmen wird.
Zuerst habe ich das neueste Raspian auf meinem Rasperry Pi 2 installiert, dann die folgenden Komponenten angeschlossen / installiert:
Tp-Link TL-WN823N – der WLAN Adapter
Der Treiber dieses USB WLAN Adapters ist sehr einfach zu installieren:
sudo wget http://fars-robotics.net/install-wifi -O /usr/bin/install-wifi
sudo chmod +x /usr/bin/install-wifi
sudo install-wifi
Phoniebox Software
Die Phoniebox Software lässt sich am einfachsten mit dem «one line install» – Kommando installieren. Die Videos auf der Phoniebox-Website helfen bei Unklarheiten weiter.
RFID RC522 – der RFID Reader
Der RFID Reader von Joy-It sollte – anders als oft beschrieben – mit allen acht Pins mit dem Raspberry Pi verbunden werden (siehe Hilfeseite zum RFID Reader). Danach einfach folgendes Script ausführen:
sudo /home/pi/RPi-Jukebox-RFID/components/rfid-reader/RC522/setup_rc522.sh
OnOff SHIM – der Stromwächter
Da der Raspberry Pi keinen Aus-Knopf besitzt und somit immer Strom zieht, auch wenn er heruntergefahren ist, habe ich nach einer Lösung gesucht, um den Akku zu schonen. Dabei ist meine Wahl auf den OnOff SHIM gefallen. Dieser steckt man ganz einfach auf die Steckleiste vom Raspberry Pi und nutzt nun die darauf sitzende Micro-USB-Buchse, um den Rechner mit Strom zu versorgen. Auf dem OnOff SHIM hat es auch einen kleinen Taster, womit man nun den Rechner einschalten kann. Herunterfahren über den gleichen Taster ist nur möglich, wenn man auch die entsprechende Änderung im System vom Raspberry Pi vorgenommen hat. Übrigens lässt sich statt des internen Tasters auch ein externer Taster anschliessen. Nach der Installation lässt sich der Raspberry Pi mit einem längeren Druck (ca. 3 Sekunden) auf den Taster herunterfahren.
curl https://get.pimoroni.com/onoffshim | bash
Damit der Raspberry in jedem Fall runterfährt muss er nicht nur auf poweroff sondern auch auf halt hören. Damit muss die Datei in /lib/systemd/system-shutdown/gpio-shutoff entsprechend geändert werden:
#!/bin/sh
#
# OnOff SHIM exposed by cyperghost for retropie.org.uk
# This is mandatory for proper SHIM shutdown!
poweroff_pin="4"
led_pin="17"
if [ "$1" = "poweroff" ]; then
/bin/echo $led_pin > /sys/class/gpio/export
/bin/echo out > /sys/class/gpio/gpio$led_pin/direction
for iteration in 1 2 3; do
/bin/echo 0 > /sys/class/gpio/gpio$led_pin/value
/bin/sleep 0.2
/bin/echo 1 > /sys/class/gpio/gpio$led_pin/value
/bin/sleep 0.2
done
/bin/echo $poweroff_pin > /sys/class/gpio/export
/bin/echo out > /sys/class/gpio/gpio$poweroff_pin/direction
/bin/echo 0 > /sys/class/gpio/gpio$poweroff_pin/value
fi
if [ "$1" = "halt" ]; then
/bin/echo $led_pin > /sys/class/gpio/export
/bin/echo out > /sys/class/gpio/gpio$led_pin/direction
for iteration in 1 2 3; do
/bin/echo 0 > /sys/class/gpio/gpio$led_pin/value
/bin/sleep 0.2
/bin/echo 1 > /sys/class/gpio/gpio$led_pin/value
/bin/sleep 0.2
done
/bin/echo $poweroff_pin > /sys/class/gpio/export
/bin/echo out > /sys/class/gpio/gpio$poweroff_pin/direction
/bin/echo 0 > /sys/class/gpio/gpio$poweroff_pin/value
fi
Damit die Phoniebox auch richtig runterfährt, habe ich diesen Rat befolgt und folgendes Script installiert:
import RPi.GPIO as GPIO
import os
import time
from subprocess import check_call
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17, GPIO.IN)
i = 0
while i < 3:
if GPIO.input(17) == GPIO.LOW:
i = i + 1
if GPIO.input(17) == GPIO.HIGH:
i = 0
time.sleep(1)
check_call("/home/pi/RPi-Jukebox-RFID/scripts/playout_controls.sh -c=shutdown", shell=True)
Das Script habe ich hier abgelegt: /home/pi/onoffshim/onoffshim.py und eine zugehörige Servicedatei unter /etc/systemd/system/onoffshim.service erstellt:
[Unit]
Description=OnOffShim
After=network.target iptables.service firewalld.service
[Service]
Type=simple
Restart=always
WorkingDirectory=/home/pi/onoffshim
ExecStart=/usr/bin/python /home/pi/onoffshim/onoffshim.py
RestartSec=2
[Install]
WantedBy=multi-user.target
Und mit folgendem Kommando den Service aktiviert:
sudo systemctl enable onoffshim.service
Fügt man folgende Zeile in die /boot/config.txt Datei, so kann man über Pin 8 (GPIO 14) und Ground eine Status-LED anhängen (Widerstand nicht vergessen).
enable_uart=1
Fazit
Nach diesem doch sehr zeitaufwändigen Aufbau war es möglich, RFID Karten mit Spotify Playlisten zu verbinden und abzuspielen. Die Soundqualität (über Kopfhörer oder über einen Killburn, der temporär dafür hinhalten musste) war gar nicht so schlecht. Also gab ich mir selber grünes Licht für den weiteren Aufbau…
