Menschen mit kleineren Kindern kennen sicherlich die Toniebox: Eine kleine Kiste, auf die kleine Kinder kleine Figuren stellen, worauf die Kiste dann Musik oder Hörspiele abspielt. Für Menschen mit Spaß am Basteln gibt es dazu ein alternatives Selbstbauprojekt, die sog. Phoniebox. Mein Freund Markus hat ein kleines Kind und Spaß am Basteln. Ich habe auch Spaß am basteln, also haben wir gebastelt. Das ist dabei herausgekommen:
Phoniebox kann sowohl lokal auf der Kiste gespeicherte Audiodateien abspielen, als auch Spotify (einzelne Songs, Playlisten, Alben, was auch immer). Hat die Box kein WLAN, dann spielt sie eben nur die lokalen Sachen ab, denn Spotify kann nur gestreamt werden.
Was jetzt noch kommt ist mehr eine Gedankensammlung und Dokumentation dessen, was wir gemacht haben als eine Anleitung, wie man den Koffer exakt nachbaut. Der eine oder andere brauchbare Hinweis ist aber vielleicht trotzdem dabei, und das meiste ist auf den ebenfalls verlinken Projektseiten ja bestens beschrieben.
Material
Hier eine Liste der von uns verbauten Teile:
- Kinderkoffer: Gibt es in verschiedenen Größen. Wir haben ein bisschen geplant und uns für den mit 25cm entschieden. Passt gut. Ca. 13 €.
- Raspberry Pi 3 Modell B: Der Pi 3 ist zwar aktuell kaum günstiger als der Pi 4, trotzdem haben wir und für den entschieden, weil IMHO der Pi 4 schon ein Wärmeproblem hat, was in so einem geschlossenen Koffer einfach nicht ideal ist. Die Leistung des Pi 3 reicht für das Projekt völlig aus. Kosten: Ca. 36 €.
- microSD-Karte 32 GB. Ca. 7 €.
- OnOff SHIM: Dieses Teil sorgt dafür, dass der Pi wirklich komplett stromlos gesetzt wird, nachdem er heruntergefahren wird. Denn dann und nur dann geht auch die Powerbank in den Standby. Könnte bei einer anderen Powerbank jedoch auch anders sein.
Ca. 8 €. - RFID-USB-Kartenlesegerät für EM4100-Karten. Ca. 12 €.
- RFID-Karten: 30 Stück ca. 8 €.
- Lautsprecher Die Lautsprecher sind aktiv, werden über USB mit Spannung versorgt, bekommen ihr Signal aber analog über 3,5mm-Klinke. Ca. 10 €.
- Soundkarte für den Pi: Der Pi hat zwar einen analogen Audioausgang, allerdings wird der Sound mit einer kleinen externen Karte doch deutlich besser. Ca. 9 €.
- Entstörfilter: Man hat doch ab und zu etwas Knacken und Knistern auf den Boxen, so ein Entstörfilter hilft. Ca. 11 €.
- Arcade-Druckknöpfe, ca. 10 €.
- Powerbank: War vorhanden. Irgendwas zwischen 15 € und 25 €.
- Kleinzeug: Eine grüne LED, ein Widerstand dazu, diverse Jumper-Kabel, Metallteile aus einem alten Metallbaukasten als Befestigungen, Heißklebepistole, Lötkolben etc.
Wenn man Zeit hat kann man viele der Komponenten natürlich auch über Aliexpress etc. beziehen.
Links
Ein paar Links, die wir immer wieder gebraucht haben:
- Webseite des Phoniebox-Projektes: http://phoniebox.de/
- GitHub-Repo mit Installationsanleitung und vielen Tipps: https://github.com/MiczFlor/RPi-Jukebox-RFID
- Phoniebox Manual: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/MANUAL
- Doku GPIO-Interface: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Using-GPIO-hardware-buttons
Installation
Installation Raspberry Pi
Dazu muss nicht viel gesagt werden. Den Raspberry Pi Imager herunterladen und damit Raspberry Pi OS auf die SD-Karte schreiben. Fertig.
Was sonst noch zu konfigurieren war: Wir hatten einige Probleme mit dem Abspielen von Spotify, dazu unten mehr. Neben anderen Dingen war es für Spotify wichtig, dass der Pi beim Booten auf das Netzwerk wartet (er wartet dann auch nicht ewig, sondern fährt irgendwann trotzdem hoch, was für den offline-Betrieb ja auch wichtig ist). Das lässt sich einfach mittels „sudo raspi-config“ einstellen. Dort legt man am besten auch schon die WLAN-Zugangsdaten fest. Und wenn man schon dabei ist gibt man dem Raspberry Pi natürlich auch noch einen anderen Hostnamen, sowas wie „phoniebox“ oder so. Dann ist später das Webinterface zum Einrichten im heimischen Netz unter http://phoniebox erreichbar.
Installation Phoniebox
Für die Installation von Phoniebox inkl. der Spotify-Unterstützung reicht ein einziges Shell-Kommando, welches man zusammen mit vielen anderen Hinweisen hier findet: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/INSTALL-stretch
Kritischer Punkt bei der Installation von Phoniebox ist der Zugang zu Spotify, das hat uns sehr viel Zeit und Nerven gekostet. Lag allerdings auch daran, dass wir zwischendurch verschiedene Spotify-Konten ausprobiert haben, was keine gute Idee war. Was wir gelernt haben:
- Als Benutzername für Spotify nicht die Mailadresse verwenden, sondern den wirklichen Benutzernamen. Den findest du hier: https://www.spotify.com/de/account/overview/
- Ich sage sowas nur ungern (weil es mich wirklich ärgert), aber hier ist das wichtig: Gewisse Sonderzeichen im Spotify-Passwort können hier Probleme machen („3A6E%6&Vu81vxy@“ hat als Passwort z.B. nicht funktioniert). Daher lieber ein sehr langes Passwort für Spotify erzeugen, aber Sonderzeichen vermeiden.
- Für den Zugriff der Software auf Spotify braucht man einen API-Zugang. Den erzeugt man sich hier. Da bekommt man dann eine Client-ID und ein Client-Secret. Beide braucht man während der Installation von Phoniebox.
Vielleicht noch zur Klarstellung: Phoniebox nutzt für den Kontakt zu Spotify ein Projekt namens Mopidy, und dafür wird später als Webfrontend dann eine Software namens Iris verwendet. Wird aber alles bei der Phoniebox-Installation entsprechend mit installiert. Wenn die Installation fertig ist gibt es daher auch zwei Webinterfaces, eines für Phoniebox (z.B. http://phoniebox/) und eines für Iris (z.B. http://phoniebox:6680/), also das Mopidy-Frontend.
Debugging
Wie gesagt, wir hatten mit der Spotify-Anbindung immer wieder Probleme. Zum Debugging hat uns das hier geholfen:
- Log zeigen: „journalctl -u mopidy -f“
- Konfiguration von Mopidy anzeigen: „sudo mopidyctl config“
- Rescan der Audio-Datenbank: „curl http://localhost/manageFilesFolders.php?scan=true“
Installation OnOff SHIM
Der OnOff SHIM sorgt wie gesagt dafür, dass der Pi komplett stromlos heruntergefahren werden kann, sodass sich die Powerbank dann auch ausschaltet. Das Teil ist ggf. nicht so leicht zu bekommen, Hersteller ist Pimoroni.
Installiert wird es einfach per „curl https://get.pimoroni.com/onoffshim | bash„. Wichtig zu wissen ist, dass das Teil auf der Bibliothek clean-shutdown aufsetzt, den darüber findet man Konfigurationsmöglichkeiten für das Teil. Z.B. wollten wir, dass der Shutdown beginnt, wenn man 5 Sekunden lang auf den Play-Button drückt. Dazu bearbeitet man die Konfiguration von clean-shutdown mittels „sudo vi /etc/cleanshutd.conf“:
- hold_time=5
- shutdown_delay=1
- led_pin=25
Der LED-Pin kann gesetzt werden, wenn man wie wir eine externe LED anschließt, um den Shutdown-Vorgang anzuzeigen.
Manuell heruntergefahren werden kann der Pi über die Bibliothek mittels „sudo /lib/systems/system-shutdown/gpiopoweroff poweroff“.
Belegung der Buttons
Wir haben die Buttons einfach so belegt, wie es in der Software schon vorgesehen ist, siehe https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Using-GPIO-hardware-buttons. Allerdings haben wir die Pullup-Widerstände weggelassen. Unsere Buttonbelegung:
- GPIO 19: Volume +, schwarzer Button)
- GPIO 16: Volume – (weißer Button)
- GPIO 21: Play / Pause (gelber Button)
- GPIO 26: nächster Titel (grüner Button)
- GPIO 20: vorheriger Titel (blauer Button)
Fazit
Lohnt sich der Bau einer Phoniebox in Konkurrenz zum kommerziellen Produkt? Finanziell hält sich das in etwas die Waage. Wenn du Freude am Basteln (auch mit Elektronik und Computern) hast und einer individuellen und vor allem auch sehr potenten und flexiblen Lösung etwas abgewinnen kannst, dann auf jeden Fall!
Hi,
bin über Ralfs Blog auf deine Seite gestoßen. Bin auch gerade am Basteln an der Box.
Technisch klappt es schon gut. Hab aber noch paar Fragen zu deinem Aufbau:
– Hast du in den Koffer noch eine Holzplatte oder so rein und alles dort befestigt? Sieht so aus.
– Wie hast du die Löcher für die Buttons in den Koffer gebohrt?
– Kann man den on-off-shim einfach mit einem anderen Button verbinden? Und sehe ich das, richtig, dass du alle Buttons an einen GND angeschlossen hast? Vielleicht kannst du dazu noch ein Bild von der Verkabelung am Raspi hochladen.
Vielen Dank
Hallo Matthias,
ich versuche mal, deine Fragen zu beantworten:
1) Ja, unten im Koffer ist alles auf ner dünnen Holzplatte aufgebaut. Damit kann man die Technik auch herausnehmen, wenn man will.
2) Die kleinen Löcher hat mein Freund mit einem Stanzer in den Koffer gestanzt. Ob er die großen auch gestanzt hat weiß ich nicht. Ich hätte wohl so einen Stufenbohrer genommen und von außen gebohrt.
3) Den OnOff Shim kann man einfach mit irgend einem Button verbinden. Muss nicht einer derer sein, die man schon hat. Wir haben halt einfach einen der vorhandenen doppelt genutzt, einmal bei einem normalen Druck als Taster für die Phoniebox-Software, und dann eben auch als Taster für den OnOff Shim, der aber ja erst bei x Sekunden reagiert. D.h. bei einem Tastendruck bekommen beide (der Raspberry Pi direkt und auch der OnOff Shim) die Info, das gedrückt wurde, und abhängig von der Länge des Drückens wird eben entsprechend reagiert.
Zur Verkablung: Es ist ja so, dass der Pi auf seinen GPIO-Ports reagiert, wenn der Pin auf Ground gezogen wird (siehe https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Using-GPIO-hardware-buttons). Daher kann man die Ground-Leitung einfach zu einem der Buttons ziehen und von dort aus einfach zu den anderen Buttons weiterreichen. Muss man nicht so machen, spart aber etwas Kabel und macht es bei dem Aufbau damit übersichtlicher. Der Pi hätte ja auch nicht genügend Ground-Pins, um jeden Button mit einem separaten zu verbinden, und auch wenn er das hätte wäre das technisch völlig identisch. Fotos kann ich leider keine (mehr) machen, weil das Ding ja nicht bei mir weilt… Wenn das aber wichtig ist melde dich nochmal, dann frag ich nach.
Also, die kleinen Löcher wurden mit „Locheisen“ gemacht, die großen für die Buttons mit sowas hier: https://www.amazon.de/Rotationskompass-Kreisschneider-Papier-Pappe-Yintiod/dp/B0821NKJ7P
Hallo und vielen Dank für die Anleitung!
In dem Abschnitt zu den Buttons schreiben Sie:
„Allerdings haben wir die Pullup-Widerstände weggelassen.“
Was für Auswirkungen hat das – bzw. wozu dienen diese Widerstände?
Grüße aus der Eifel!
Hannes
Hallo Hannes,
ja, das mit den Pullup- bzw. Pulldown-Widerständen, das hat man als Elektronik-Bastler erst mal nicht auf dem Schirm. Du findest im Netz tausende Erklärungen, was die Dinger machen, z.B. hier: https://www.youtube.com/watch?v=XbX5TemR3bo
Kurz gesagt: Du versuchst am Raspi an einem Pin zu lesen, ob ein Schalter gedrückt ist oder nicht. An dem Schalter liegen z.B. 5V an. Jetzt würde man denken: Wenn der Schalter gedrückt ist, dann liegen an dem PIN 5V an, wenn er nicht gedrückt ist, dann liegen da 0V an. Allerdings liegen – wenn der Schalter nicht gedrückt ist – eben nicht 0V an, sondern etwas undefiniertes. Da liegt ja gar keine Spannung an, und damit bekommst du an dem PIN irgend ein Spannungsrauschen. Um das zu umgehen verbindest du den PIN also mit einem Widerstand mit GND, also 0V. Klingt nach Kurzschluss, ist es irgendwie ja auch, aber durch den Widerstand fließt da eben nur ganz wenig Strom. Trotzdem ist der PIN dann in beiden Zuständen sauber definiert.
So, und wir haben die Widerstände jetzt weggelassen, weil es hier so steht: https://github.com/MiczFlor/RPi-Jukebox-RFID/wiki/Using-GPIO-hardware-buttons Hintergrund ist, dass Arduinos und Raspberry Pis und so typischerweise intern schon so Pullup-Widerstände verbaut haben, und man kann per Software sagen, dass man die geschaltet haben will. Und das scheint der hier verwendete Code so zu machen. Beim Arduino sieht das so aus: https://www.arduino.cc/reference/de/language/functions/digital-io/pinmode/ Es gibt den PIN-Mode „INPUT“, aber eben auch den Mode „INPUT_PULLUP“, der dann eben den internen Pullup-Widerstand dazu schaltet. Beim Pi geht das analog, hängt aber von der verwendeten Library ab.
Grüße!
Daniel
Hallo Daniel!
Ganz herzlichen Dank für die schnelle und ausführliche Antwort!
Das hilft mir sehr weiter und ich kann ein paar unschöne Lötzinn-Klumpen vermeiden.
Grüße aus der Eifel,
Hannes
Viel Erfolg dir!
Ich habe zufällig die gleiche Powerbank – wie hast du es gelöst, dass man die Powerbank zuerst anschalten muss, bevor der Pi startet? Machst du den Koffer immer auf?
Viele Grüße
Hallo Jochen,
das Teil steht ja nicht bei mir, sondern bei einem Freund, aber wenn ich mich recht erinnere geht das so, dass man einfach an der Seite an der richtigen Stelle auf den Koffer drückt. Der ist so flexibel, dass er innen auf den Taster der Powerbank drückt, diese angeht und damit alles hochfährt. Ach ja, so wird es auch ganz am Anfang des Videos gezeigt.
Grüße,
Daniel
Hi. Danke für die Zusammenfassung. Eine Frage hätte ich da als relativer Elektronikunwissender. Wieso habt ihr die weißen Kabel an den gelben Knopf gelötet. Ich nehme an das eine Kabel ist für die Erdung und das farbige für den Pin. Auf die weißen kann ich mir aber keinen Reim machen.
Grüße
Stefan
Hallo Stefan, schau mal hier ins Video, da wird erklärt, dass der mittlere Button doppelt belegt ist. Wenn ich mich recht erinnere sind die beiden weißen Kabel die, die mittels des OnOffShim den Pi ordentlich herunterfahren: https://youtu.be/yIh5TJJ8Oh4?t=225
Hi. Vielen Dank für die Antwort. Ich habe meine Box nun fertig bekommen. Ich habe 6 Buttons verbaut, auf den OnOffShim habe ich verzichtet. Allerdings habe ich auch keinen Akku eingebaut, da die Box stationär betrieben wird. Eure Seite habe ich gerne zwischendurch immer mal wieder als Referenz genutzt, besonders eure Debugging-Hinweise waren für mich eine große Hilfe.
Ich hätte doch tatsächlich noch eine Frage. Ich kriege es nicht hin über Spotify selbst gemachte Playlists über die Phoniebox mit einer Karte zu koppeln. Gibt es dazu eine Idee?
An welcher Stelle hakt es? Kannst du die Playlisten auf der Phoniebox abspielen und das Problem ist „nur“ die Verknüpfung mit einer RFID-Karte, oder klappt schon das Abspielen der Playlisten auf der Phoniebox an sich nicht?
Danke schonmal für die Antwort. Leider kann ich gar keine keine Spotify-Playlisten über die Phoniebox abspielen. Über die Weboberfläche von Iris funktinieren Playlisten ohne Probleme.
Wenn ich die URL dann aber kopiere und über die Phoniebox Weboberfläche abspeichere kann ich sie nicht abspielen. Weder mit noch ohne RFID Karte. Alben oder einzelne Tracks funktionieren auf diesem Wege aber ohne Probleme, mit und ohne RFID.
Zur Not könnte ich mit dieser Einschränkung leben, aber blöd ist es trotzdem. Ich habe den Eindruck, dass ich da irgendwie einen Denkfehler habe.
Hallo Stefan!
Versuche mal nicht die URL einzufügen, sondern die URI. Die findest du in Iris an dieser Stelle: https://bilderupload.org/bild/cd7568147-img-7394
Und immer ein neues Verzeichnis für jede Playlist anlegen.
Bei Fragen gerne melden.
Gruß,
Markus
das hab ich gelesen. Da stolpert man drüber wenn man etwas googelt 🙂
Ich spare mir das bloggen vermutlich Mal wieder. Dann hab ich wenigstens die Chance Mal was zu machen…