Wie schon damals vor fast 40 Jahren: Erst die Software wählen, dann erst die Hardware. Natürlich hab ichs andersherum gemacht , denn der Raspberry Pi lag noch rum : )
Es gibt solch Softwareprojekte auch für den Arduino – hier gehts um Phoniebox auf dem Raspberry Pi. Aktuell in der Version 2.1.
Das Projekt findet man auf GitHub.
Alles beginnt wie immer mit einer Installation von einem Betriebssystem auf einer SD Karte für den Raspberry. Das geht dieser Tage sehr einfach: Auf die Softwareseite von raspberry.org gehen, den Imager runterladen und starten. In der Software dann das Betriebssystem und die SD Karte wählen, Klick und schon läd er das richtige Image runter und packt das auf die SD Karte. Der alte Weg (den ich wieder unwissend wählte) das Image vorher runterzuladen (2020-08-20-raspios-buster-armhf.img) und dann in dem Imager lokal auszuwählen geht natürlich auch.
Ich habe eine 128gb Karte gewählt, da ich ja einiges an Musik lokal auf die Box packen will. Man kann natürlich später die Musik auch aus dem Heimnetz holen (Netzlaufwerk beim PI einbinden) oder eben nur Streams abspielen. Muss man sehen, was man machen will.
Dann rüber zum Pi und die SD Karte rein und die Betriebssysteminstallation an der Kiste beenden (bei mir mit angeschlossener Tastatur und Monitor). Wenn das durch ist wird Phoniebox mit einem einfachen Shellaufruf installiert:
cd; rm buster-install-*; wget https://raw.githubusercontent.com/MiczFlor/RPi-Jukebox-RFID/master/scripts/installscripts/buster-install-default.sh; chmod +x buster-install-default.sh; ./buster-install-default.sh
Siehe https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/INSTALL-stretch#one-line-install-command. Insgesamt ist die GitHub Seite sehr hilfreich, sie ist aber nicht in allen Ecken aktuell und hat mir nur zu 98% geholfen. Die letzten zwei Prozent musste ich selber rausfinden – nachfolgend mein funktionierender Ansatz:
Während des Installationsskriptes kommen ein paar Abfragen. Für mich funktionierte (ggf nicht komplett da aus Erinnerungen):
Spotify? nein
WLAN Konfigurieren? nein (Hab ich bei der Pi Installation gemacht)
Audioname (iFace)? Speaker (USB Soundkarte angeschlossen)
GPIO? ja
RFID Leser? ja, den Neuftech gewählt (vorher auch angeschlossen)
Mixer? Amixer / Alsa (Das hat mich viel Zeit gekostet von MPD darauf zu wechseln. Mit MPD habe ich den Drehregler (Rotary Knob) nicht zum Laufen bekommen – Die Mixereinstellung kann man später auch im Webinterface umstellen)
Musikverzeichnis? /home/pi/musik
Wenn das Installationsskript fertig ist lief es bei mir noch nicht : ) Ich musste noch die Soundkarte richtig konfigurieren. Aus den Erfahrungen resultiert auch oben der Audioname, den ich vorher von der verwendeten Soundkarte folgendermassen herausgefunden habe:
pi@raspberrypi:~/RPi-Jukebox-RFID/scripts $ amixer scontrols
Simple mixer control 'Speaker',0
Simple mixer control 'Mic',0
Simple mixer control 'Auto Gain Control',0
Sollte man das bei der Installation nicht genau wissen ist das nicht schlimm. Man kann Speaker versuchen, oder auch die Vorgabe. Nachdem man dann die richtige Bezeichnung herausgefunden hat kann man diese in folgenden Dateien ändern:
~/RPi-Jukebox-RFID/settings/Audio_iFace_Name ~/RPi-Jukebox-RFID/settings/mpd.conf
Was man zusätzlich sicher anpassen muss (zumindest, wenn man eine Soundkarte verwendet) ist die ID der Soundkarte am USB Bus. Diese ID bekommt man schnell mit zwei verschiedenen Methoden raus:
pi@raspberrypi:~/RPi-Jukebox-RFID/scripts $ aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: Headphones [bcm2835 Headphones], Gerät 0: bcm2835 Headphones [bcm2835 Headphones]
Sub-Geräte: 8/8
Sub-Gerät #0: subdevice #0
Sub-Gerät #1: subdevice #1
Sub-Gerät #2: subdevice #2
Sub-Gerät #3: subdevice #3
Sub-Gerät #4: subdevice #4
Sub-Gerät #5: subdevice #5
Sub-Gerät #6: subdevice #6
Sub-Gerät #7: subdevice #7
Karte 1: Device [USB Audio Device], Gerät 0: USB Audio [USB Audio]
Sub-Geräte: 0/1
Sub-Gerät #0: subdevice #0
oder
pi@raspberrypi:~/RPi-Jukebox-RFID $ cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
Mit beiden Kommandos findet man heraus, dass meine Soundkarte auf ID 1 liegt. Dies muss in der mpd.conf entsprechend eingestellt werden. Die Voreinstellung ist dort 0 und die Zeile „device hw:0,0“ ist entsprechend auskommentiert. Bei mir sieht das nach Bearbeitung an der Stelle in der Datei so aus (mehr als das habe ich nicht verändert):
pi@raspberrypi:~/RPi-Jukebox-RFID/scripts $ sudo vi /etc/mpd.conf
audio_output {
type "alsa"
name "My ALSA Device"
device "hw:1,0" # optional
# mixer_type "hardware" # optional
# mixer_device "default" # optional
mixer_control "Speaker" # optional
# mixer_index "0" # optional
}
Wenn man das hinter sich hat sollte der Sound funktionieren. Den entsprechenden Drehknopf (rotary knob) und die angeschlosene LED müssen zur einwandfreien Funktion in der gpio_settings.ini entsprechend den Anschlüssen konfiguriert werden. Bei mir sieht das folgendermassen aus und sollte zur Anschlussdarstellung in Muk1: Hardware passen.
pi@raspberrypi:~/RPi-Jukebox-RFID/settings $ more gpio_settings.ini
[DEFAULT]
enabled: True
[VolumeControl]
enabled: True
Type: RotaryEncoder
PinUp: 12
PinDown: 23
hold_time: 0.3
timeBase: 0.1
functionCallDown: functionCallVolD
functionCallUp: functionCallVolU
[PlayPause]
enable: True
Type: Button
Pin: 27
pull_up: True
functionCall: functionCallPlayerPause
[StatusLED]
enable: True
Type: MPDStatusLED
Pin: 17
So, nun ist alles Konfiguriert bis auf eben genau die Musik, die spielen soll, wenn eine Karte über den RFID Leser gezogen wird. Das kann man einfach im Webinterface von Phoniebox machen – und dass das so einfach ist (nämlich ohne Benutzerzertifizierung) ist auch der einzige Nachteil der verwendeten Software: Wer die IP Adresse im Netz weiss, kann diese einfach aufrufen und Konfigurationsänderungen machen wie sie/er/irgendwer will. Mich stört es hier nicht so, soll ja einfach sein und im Normalfall bekommen die Bierlaunepartner darüber keine Information sondern nur die schönen physischen Karten durch die sie sich durchwühlen dürfen : -)
Unter dem Menüpunkt „Karten-ID“ einfach eine neue Karte über den RFID Leser ziehen. Die ausgelesene Kartennummer wird in das Karten-ID-Feld eingetragen. Danach einfach Musik zuweisen:
a) Einfach einen Ordner unterhalb des konfigurierten Musikordners (bei mir /home/pi/musik) wählen – Achtung! Ich habe es nicht hinbekommen, das unterhalb dieses Ordners eine weitere Ordnerstruktur existieren darf. Alle Datein müssen im ausgewählten Verzeichnis liegen. Das ist doof, wenn man einfach seine wahrscheinlich existierende Albumstruktur verwenden möchte : ( Ich wollte eh alles lokal auf die Box kopieren um auch an Ecken ohne mein WLAN Musik mit der Kiste spielen zu können (mal eben mit zum Nachbarn nehmen)
b) Internetstream unter „Stream verlinken“ einstellen. Hierzu muss nicht nur die Stream URL angegeben werden, sondern auch ein Verzeichnisnahme im Musikordner (in dem wird die URL und konfig des Streams abgelegt) und die Streamart.
c) Youtube – hab ich noch nicht ausprobiert
d) Wenn man Spotify nutzt sollte das auch irgendwie gehen : )
Für jede konfigurierte Karte kann man unter „Player“ noch einstellen ob die Musikdatein/Hörspieldatein genau da wieder begonnen werden sollen, wo sie zuvor beendet wurden (Hörspiele!) oder ob per Zufall eine Musikdatei ausgewählt werden soll (Dieses sorgt bei mir dafür, dass bei jedem neuen Kartenauflegen ein neuer Zufallssong ausgewählt wird, quasi aktuellen Song skippen : ). Die Funktion „Einzel“ habe ich bisher noch nicht ausprobiert.
Und drum und soweit: Pop Pop Marsch Marsch (frei nach Pops tönende Wunderwelt,- auch da fehlt mir noch eine Karte :)
Fragen oder Ärger bei der Installion? Hab ich was vergessen? Ich weiss auch nicht alles, aber Fragen per Mail immer gerne.