Raspberry Pi Streamingclient mit HiFiBerry

2. August 2014 · Anwendungen · andreas · Kein Kommentar

Nachdem sich der Streamingclient im Alltag bewährt hat und auch die WiFi-Anbindung problemlos funktioniert, steht als letzter Schritt noch die Verbesserung der über den 3,5" Klinkenausgang nur mäßigenKlangqualität an. Neben der Wolfson Pi Audio Card, deren Treibersituation weiterhin schwierig bleibt gibt es als Alternative den HiFiBerry, der - ja nach gewählter Ausstattung - den Raspberry Pi auch gleich um zwei Chinchbuchsen erweitert.

Einzige Schwierigkeit bei der Installation ist die anfallende Lötarbeit, denn während die Wolfson Pi Audio Card die Verbindung für den p5-Anschluß integriert hat, muß beim HiFiBerry zum Lötkolben gegriffen werden. Die Aufgabe sollte aber auch mit geringen Kenntnissen und Fertigkeiten lösbar sein - für das “wie” gibt es ein eine extra Hilfeseite “Soldering the HiFiBerry”, auf der auch ein Demonstrationsvideo verlinkt ist.

Die weiteren Schritte sind schnell erledigt: HiFiBerry aufstecken und in der Datei “/etc/modules-load.d/raspberrypi.conf” die benötigten Module hinzufügen sowie das originale Soundmodul “snd-bcm2835” auskommentieren:

[root@alarmpi ~]# cat /etc/modules-load.d/raspberrypi.conf
bcm2708-rng
#snd-bcm2835
snd_soc_bcm2708_i2s
bcm2708_dmaengine
snd_soc_pcm5102a
snd_soc_hifiberry_dac

Nach einem Reboot sollte die Ausgabe von “aplay” (im Paket “alsa-utils” enthalten) dann das richtige Ausgabegerät anzeigen:

[root@alarmpi ~]# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
  Subdevices: 0/1
  Subdevice #0: subdevice #0

Da das originale Testscript für Raspbian ausgelegt ist und unter ArchLinux nur bedingt funktioniert, kann der abschließende Test auch manuell erfolgen

[root@alarmpi ~]# cd /tmp
[root@alarmpi tmp]# wget http://www.hifiberry.com/files/sin1000_48khz.wav
...
[root@alarmpi tmp]# aplay sin1000_48khz.wav

Hat alles geklappt, sollte nun ein Testsignal ertönen, ansonsten geht es auf die Fehlersuche - am besten mit einem Multimeter.

Optional: Initiallautstärke setzen

Da für HiFiBerry keine hardwaremäßige Lautstärke-Konfiguration (z.B. über “alsamixer”) existiert, ist es u.U. erforderlich, die softwaremäßige Initiallautstärke von gstreamer zu verändern. Hierzu sind zwei Änderungen notwendig:

Als erstes wird eine Variable entsprechend den beiden vorhandenen “friendly” und “uuid” in der Datei “/etc/conf.d/gmediarender” gesetzt, die Werte und deren Auswirkungen können der Dokumentation entnommen werden.

[root@alarmpi ~]# cat /etc/conf.d/gmediarender
#Friendly Name to display to network devices
friendly=hifi-pi gMedia UPnP Renderer

#UUID
#Change this to make different players unique
uuid=90aba109-6333-4669-85d1-d9316244f7f9

#initial volume
initvolume=-6

Als zweites muß diese Variable im Initscript “/etc/systemd/system/multi-user.target.wants/gmediarender.service” eingetragen werden:

[root@alarmpi ~]# cat /etc/systemd/system/multi-user.target.wants/gmediarender.service                                                                                                                                  [Unit]
Description=UPnP renderer using gstreamer
After=network.target

[Service]
Type=forking
EnvironmentFile=/etc/conf.d/gmediarender
ExecStart=/usr/local/bin/gmediarender -f "${friendly}" --gstout-initial-volume-db=${initvolume} -u "${uuid}"-d

[Install]
WantedBy=multi-user.target

Wichtig ist, darauf zu achten, daß beim Parameter “gstout-initial-volume-db” KEINE Anführungszeichen verwendet werden, da es sich hierbei um einen numerischen Wert und keinen String handelt.

Fehlersuche

Als erste Maßnahme empfiehlt sich, die Kontakte von der Unterseite des Raspberry Pi zur Oberseite des HifiBerry zu kontrollieren. Dies kann bei ausgeschaltetem Raspberry erfolgen.

Führt dies zu keinem Ergebnis, ist als nächstes eine Überprüfung der GPIO-Schnittstelle dran, für deren Grundlage z.B. die GPIO-Übersicht von mikrocontroller.net dienen kann.

Ein erster Test sollte das Anliegen der +5V und +3.3V am p5-Anschluss sicherstellen, bevor dann die Pins 28 bis 38 einzeln nach folgendem Schema geschaltet und überprüft werden können:

echo 28 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio28/direction
echo 1 > /sys/class/gpio/gpio28/value

Nach der Konfiguration als Ausgang sollte an dem jeweiligen Pin eine Spannung von 3.3V anliegen.

Ist dies nicht der Fall, so sollten die entsprechenden Lötstellen überprüft werden. Mit etwas Pech liegt auch ein Defekt am Raspberry Pi selbst vor - beim ersten hier eingesetzten Modell ließ sich Pin29 nicht zur Zusammenarbeit überreden.