Aus Raspberry Pi Geek 03/2014

Kindgerechter Audioplayer mit dem Raspberry Pi (Seite 3)

Für den Prototyp kam eine vorhandene Logitech-Fernbedienung zum Einsatz, deren Tastenbelegungen wir später auf die kompaktere Fernbedienung Seki Slim übertrugen [5]. Mit dem folgenden Befehl zeichneten wir lediglich die Tasten “Power”, “Vor”, “Zurück”, “Lauter”, “Leiser” und “Pause” auf:

$ sudo irrecord /etc/lirc/Logi.conf

Falls der Befehl beim von Ihnen verwendeten Modell Schwierigkeiten macht, ergänzen Sie den Aufruf um den Parameter -f, der den Raw-Modus von Irrecord aktiviert.

@L.Die Konfigurationsdatei Logi.conf binden Sie anschließend in die Hardware-Konfiguration /etc/lirc/hardware.conf ein (Listing 2). Dann richten Sie Irexec ein, das später ein weiteres Skript per Tastendruck ansteuert.

Listing 2

#/etc/lirc/hardware.conf
LIRCD_ARGS=""
START_IREXEC=true
LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES=""
LIRCD_CONF="/etc/lirc/Logi.conf"
LIRCMD_CONF=""

Die Konfiguration von Irexec wiederum findet sich in /etc/lirc/lircrc (Listing 3). Sie ordnet jedem Tastendruck einen Programmaufruf zu, in den ersten Zeilen beispielsweise der Taste KEY_POWER den Aufruf des Skripts remote.sh mit dem Argument power.

Listing 3

begin
 prog = irexec
 button = KEY_POWER
 config = sudo -u pi /home/pi/remote.sh power
end
begin
 prog = irexec
 button = KEY_NEXT
 config = sudo -u pi /home/pi/remote.sh next
end
begin
 prog = irexec
 button = KEY_PREVIOUS
 config = sudo -u pi /home/pi/remote.sh prev
end
begin
 prog = irexec
 button = KEY_VOLUMEUP
 config = sudo -u pi /home/pi/remote.sh volup
end
begin
 prog = irexec
 button = KEY_VOLUMEDOWN
 config = sudo -u pi /home/pi/remote.sh voldown
end
begin
 prog = irexec
 button = KEY_PLAY
 config = sudo -u pi /home/pi/remote.sh play
end

Die Skripte

Das Skript remote.sh (Listing 4) nimmt die Argumente power, next, prev, volup, voldown und play entgegen. Im Skript lösen die Ereignisse verschiedene Aufrufe von XMMS2 aus, sodass der Player einen Titel vor- oder zurückspringt respektive die Lautstärke senkt oder erhöht.

Das Argument power startet das Erkennen eines QR-Codes (Zeile 6). Dazu ruft das Skript das Programm Zbarcam auf. Dieses liest die Daten über die Webcam ein und gibt die erkannten Inhalte auf der Standardausgabe aus. Diese Ausgabe liest wiederum das Skript rbar.sh ein.

Die Option --prescale=320x240 reduziert die Auflösung der Kamera – die vorgegebene HD-Auflösung wäre viel zu detailliert und zu rechenintensiv. Der Schalter --nodisplay deaktiviert das Ausgabefenster, das Sie im Skript nicht brauchen.

Listing 4

#!/bin/bash
AUDIODEV=hw:0
arg="$1"
case $arg in
  "power")
    zbarcam --nodisplay -Sdisable -Sqrcode.enable --prescale=320x240 /dev/video0 | /home/pi/rbar.sh
    ;;
  "next")
    echo "Next Song"
    xmms2 next
    ;;
 "prev")
    echo "Previous Song"
    xmms2 prev
    ;;
  "volup")
    echo "volume 5 up"
    xmms2 server volume +5
    ;;
  "voldown")
    echo "volume 5 down"
    xmms2 server volume -5
    ;;
  "play")
    echo "toggle playback"
    xmms2 toggle
    status=$(xmms2 current)
    if [[ "$status" =~ ^Paused ]]; then
      play -q /home/pi/no.wav
    fi
    ;;
esac

Das Verarbeiten der erkannten QR-Code-Inhalte geschieht schließlich im Skript rbar.sh (Listing 5). Den zweizeiligen Text aus dem QR-Code sehen Sie in Listing 6: In der ersten Zeile steht der Interpret, in der zweiten der Titel des Albums. Daher liest rbar.sh in Zeile 5 und 6 zwei Eingaben. Die Zeilen 8 und 10 legen die Eingaben in die Variablen $artist und $album ab. Anschließend beendet das Skript mit killall zbarcam in Zeile 13 das Erkennen des QR-Codes.

Falls alles klappt, spielt das Skript einen lustigen Jingle ab, und die Wiedergabe startet. Ansonsten erklingt ein alternativer Ton, der auf einen Fehler hinweist. Auch dafür sollten Sie einen spaßigen Laut aussuchen: Das hilft dabei, im Fehlerfall die Frustration der kleinen Bediener in Grenzen zu halten.

Listing 5

#!/bin/bash
AUDIODEV=hw:0
while true; do
  read qr
  read qr2
  if [[ "$qr" =~ ^QR ]]; then
    artist=$(echo $qr | cut -d':' -f 3)
    echo "artist: $artist"
    album=$(echo $qr2 | cut -d':' -f 2-)
    echo "album: $album"
    if [[ "$album" =~ ^http ]]; then
      killall zbarcam
      xmms2 stop
      xmms2 clear
      xmms2 add $album
      play -q /home/pi/source/rbar/ok.wav
      xmms2 play
      exit
      s=""
    else
      s=$(xmms2 search album:"$album" | egrep -e "$album")
    fi
    if [[ -n "$s" ]]; then
      killall zbarcam
      xmms2 stop
      xmms2 clear
      xmms2 add album:"$album" -o "tracknr"
      play -q /home/pi/source/rbar/ok.wav
      xmms2 play
      exit
    else
      xmms2 stop
      play -q /home/pi/source/rbar/no.wav
    fi
    sleep 5
  fi
done

Listing 6

artist:Axel Scheffler
album:Der Gruffelo

QR-Codes generieren

Die QR-Codes zu den Alben erzeugen Sie mit dem Programm Qrencode auf der Kommandozeile. Erstellen Sie zu jedem QR-Code eine kleine Text-Datei qr.txt, die in zwei Zeilen die beiden Einträge für artist: und album: enthält. Mit folgendem Aufruf gibt die Software den QR-Code als PNG-Datei aus:

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben