Phoniebox

Ich habe unserer Tochter zu Weihnachten eine Phoniebox gebaut. Grundsätzlich findet man alle nötigen Informationen auf der Webseite der Phoniebox, ich beschreibe hier rudimentär die Schritte die ich gemacht habe und die verwendete Hardware. Die Front wurde gefräst, der Rahmen vom OLED-Display mit PLA gedruckt und die Symbole gelasert, alles mit dem Snapmaker 2.0 A350.

Hardwareliste:

Raspberry Pi 3 Model B Rev 1.2
SanDisk 32GB SD Card
Raspberry Pi 3 GPIO expansion board
LED-Arcade Buttons (nicht verwendet)
1.3″ 4-Pin I2C OLED 128X64 mit sh1106 Controller
125kHz RFID Karten
RFID Reader EM4100/Tk400 125kHz
USB Buchse
EARU On/Off Schalter
HifiBerry MiniAMP
Pimoroni OnOff SHIM
Speedlink Twoxo Speaker
Trust Urban Primo PowerBank 10’000mAh
Dragan von IKEA
Östernäs von IKEA
EC11 Rotary Encoder als Lautstärkeregler
TTP223 Touch Sensoren als Bedienelemente

Hardware PIN-Belegung:

Device3.3V5VGNDGPIOs
OnOff SHIMXXX4, 17
MiniAMPX16 (mute),18, 19, 20, 21,26
Rotary EncoderXX5(A vol+), 6(B vol-), 13(C button/unused)
OLEDXX2(I2C SDA1), 3 (I2C SCL1)
Play/Pause ButtonXX12
Next ButtonXX22
Previous ButtonXX23
Power Button mit 5V LEDXXBTN-Pins auf OnOff-SHIM

Software:

Aktuelles Raspbian installieren, danach gleich SSH aktivieren und die WLAN-Config erstellen:

touch SD-Card/boot/ssh
vi SD-Card/boot/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CH
network={
 ssid="SSID"
 psk="password"
}

Wenn der raspi gestartet hat, gleich mit raspi-config folgendes erledigen:
– Passwort ändern
– Hostname ändern
– Partition auf gesamte Grösse der SD-Karte vergrössern
– Zeitzone setzen
– Booten in CLI
– raspi-config updaten

Reboot.
Danach noch auf aktuelle Pakete prüfen und ggf. nochmals booten:

sudo apt-get update && sudo apt-get upgrade

Und gleich noch die Firmware updaten:

sudo rpi-update
sync
sudo shutdown -r now


HifiBerry MiniAmp:
Folgendes in die /boot/config.txt eintragen:
dtoverlay=hifiberry-dac
Und den onboard auskommentieren:
#dtparam=audio=on

Ggf. Anpassen von /etc/asound.conf:

pcm.hifiberry {
          type softvol
          slave.pcm "plughw:0"
          control.name "Master"
          control.card 0
} 
pcm.!default {
          type plug
          slave.pcm "hifiberry"
}



Nach dem Reboot müsste das nun so aussehen:

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

OnOff Shim installieren:

curl https://get.pimoroni.com/onoffshim | bash

Danach noch kontrollieren ob der Daemon auch aktiv geschaltet ist, hold_time auch noch auf 0 gesetzt:

sudo vi /etc/cleanshutd.conf
daemon_active=1
hold_time=0

Phoniebox Software installieren, hier der Link zum Projekt.
Vorher noch den USB RFID-Reader connecten, der wird beim Setup gebraucht.
Blind vertrauen und den one-line installer ausführen:

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
  • WLAN überspringen, hab ich ja schon konfiguriert.
  • iFace ist Master
  • Spotify will ich nicht
  • MPD jetzt konfigurieren: Ja gerne.
  • Default location für MP3s ist OK: /home/pi/RPi-Jukebox-RFID/shared/audiofolders
  • Start installation: Ja gerne.
  • Während der Installation wird nach dem USB RFID-Reader gefragt, diesen dann aus der Liste angeben.

Jetzt ist Zeit ein Bier zu trinken…
Nach dem Reboot ist phoniebox installiert und das Webinterface sollte unter der IP des Raspi’s erreichbar sein.

Für den ersten Test ein mp3 hochladen und eine RFID-Karte zuweisen, geht ganz einfach im WebGUI. Damit der HiFiBerry MiniAmp funktioniert, muss noch ein Konflikt bei der GPIO-Zuordnung gelöst werden:

vi /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py

Die Zeilen mit den GPIOs 19 (volD) und 21 (halt) mal auskommentiert und neu gestartet, danach haben wir Sound!

Nächster Schritt: Taster für den OnOff SHIM. Dazu gibt es auf der Platine extra zwei Lötpunkte beschriftet mit BTN für einen Pinheader.
Der SHIM benötigt GPIO4 (Pin7), GPIO17 (Pin11) sowie Ground (Pin6), 5V (Pin2) und 3.3V (Pin1).

Der MiniAMP benötigt GPIOs 18-21 (pins 12, 35, 38 and 40).

3x Touch-Buttons für Play/Pause, Next/Fwd und Prev/Rwd.
Die Buttons brauchen GND, VCC und jeweils einen GPIO.

1x Drehknopf für Lautstärke, VCC, GND, A (GPIO5), B (GPIO6), C (not used)
Installation:

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/phoniebox-rotary-encoder.service.stretch-default.sample /etc/systemd/system/phoniebox-rotary-encoder.service 
sudo chown root:root /etc/systemd/system/phoniebox-rotary-encoder.service
sudo chmod 644 /etc/systemd/system/phoniebox-rotary-encoder.service
sudo systemctl enable phoniebox-rotary-encoder
sudo chmod +x /home/pi/RPi-Jukebox-RFID/scripts/rotary-encoder.py
sudo reboot

ggf. noch die Drehrichtung ändern und GPIO’s anpassen:

vi /home/pi/RPi-Jukebox-RFID/scripts/rotary-encoder.py

volumeup / volumedown tauschen und dann Dienst neu starten:

sudo systemctl restart phoniebox-rotary-encoder

OLED Display Installieren:

cd; rm o4p_installer.sh; wget https://raw.githubusercontent.com/splitti/oled_phoniebox/master/scripts/install/o4p_installer.sh; chmod +x o4p_installer.sh; ./o4p_installer.sh

Install: 1
OLED Controller sh1106: 2
Brightness normal: 2
Display Information full: 1
Install needed packages: 1
Warten bis installiert….
Option 2: Replace service for contrast-control
Reboot…

Danach müsste das OLED-Display bereits angesteuert werden. Falls nicht, mit raspi-config noch i2c aktivieren. Inhalt von /etc/modules:

i2c-bcm2708
i2c-dev


Da wir den Service ersetzen wegen Contrast Control, ist die neue gpio config nicht mehr unter dem Originalpfad:
~/RPi-Jukebox-RFID/scripts/gpio-buttons.py
sondern hier zu finden:
~/oled_phoniebox/scripts/gpio-buttons/gpio-buttons.py
Das muss man sich merken, sollte man Anpassungen an den GPIO’s machen müssen.

Shutdown Sound:
Folgende zwei Zeilen in die /usr/bin/cleanshutd ab Zeile 85 (if shutdown_trigger; then) einfügen und dann den Service neu starten: sudo systemctl restart cleanshutd.service

/home/pi/RPi-Jukebox-RFID/scripts/resume_play.sh -c=savepos && mpc clear
/usr/bin/mpg123 /home/pi/RPi-Jukebox-RFID/shared/shutdownsound2.mp3


Jetzt wird das angegebene mp3 abgespielt vor dem Shutdown. Bei mir wird dann aber nach erneutem Start nicht mehr von der vorherigen Position abgespielt. Finde ich aber nicht so tragisch.

Optimierung des Bootvorgangs:
Startzeiten der Dienste anzeigen: systemd-analyze blame
Benötigte Zeit zum starten anzeigen: systemd-analyze time

1. Mailclient entfernen:

sudo update-rc.d exim4 remove
sudo systemctl disable exim4.service
sudo systemctl disable hciuart.service


2. IPv6 deaktivieren:

sudo sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf

Optimierung in /boot/config.txt

# Boot Optimierung:
# Disables loading Bluetooth
dtoverlay=disable-bt
# Boot Delay Time
boot_delay=0
# the rainbow splash screen will not be shown on boot
disable_splash=1
# Initial Turbo in seconds; max. 60 seconds
initial_turbo=30
# SDCard overclock, needs at least an UHS1 Card!
dtoverlay=sdtweak,overclock_50=100

Am Meisten hat das SDCard Overclocking gebracht. Ein Reboot dauerte vorher 29s, danach “nur” noch 24s. Gemessen an der Dauer vom Absetzen des Befehls “shutdown -r now” bis wieder Musik spielt. Den Rest könnte man sich wohl sparen.

Strom sparen:
HDMI abschalten in /etc/rc.local

# Disable HDMI (enable with -p, status with -s)
/usr/bin/tvservice -o

Leave a Reply