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. Zusätzlich habe ich aus einer Schublade vom Dragan eine Aufbewahrungsbox für die RFID-Karten gemacht.

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
Lichtwellenleiter

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

16 thoughts on “Phoniebox

  1. Hallo Stefan
    Danke für den Link auf GitHub, deutsch ist kein Problem.
    (schwiizerdüütsch au nid)
    Ich sehe, deine Box besteht in etwa aus den gleichen Komponenten, wie meine.
    Da ich eh schon lange einen update machen wollte (mit dem OnOff-Shield), werde ich wohl gleich deine Notitzen dafür nehmen. 🙂
    Gruss,
    Arjen

  2. Hi, ich habe den selben RFID reader verbaut. Leider kann ich ihn nicht ansprechen. Gab es bei dir keine Probleme damit? Gruss

    1. Hallo, ich bastle auch gerade eine phoniebox und bin auf ein ähnliches Problem gestossen, habe aber eine Lösung gefunden. Das install script scheint wohl auf der Debian Buster Version von Raspbian OS zu basieren. Seit kurzem ist aber eine neue Version aktuell (‘bulleseye’). Ich bin auf ein upgedatetes install script (bullseye-install-deault.zip) gestossen welches bei mir das Problem gelöst hat… https://github.com/MiczFlor/RPi-Jukebox-RFID/issues/1623

      beste Grüsse, Michael

  3. Hallo,
    Sieht super aus. Finde vor allem die Lösung mit den Touchsensoren super. Wo genau sind denn die Touchsensoren befestigt?
    Funktioniert es wenn sie unterhalb des Holzes sitzen?
    Viele Grüße

    1. Hallo Isabel! Danke für deinen Kommentar. Die Touchsensoren sind in der oberen Holzleiste eingesetzt, welche du auf Bild 3 siehst. Dort wo 1,2,3 beschriftet ist. Sie sind direkt unter dem Holz vom Dragan. Musste ein bisschen ausprobieren, da meine Finger nicht gleich funktionierten wie die kleinen Fingerchen meiner Tochter, aber es funktioniert überraschenderweise ganz gut! Nachteil ist ein bisschen, dass es vorkommen kann, dass man aus Versehen eine Taste berührt beim herumtragen der Phoniebox 😉
      Viel Spass beim Bauen!

  4. Hallo! Ich finde Deine Anleitung super!
    Kannst Du mir noch verraten, warum Du Dich für den MiniAMP entschieden und die Lautsprecher stattdessen nicht direkt mit dem Klinkenstecker mit dem Pi verbunden hast?

    Danke!

    1. Hallo Norbert! Danke für deinen Kommentar! Ich habe mich da voll und ganz auf die Empfehlung von Olaf Splitt, dem Erschaffer der Phoniebox, verlassen. Ich denke die Qualität über den Klinkenstecker ist nicht so der Hit, ausserdem ist dieser wohl nicht für passive Lautsprecher gedacht und verfügt über keine Entstörung, es kann also zu knacken und knistern kommen. Daher der kleine Verstärker, auch um die Lautsprecher direkt zu speisen.
      Gruss Stefan

  5. Danke Dir fürs Teilen der Materialliste und natürlich für die Inspiration.
    Ein Frage zu den Karten hab ich. Die sehen toll aus. Wie hast du die bedruckt?

    1. Hallo Philipp. Ich hab selbstklebendes bedruckbares Papier gekauft (gabs z.B. in der Migros). Die Bilder hab ich dann rechteckig ausgedruckt, aufgeklebt und den überstehenden Rand nachträglich abgeschnitten.
      Hält bis jetzt eigentlich recht gut. Eine Vorlage für die Bilder hab ich mit Word gemacht, so kann ich einfach die Bilder darin ersetzen und wieder ausdrucken.
      Gruss & Danke!
      Stefan

  6. Hallo Stefan
    Du hättest nicht per Zufall noch Fotos/Pläne wie du alle Innereien in der Box angebracht hast?
    Ich bin leider handwerklich nicht begabt/erfahren und hoffe mir ein paar Ideen abzuschauen.

    1. Hallo abuhamsa
      Leider hab ich da keine genauen Pläne, das hab ich frei nach Schnauze gebaut. Ich hab eine Holzleiste entlang der Powerbank in den Boden vom Dragan geklebt, dann hab ich die Powerbank rein gelegt und drüber eine Holzplatte geschraubt welche die Powerbank sowie den Raspi an seinem Platz hält. Diese Platte siehst du in Bild 3.
      Das Raspi ist zuunterst, darauf kommt das GPIO Expansion-Board und auf dieses wiederum der HifiBerry MiniAmp. Zwei Schrauben gehen durch den MiniAmp in die Holzplatte, damit ist das ganze “Raspi-Sandwich” befestigt. Für die Lichtwellenleiter habe ich Löcher in die Holzplatte gebohrt, dort wo die LED’s der Powerbank sind. Diese hab ich dann nach aussen geführt und mit Heissleim fixiert. So kann man eigentlich alle Elektronik-Komponenten ausbauen wenn man die Schrauben löst, ich wollte nichts festverklebtes oder so, so dass es reparierbar bleibt (obwohl ich bis heute noch keine einzige Komponente ersetzen musste). Wenn du spezifische Fragen hast, kannst du mich hier gerne nochmals kontaktieren. Viel Spass beim Bau!

  7. Hallo Stefan,
    diese Box sieht echt super aus! Und die Idee mit den Karten ist wirklich toll! Wie hast du die Rillen in dieser Box bekommen? Viele Grüße!

  8. Hallo Nk,
    Danke für dein Feedback! Ich habe den Rest der Frontplatte in die Grösse geschnitten, dass Sie in die Schublade vom Dragan passt. Die Rillen habe ich mit dem Snapmaker in das Stück der Frontplatte gefräst und dieses dann einfach rein geklebt.

Leave a Reply