Jüngst ereignete mich der schwesterliche Auftrag eine Art Tonie-Box für meinen kleinen Neffen zu bauen. Da ich lange kein Hardware-Projekt mehr vor der Brust hatte, stürzte ich mich umgehend in die Recherche und Planung. Tonie-Boxen sind derzeit die Thermomixe der Kinderzimmer. Das Konzept ist einfach und bestechend. Man kauft überteuerte Figuren, die einen NFC-Chip enthalten und auf die Boxen den relatierten Audio-Content laden. Die Figuren werden auf die Box gestellt, das NFC-Tag ausgelesen und die Wiedergabe erfolgt - Kinderleicht! Da sich die Firma Tonie darüber hinaus noch in ihren AGBs das Recht herausnimmt, das Hörverhalten der Kinder und SSIDs des Heimnetzwerks in Echtzeit auszuspionieren, musste zwangsweise etwas der Marke Eigenbau her.

Ich stieß auf das Phoniebox Projekt, das genau die Funktion der Tonie-Boxen sauber in Open Source umsetzt. Man brauchte lediglich NFC-Tags, einen RFID-Leser, ein paar Lautsprecher und einen kleinen Raspberry Pi und schon war der Weg zum Eigenbau geebnet.

Hardware

Diese Hardware wurde von mir verwendet. Preislich ist da definitiv Optimierungspotential vorhanden.

Bauteil Preis
Raspberry Pi Zero WH 14,99€
RC522 RFID Reader 02,42€
100X NFC Sticker Tags 12,00€
USB-Lautsprecher 14,72€
USB-Hub 17,99€
USB-Adapterkabel 08,99€
3x Sanwa Arcade Buttons 24mm 07,50€
Rugged Metal Push Button 05,00€

Darüber hinaus werden Female-Female und Male-Female-Steckverbinderkabel benötigt.

Zusammenbau

Gehäuse

Grundlage zur Elektronikbehausung war eine Zigarrenbox, die ich von einem entfernten Verwandten erstanden habe. Sie hatte die ideale Größe, um alle nötigen Komponenten in sich unterbringen zu können. Wer es genau wissen will und zufällig 386€ auf der hohen Kante hat, kann sich exakt diese Box samt 24 Zigarren kaufen.

Bedienelemente + Lautsprecher

Im ersten Schritt wurde das Paar USB-Lautsprecher aus seinem Ursprungsgehäuse befreit und dessen Lochbild und Passung links und rechts in die Seiten der Zigarrenbox übertragen und eingebracht. Das Loch unten links dient der späteren Stromversorgung des Gesamtsystems:

Ausschnitt der Lautsprecher

Auf der Oberseite mussten zwei weitere Bohrungen eingebracht werden. Das hintere Loch dienst der Lautstärkeregelung, für die das Steuerelement der USB-Lautsprecher übernommen wurde. Der Drehknopf ließ sich einfach abziehen und anschließend von außen wieder draufstecken. Das größere Loch ist für den Adafruit Rugged Metal Push Button mit dem eingebauten Status-LED-Ring:

Steuerelemente auf Oberseite

Im letzten Schritt mussten die drei Arcade-Buttons in die Front integriert werden. Ich habe dazu einen 25er Forstner-Bohrer verwendet:

Pushbuttons auf derFront

Somit war alle äußerliche Steuerelektronik bereits verbaut. Das Ergebnis sah so aus:

Phoniebox ohne Innenleben

Innenleben

Nun galt es die inneren Komponenten gezielt unterzubringen. Das USB-Hub nahm ich als Ausgangspunkt und positioniert es unten rechts in der Zigarrenbox. So ließ sich das Stromversorgungskabel sauber zuführen und hinter der Bohrung noch einen Knoten vor dem Steckeranschluss platzieren, der ein Ruckartiges ziehen am Kabel dämpfen würde. Die Soundkarte wurde mit den Boxen verbunden und das Hub mittels Micro-USB-zu-USB-A-Adapter an den Pi angeschlossen. Der Pi selber bezieht seinen Versorgungsstrom direkt aus dem USB-Hub:

Verdrahtung

Da einige Kabel relativ biegesteif waren, musste eine zielführende Anordnung für das RFID-Lesegerät und den Pi selber gefunden werden. Ich habe den Pi daher schräg versetzt montiert, um das Schließverhalten des Holzgehäuses zu begünstigen. Die Zigarrenbox ließ sich anschließend einwandfrei schließen. Hardwareseitig war alles erledigt.

Verdrahtung

Übersicht Verdrahtung innerhalb der Box

Nun folgte der akribische und spannende Teil der Verdrahtung. Den folgenden Verdrahtungplan habe ich dem Wiki der Phoniebox entnommen. Die Steckplatzanordnung funktioniert, ohne viel zusätzliche Frickelei in den Konfigurationseinstellungen, out-of-the-box. Lediglich der Rugged Metal Pushbutton, der zum herunterfahren des Pi dient, muss explizit aktiviert werden. Dazu später mehr.

Wichtig an dieser Stelle ist, dass das ewig verwirrende Thema der Pin-Nummern beim Raspberry Pi verstanden wird. Da es unterschiedliche Modelle des Raspberry Pis gibt und diese unterschiedlich viele Pins besitzen, wird in der Regel die exakte GPIO-Bezeichnung bei Kabelverbindungen angegeben. Dieses Schema ist über alle Raspberry Pi Modelle anwendbar. Die hier zusötzlich aufgeführten BCM-Nummern gelten explizit für den Pi Zero W(H), nicht aber zwangsweise für andere Raspberry Pi Modelle.

RFID Reader

RC522 GPIO BCM
SDA GPIO 8 24
SCK GPIO 11 23
MOSI GPIO 10 19
MISO GPIO 9 21
IRQ GPIO 24 18
RST GPIO 25 22
GND GPIO 25 22
RST 25
3.3V 17

Rugged Metal Push Button

Pin GPIO BCM Funktion
+ GPIO 12 32 LED Ring für Status LED
- 39 LED Ring für Status LED
NO GPIO 3 5 Shutdown Button
C 6 Shutdown Button

Die Bezeichnungen NC und NO auf den Button Pins stehen für Normally Open (schließender Taster) und Normally Closed (öffnender Taster).

Arcade Buttons

Die Arcade-Buttons teilen sich einen gemeinsamen Ground (GND).

Button GPIO BCM Funktion
Blau GPIO 22 15 Vorh. Titel
Weiß GPIO 27 13 Play / Pause
Rot GPIO 23 16 Nächst. Titel
GND 14

Raspberry Pi einrichten

Wichtig: Die Phoniebox läuft in Version 2 nur stabil und fehlerfrei unter Debian Buster (Legacy). Der einfachste Weg diese Version zu installieren ist der Raspberry Pi Image Flasher. Standardmäßig bietet dieser aber eine neuere Version als Buster an, bietet zugleich aber auch die Möglichkeit per Mausklick Debian Buster Lite zu installieren.

Gif Debian Buster Install

Ein weiterer Klick auf das Zahnradsymbol unten rechts ermöglicht das Vorkonfigurieren diverser Einstellungen, wie W-Lan Zugangsdaten, Systemsprache und Zeitzonen. Dies sollte wahrgenommen werden, da hier Zeit gespart werden kann.

SPI-Schnittstelle aktivieren

Mittel sudo raspi-config kann die Konfiguration des Rasperry Pi Zero aufgerufen werden. Dort befindet sich im Menüpunkt 5 Interface Options. Anschließend den Eintrag SPI selektieren und Enable wählen.

Externe Soundkarte einrichten

Die externe Soundkarte wurde bei mir nicht als primäres Ausgabegerät erkannt. Dies lässt sich aber relativ leicht einstellen. Dazu muss eine ALSA-Konfiguration angelegt werden. Dieser Schritt sollte vor der Installation der Phoniebox-Software erfolgen, da der Installer nach dem primären Ausgabegerät fragt und die Soundkarte sonst nicht in der Auswahlliste erscheint. Zur Anlage der Konfiguration wird der Befehl sudo nano /etc/asound.conf aufgerufen. Es öffnet sich der Nano Text Editor. In die Datei muss folgender Inhalt geschrieben werden:

pcm.!default {
    type hw
    card 1
}

ctl.!default {
    type hw
    card 1
}

Mit STRG+O und einem anschließend ENTER kann der neue Eintrag gespeichert und der Editor mit STRG+X verlassen werden. Ein Neustart ist erforderlich.

Installation Phoniebox

Wenn alle Verkabelung angeschlossen ist, die Soundkarte konfiguriert ist und der Pi neu gestartet wurde, kann mit der Installation der Phoniebox Software begonnen werden. Die Macher des Projekts stellen dafür einen Oneliner, eine einfach kopierbare Zeile für das Terminal. bereit.

Der Onliner lautet:

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

Diese Codezeile wird einfach ins Terminal kopiert und mit ENTER ausgeführt. Es folgen einige systemseitige abfragen. Die erste wichtige Abfrage, unter der Verwendung einer externen Soundkarte, ist, dass nicht der Standardausgang Headphone verwendet wird. Bei mir hieß die externe Soundkarte Speaker und tauchte in der Auswahlliste auf. Die Bezeichnung muss manuell ins Terminal eingegeben werden. Die nächste wichtige Abfrage ist die Konfiguration des RFID-Lesers. Hier wird aus der Auswahlliste der angeschlossene RC522 ausgewählt, woraufhin explizit gerätespezifische Bibliotheken installiert werden.

Insgesamt dauert die Installation ca. 15 Minuten und erfordert anschließend einen finalen Neustart.

Phoniebox Konfiguration

Mit der Beschriebenen Verdrahtung funktioniert die Phoniebox ohne weiteres Zutun. Einzig der Shutdown-Button muss noch konfiguriert werden. Wird dieser zwei Sekunden lang gedrückt gehalten, fährt der Raspberry Pi sauber herunter und kann anschließend vom Strom getrennt werden. Die Einleitung des Shutdowns wird über die Lautsprecher mit einem Systemton quittiert.

Shutdown Button

Dazu nano ~/RPi-Jukebox-RFID/settings/gpio_settings.ini ausführen und dort den Wert des Shutdown Buttons so abändern:

[Shutdown]
enabled : True
type : Button
pin : 3
hold_time : 2
functioncall : functionCallShutdown
pull_up_down : pull_up

Die neue Button-Konfiguration muss jetzt final neu mit dem Befehl sudo systemctl restart phoniebox-gpio-control.service durchgeladen werden.

Das wars! Die Phoniebox ist einsatzbereit und möchte nun nur noch mit Abspielbaren Audiodateien bestückt werden. Wie dies erfolgen kann, steht im Phoniebox Wiki.

Demo

Viel Spaß beim Eigenbau! Als Quelle zur Inspiration sei abschließend diese wirklich tolle Sammlung an gebauten Phonieboxen zu empfehlen.


Nachtrag 27.12.2023:
Auf dem 37c3 wurde ein großartiger Talk gehalten, der das reverse-engineering der original Tonie Box erläutert, inkl. eigener Cloud, eigenen Audio-Dateien und Anbindung an Home Assistant per MQTT: