Aus Raspberry Pi Geek 04/2014

Grafische Ausgaben mit dem C-Berry-Display (Seite 3)

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.

Abbildung 4: Vier Statusanzeigen für den QR-Code-Player im Überblick.

Abbildung 4: Vier Statusanzeigen für den QR-Code-Player im Überblick.

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

  1. C-Berry: http://admatec.de/news/presse/c-berry-meets-raspberry
  2. Artikel zum QR-Code-Player: Markus Nasarek, “Spielt wie gedruckt!”, RPG 03/2014, S. 58, http://www.raspi-geek.de/32086
  3. Raspbian: http://www.raspberrypi.org/downloads
  4. Grafiktreiber: http://www.airspayce.com/mikem/bcm2835/bcm2835-1.36.tar.gz
  5. Software zum LCD-Modul C-Berry: http://admatec.de/sites/default/files/downloads/C-Berry.tar.gz
  6. QRMusic-Skripte: https://github.com/rheikvaneyck/QRMusic
  7. Bitmap-Anzeige und Beispiel-Bitmaps: https://github.com/rheikvaneyck/CBerryDisplay
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