Listing 6
#!/bin/bash
# Skript: convert_to_bmp.sh
if [[ -f $1 ]]; then
IMGFILE=$1
BMPFILE=${IMGFILE%.*}.bmp
OPTIONS="-resize 320x240 -background black -compose Copy -gravity center -extent 320x240 -depth 24 -alpha remove -alpha off -compress none BMP3:"
convert ${IMGFILE} ${OPTIONS}${BMPFILE}
else
echo "Kann die Datei nicht lesen"
fi
RESULT=$(identify ${BMP} | cut -d ' ' -f 2)
if [[ ${RESULT}='BMP' ]]; then
echo "Konvertierung OK: ${BMPFILE}"
else
echo "Hier ging was schief: ${RESULT}"
fi
Den Player erweitern
Der Musikplayer war bereits in der vorigen Ausgabe von Raspberry Pi Geek Thema: Das Projekt erlaubt die Auswahl von Audiodateien mithilfe von QR-Codes, die Steuerung erfolgt per Fernbedienung. Da der Player ohne Monitor auskommt, fehlen Informationen zum aktuellen Status der Anwendung. Deren Ausgabe übernimmt einfach das Programm zum Laden von Bitmaps aus Listing 3, das für jeden Status des Players die entsprechende Datei zeigt. In Abbildung 4 sehen Sie die vier möglichen Statusanzeigen in einer Übersicht.
Die aktuellen Skripte für den QR-Code-Player stehen in dessen Github-Repository [5] bereit. Die Variable EXEPATH müssen Sie entsprechend anpassen, damit die Software die Skripte findet. Um das Display anzusteuern, kopieren Sie das kompilierte Programm aus Listing 3 in das Skriptverzeichnis und passen anschließend die Skripte remote.sh und rbar.sh wie in Listing 7 und Listing 8 gezeigt an. Die Bilddateien Splash.bmp, Error.bmp, ScannQRCode.bmp und CurrentTitle.bmp müssen ebenfalls in diesem Verzeichnis liegen.
Listing 7
#!/bin/bash
# remote.sh
EXEPATH=/home/pi/QRMusic
AUDIODEV=hw:0
VIDEODEV=/dev/video0
OPTIONS="--nodisplay -Sdisable -Sqrcode.enable --prescale=320x240 -Sposition=disable"
arg="$1"
case $arg in
"power")
sudo ${EXEPATH}/loadbmp ${EXEPATH}/Splash.bmp
sleep 2
sudo ${EXEPATH}/loadbmp ${EXEPATH}/ScannQRCode.bmp
zbarcam ${OPTIONS} ${VIDEODEV} | ${EXEPATH}/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
aplay -q ${EXEPATH}/no.wav
fi
;;
esac
Listing 8
#!/bin/bash
# rbar.sh
EXEPATH=/home/pi/QRMusic
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
aplay -q ${EXEPATH}/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"
aplay -q ok.wav
sudo ${EXEPATH}/loadbmp ${EXEPATH}/CurrentTitle.bmp
xmms2 play
exit
else
xmms2 stop
aplay -q ${EXEPATH}/no.wav
sudo ${EXEPATH}/loadbmp ${EXEPATH}/Error.bmp
fi
sleep 5
fi
done
Mit den Anpassungen signalisiert der Player nun auf dem Display, womit er sich gerade beschäftigt. Lediglich bei der Anzeige des aktuellen Albums fällt etwas mehr Arbeit an, um die passende Bitmap anzuzeigen.
Mit etwas Fleißarbeit erstellen Sie für jedes Album aus dem Cover, das Sie sich von einem Online-Anbieter herunterladen, eine entsprechende Bitmap-Datei und benennen die Dateien dem Titel des Albums entsprechend. Wenn für jedes Album ein Bitmap vorliegt, ersetzen Sie in Listing 8 die Zeile 32 durch jene aus Listing 9.
Listing 9
${EXEPATH}/loadbmp "${EXEPATH}/${album}.bmp".
Fazit
Die gezeigten Beispiele kratzen nur an der Oberfläche der Möglichkeiten. Das Display bietet viel mehr Funktionen, von farbigen Ausgaben bis hin zu komplexen Diagrammen. Das Programmieren fällt nicht schwer, erfordert jedoch etwas Fleißarbeit, da Sie Texte und Grafiken pixelgenau auf das Display platzieren müssen.
Das Laden von Bitmap-Dateien fällt dagegen sehr leicht – und schon die Ausgabe von Statusanzeigen mit einfachen Bitmaps bietet eine sinnvolle Ergänzung für ein Programm wie den QR-Code-Player.
Der Autor
Marcus Nasarek ist Linux seit Langem treu und schwer begeistert von Skripting, der Programmiersprache Ruby und Projekten mit dem Raspberry Pi.
Infos
- C-Berry: http://admatec.de/news/presse/c-berry-meets-raspberry
- Artikel zum QR-Code-Player: Markus Nasarek, “Spielt wie gedruckt!”, RPG 03/2014, S. 58, http://www.raspi-geek.de/32086
- Raspbian: http://www.raspberrypi.org/downloads
- Grafiktreiber: http://www.airspayce.com/mikem/bcm2835/bcm2835-1.36.tar.gz
- Software zum LCD-Modul C-Berry: http://admatec.de/sites/default/files/downloads/C-Berry.tar.gz
- QRMusic-Skripte: https://github.com/rheikvaneyck/QRMusic
- Bitmap-Anzeige und Beispiel-Bitmaps: https://github.com/rheikvaneyck/CBerryDisplay






