Das Tivoli-Squeezebox-Radio

Dieser Artikel mag einigen von Euch ungewöhnlich erscheinen, geht es doch darin nicht wie auf PenguinLovesMusic.com sonst üblich um Software, sondern um ein kleines, feines Hardware-Projekt, dass ich auf der Basis von Tivoli Speaker und RaspberryPi realisiert habe.

Es ist eine Squeezebox, die ich aus dem Tivoli Audio Alarm Speaker gebaut habe. Im Folgenden eine Liste der Bausteine und Eigenschaften:

Tivoli Squeezebox Radio

  • Tivoli-Lautsprecher und Gehäuse (Originallautsprecher mit 3W-Ausgangsleistung),
  • WiFi,
  • kann einen ganzen Tag mit Batterie betrieben werden (mehr als 12h),
  • Dreh- und Drückregler für Lautstärke und Play/Pause,
  • separater Wecker,
  • voll Squeezebox-fähiger Player mit Raspberry Pi zero und SqueezeLite,
  • sehr einfaches und energieeffizientes 5V-Design.

 

Und da wir ja in erster Linie Software entwickeln, kommt das schnuckelige Teil mit seiner eigenen Software, einer Open-Source-Lösung, um Lautstärke und Play/Pause zu regeln bzw. zu bedienen. Ihr findet diese wirklich coole Lösung auf GitHub unter https://github.com/coolio107/SqueezeButtonPi-Daemon

 

Die Idee

Da Logitech schon vor längerer Zeit die Produktion der Squeezebox eingestellt hat, wird dem Pinguin und mir – wie vermutlich vielen anderen iPeng-Nutzern auch – manchmal schmerzlich bewusst, dass eine wirklich schöne und praktikable Hardware fehlt, um unsere Lieblingsapp zu benutzen. Da zum Glück heutzutage leistungsfähige und erschwingliche Computing-Hardware recht einfach erhältlich ist (z.B. in Form des Raspberry Pi), beschloss ich, mein eigenes Gerät zu bauen.

Im konkreten Fall war das Ziel, am Ende einen wirklich stylishen Ersatz für ein Squeezebox-Radio zu haben, und zwar als Weihnachtsgeschenk für meine Mutter. Es sollte als zusätzlicher Player in ihrem Squeezebox-Setup dienen. Sie benutzt seit Jahren ein Tivoli-Radio und liebt das Design und den Sound, da es aber ein reines UKW-Radio ist, das außerdem nicht mit Batterie betrieben werden kann, lag es nahe, etwas Moderneres auf Grundlage dieses Klassikers zu bauen.

 

Anforderungsspezifikation

Als Ingenieur begann ich natürlich damit, eine Liste von Anforderungen für das Radio aufzustellen:

  1. Es sollte in ein Tivoli-Radio-Gehäuse eingebaut sein und das Tivoli-Design und den Tivoli-Sound so weit wie möglich beibehalten.
  2. Es sollte natürlich als Squeezebox für die Nutzung mit iPeng funktionieren.
  3. Es sollte tragbar sein und mit Batterie betrieben werden können, sodass man es herumtragen oder auch im Garten benutzen könnte.
  4. Punkt 3 bedeutete offensichtlich, dass es mit WiFi, nicht mit einem Kabel-netzwerk verbunden sein müsste.
  5. Es sollte einfach und schnell zu bedienen sein, d.h., ich wollte Regler für Lautstärke und Play/Pause direkt an dem Gerät.
  6. Da es klein sein müsste und die Musikauswahl typischerweise über das iPad laufen würde, würde es nicht unbedingt ein Display brauchen. Es wäre zwar schön gewesen, eines zu haben, aber da der Platz sich als sehr begrenzt herausstellte, verwarf ich die Idee.
  7. Das gesamte Design sollte eine einfache Bedienung ermöglichen: einfacher Lautstärkeregler, einfaches Aufladen über ein Netzteil usw.

Die Komponenten

Also setzte ich mein Projekt fort, indem ich nach Lösungen und Komponenten suchte, die diese Anforderungen erfüllen konnten.

Der Tivoli Alarm Speaker

Bei meinen Recherchen musste ich schnell feststellen, dass die Standardversion des Tivoli-Radios nicht die beste Wahl für die Umsetzung meiner Pläne war: Es ist ziemlich klein und vollgepackt mit Elektronik und es hat diesen großen Drehknopf für die Senderauswahl, den man leider nicht in einen Lautstärkeregler umfunktionieren kann, da hier all die Frequenzinformationen eingraviert sind.

Aber ich entdeckte etwas Anderes, sehr Erfreuliches: Es gibt eine Version des Tivoli-Radios, das “Model 3”, für das es einen optionalen zweiten Lautsprecher für Stereo-Sound gibt (das Standardmodell ist mono). Er kann zusätzlich als Wecker verwendet werden, was ich ebenfalls attraktiv fand, aber das Hauptargument, den Lautsprecher zu verwenden, war, dass er sehr viel “leerer” als das Standardmodell ist und mir somit wesentlich mehr Platz bot. (Allerdings empfehle ich auch einen Blick in das Kapitel “Erkenntnisse” zu werfen, da die Weckerfunktion ihren Preis hat.) Jedenfalls schien mir dieses Gerät die perfekte Basis für mein Projekt und so kaufte ich eines bei eBay (ein neues, aber auch gebrauchte sind hier einfach zu finden).

 

Raspberry Pi und HiFiBerry Mini Amp

Als nächstes musste ich entscheiden, welche Computer- und Audiohardware ich benutzen wollte. Der Tivolilautsprecher ist eine passive Konstruktion, was bedeutet, dass er normalerweise über den Verstärker im Hauptradio betrieben wird.

Dieser ist ein ziemlich großer Verstärker, der mit 12V läuft, die ursprüngliche Idee war daher, eine Verstärkerplatine für den Raspberry Pi zu benutzen (die typischerweise ebenfalls auf 12V läuft), das hätte aber eine 12V-Batterie mit passender Ladeelektronik erfordert, die zwar erhältlich, aber kompliziert zu integrieren ist. Außerdem erschien mir das Gehäuse für diese Lösung zu klein.

Dann erfuhr ich von dem HiFiBerry Mini Amp, einem kleinen Verstärker mit nur 3W Leistung, der aber auf 5V läuft, über den Raspberry Pi mit Strom versorgt werden kann und den Pi-zero-Formfaktor hat.

Das war genau, wonach ich gesucht hatte. Ich konnte den kleinen Pi zero benutzen – was durch den Platz im Lautsprecher sehr vorteilhaft war –, den Miniverstärker darauf platzieren und – was sehr wichtig war – das Ganze mit einer Standard-USB-Powerbank, wie sie als Ersatzbatterie für Mobiltelefone angeboten wird, betreiben.

Die Frage war jedoch: Würde das genügend Leistung bringen? Auf der Berliner Maker Faire konnte ich einen Pi zero (der damals noch schwer zu kriegen war) erstehen und bekam außerdem von HiFiBerry eine frühe Version des Mini Amp und so konnte ich schon sehr früh ein Test-Setup bauen, dass ich an den Tivoli-Lautsprecher anschloss … et voilà … es funktionierte.

Die Lautstärke reicht vielleicht nicht für eine Tanzparty, aber für den normalen Gebrauch im Haus ist sie weit mehr als ausreichend und der Klang des Lautsprechers kommt auch bei der niedrigeren Leistung sehr gut zur Geltung. Wichtig ist hierbei zu wissen, dass weder der Pi zero noch der Mini Amp einen Erweiterungsstecker aufgelötet haben, sodass man ein kleines bisschen Löterfahrung haben sollte, um die Steckerleite auflöten zu können.

 

Batterie

Es gab eine weitere kritische Komponente: die Batterie. Wie schon erwähnt gibt es USB-Powerbanks für eine Spannung von 5V, aber ich hatte eine zusätzliche Anforderung: Ich wollte damit auch den Wecker betreiben, und zwar unabhängig davon, ob das Radio an oder aus ist. Daher brauchte ich zwei USB-Anschlüsse.

Außerdem sollte der Akku sich während des Betriebs laden können und er sollte ein angeschlossenes Gerät automatisch erkennen, sodass er den Strom anschalten würde, wenn der Raspberry Pi eingeschaltet wird, da ich die Batterie im Gehäuse und von außen unzugänglich einbauen wollte.

Letzten Endes begrenzte das meine Auswahl stark und die kleinste Batterie, die ich finden konnte, war ein 10.000mA-Modell, das beachtlichen Platz im Gehäuse beanspruchte. Positiv war jedoch, dass 10.000mA eine für ein 5V-System (das normalerweise unter 1A zieht) eine ziemlich annehmbare Kapazität sind, sodass ich jetzt eine unglaubliche Betriebsdauer hatte. In meinen Tests erreichte ich einen 24h-Betrieb für den Player mit ca. 7h Wiedergabe bei 75% Lautstärke und 17h Standby oder 12h Wiedergabe bei voller Lautstärke.

 

Lautstärkeregler

Ein weiterer wichtiger Punkt war der Encoder (Drehregler) für den Lautstärkeregler. Ich entschied mich für ein Modell mit zusätzlicher „Push-Button“-Funktion, den ich für die Play-Pause-Funktion verwende. So lässt sich durch Drücken des Knopfes das Abspielen starten und beenden, durch Drehen lässt sich die Lautstärke regeln.

Drehregler sind einfach zu finden, aber ein Knopf, der zum Design des Radios passte, war es nicht! Letzten Endes bin ich aber mit meiner Lösung in optischer Hinsicht sehr zufrieden (s. unten).

Der Drehregler kann mit drei ungenutzen GPIO-Pins des Raspberry Pi verbunden werden (bitte informiert Euch auf der HiFiBerry-Webseite, welche Pins von der Mini Amp benutzt werden!), zweien für den Drehregler und einem für den Push-Button. Ich entschied mich für BCM 23 und 24 für den Drehregler und BCM 25 für den Button.

 

Der “Kleinkram”

Das waren die Hauptkomponenten, zusätzlich gibt es natürlich eine Reihe kleinerer Dinge, die benötigt werden, um das Ganze zum Laufen zu bringen. Hier eine Abbildung und Übersicht der Komponenten:

Tivoli Squeezebox Radio Components

  1. Tivoli-Lautsprecher,
  2. Raspberry Pi zero,
  3. HiFiBerry Mini Amp,
  4. USB-WiFi-Adapter mit Außenantenne. Der Pi zero beinhaltet keine Netzwerk-Hardware (den neuen Pi zero Wireless gab es zu diesem Zeitpunkt noch nicht), daher braucht man einen WLAN-USB-Adapter. Da das Radiogehäuse das Signal stark abschirmte, benutzte ich eine Außenantenne und eine zusätzliches Antennenkabel, um den USB-Adapter zu verbinden.
  5. 12V- Step-up-Converter. Der Wecker wird mit 12V betrieben, wenn auch mit sehr geringer Leistung (10mA). Für die Versorgung benutzte ich einen USB-to-12-Step-up-Converter (einen kleinen Adapter). Diese Geräte sind ein bisschen kritisch bei der Anwendung mit allem, das viel Strom verbraucht, da sie nicht besonders effizient sind und sehr heiß werden können. Zum Glück hat der Wecker aber nur einen geringen Stromverbrauch, sodass das in diesem Fall kein Problem war. Ich entfernte den Ausgangsstecker und ersetzte ihn durch einen Pin-Stecker, der direkt an die Weckerplatine gelötet ist.
  6. USB-Kabel. Verschiedene. Der Pi zero hat Mikro-USB-Stecker für Strom und USB-Schnittstelle (hier für WiFi), also brauchte ich “USB-to-micro-USB”- Adapterkabel, um Ladegerät und WiFi-Adapter zu verbinden. Das Kabel zum Ladegerät ist nicht direkt verbunden, sondern führt zu einem Schalter, der die 5V-Leitung trennt, um den Pi hart ein- und auszuschalten.
  7. Für die externe Stromversorgung benutzte ich einen USB-B-Stecker (wie man ihn auch für Drucker verwendet), den ich in die Rückseite des Radios einbaute – er ist einfacher ein- und auszustöpseln als ein Micro-USB-Stecker. Dieser verbindet sich dann mit dem Micro-USB, der wiederum die Powerbank mit Strom versorgt. Ein langes USB-A-zu-B-Kabel (“USB printer cable”) verbindet das Radio mit dem Netzanschluss.
  8. Ein Standard- 2A-USB-Netzteil.
  9. Verbunden mit der 5V-Leitung im Anschlusskabel zwischen der Powerbank und dem Raspberry Pi.
  10. Platinen, Pin-Anschlüsse, Kabel zur Verbindung aller Komponenten.
  11. Micro-SD-Karte für Betriebssystem und Software.

Montage

Obwohl der Tivoli-Lautsprecher über viel mehr Raum verfügt als ein normales Radio und obwohl Pi zero und Mini Amp so klein sind, füllten alle Komponenten zusammen den verfügbaren Platz sehr schnell aus.

Vor allem die große Batterie und die Kabel verbrauchten eine Menge Platz, sodass die effiziente Anordnung sehr wichtig war und es einiger Versuche bedurfte, bis ich alles optimal angeordnet hatte.

Hier einige Bilder der vormontierten Bauteile: Der Radiorahmen sieht leer aus, aber das ist ohne Batterie und Kabel. Auf dem Bild ist die Antenne noch im Gehäuse, das habe ich erst später geändert.

Tivoli Squeezebox Radio Subassemblies

Die Batterie befestigte ich mit Klettband. Für die kleinen Platinen benutzte ich die existierenden Montagepunkte und klebte zusätzliche an das Gehäuse (für die beiden unten abgebildeten).

All die kleinen Stecker in die richtige Position für die endgültige Montage zu bringen, entpuppte sich als kniffelige Aufgabe und ich brauchte mehrere Anläufe, bis alles passte.

Ein wichtiger Aspekt war auch, dass die SD-Karte für den Pi nicht zugänglich sein würde, ohne das Gehäuse zu öffnen, daher musste ich die Software so konfigurieren, dass der WLAN-Zugang funktionierte, bevor ich alle Komponenten montieren konnte (s. Kapitel “Software”).

Das Ergebnis

Nach der Montage sieht man nicht mehr, wie schwierig das Zusammensetzen war:

Kosten

Den einen oder anderen wird auch interessieren, was das Ganze so gekostet hat. Hier ist eine grobe Übersicht:

  • Tivoli Alarm Speaker: 37€ (neue Geräte kosten beim Hersteller derzeit 69€, meiner war ebenfalls neu, aber von einem eBay-Händler)
  • HiFiBerry MiniAmp: 20€
  • Powerbank: 19€
  • WLAN-Adapter mit externer Antenne: 14,50€
  • Steckernetzteil: 10€
  • WLAN-Antennenkabel: 9€
  • Micro-SD-Card, 8GB: 8€
  • Drehknopf: 6€
  • USB-A-B-Anschlusskabel (für Stromversorgung), 2m lang: 6€
  • Raspberry Pi zero: 5€
  • USB-zu-12V-Spannungswandler: 5€
  • Drehregler: 3,50€
  • 3x Micro-USB-Adapterkabel: zusammen 7,50€
  • USB-B-Buchse: 2€
  • Ein-Aus-Schalter: 2,50€
  • Kleinkram (Steckerleisten, Abstandsbolzen, Schrauben, Draht…): 8€

Alles in allem hat das Radio also an Material ca. 163€ gekostet. Alleine die Verwendung des neuen Pi zero Wireless (siehe „Erkenntnisse“) könnte das aber (allerdings nur bei Verwendung der internen Antenne) noch einmal um ca. 21€ senken. Die kann man dann komplett in einen aufwändigeren Drehregler investieren, wenn man möchte.

Die Software

Betriebssystem

Die Hardware ist der sichtbare Teil des Projekts, aber Software war genauso erforderlich.

Da das Gerät nur als Player, nicht als Server dienen sollte, entschied ich mich für die piCorePlayer-Distribution.

Der Hauptvorteil gegenüber anderen Pi-Distributionen ist, dass sie komplett im Arbeitsspeicher läuft und die SD-Karte während des Betriebs nicht benutzt werden muss. Daher kann das Gerät einfach durch Unterbrechen der Stromversorgung ausgeschaltet werden, ohne das System in einem undefinierten Zustand zu hinterlassen. Das bedeutet: kein langes Herunterfahren und keine Probleme, wenn die Batterie leer ist.

piCorePlayer ist über ein Web-Interface leicht konfigurierbar, wenn es einmal mit dem Netzwerk verbunden ist.

Da wie gesagt bei meinem Design die SD-Karte von außen nicht zugänglich ist, musste ich sie vor der Montage vorkonfigurieren – auch das WLAN-Setup. Das ist ein bisschen schade, es wäre gut, wenn pCP oder andere Squeezebox-basierte Raspberry-Pi-Pakete einen Konfigurationsmodus hätten, der automatisch einen Hotspot erstellt, wenn kein Zugriff auf ein WLAN-Netz möglich ist – so wie es z.B. “Volumio” tut. Dadurch wäre das Radio sehr viel besser zugänglich.

Für mich war das Problem lösbar, es ist aber sicherlich einer der größten Nachteile bei Pi-basierten DIY-Lösungen.

Tasten und Regler

Ein weiteres Problem, für das ich auf Anhieb keine befriedigende Software-Lösung fand, war der Steuerungsknopf. Ich fand einige Scripts, um Tasten und Drehregler mit Squeezebox-Playern auf dem Raspberry Pi zu verwenden, aber bei den meisten schien vorausgesetzt zu sein, dass der Server auf dem gleichen Gerät läuft, oder sie benutzten eine komplette Nutzerschnittstelle wie JiveLight oder sie codierten die Serververbindung fest – etwas, das ich nicht wollte, da das Netzwerk, in dem das Gerät laufen sollte, auch dynamische Adressen für den Server vergibt.

Außerdem boten mir die verfügbaren Lösungen nicht die Reglungscharakteristik, die ich wollte. Also programmierte ich meine eigene:

SqueezeButtonPi Daemon oder sbpd.

Du findest sie auf GitHub at https://github.com/coolio107/SqueezeButtonPi-Daemon

Und wenn Du auch piCorePlayer verwendest: Ab Version 3.1x gibt es den sbpd jetzt auch als fertiges Beta-Modul: Details im Slimdevices-Forum.

Wie vom Pinguin nicht anders zu erwarten, enthält sie eine Menge netter Funktionen, die dir beim Bau eines Radios das Leben erleichtern können J:

  • Wenn du einen Squeezebox-Player auf dem Gerät laufen hast, kann sbpd automatisch feststellen, mit welchem Server der Player verbunden ist. Das funktioniert sogar, wenn du während des Betriebs den Server wechselst, wenn du also mehr als einen Server benutzt, kannst du den für das Radio beliebig wechseln.
  • Sbpd stellt automatisch die MAC-Adresse fest. Es verwendet den gleichen Algorithmus wie SqueezeLite, wenn du also SqueezeLite als Playersoftware benutzt und es nicht manuell konfiguriert hast, sollte sbpd automatisch die richtige Player-ID finden.
  • Ich habe nur Lautstärke- und Play-/Pause-Buttons eingerichtet, sbpd kann jedoch so konfiguriert werden, dass mehr Buttons verwendet werden können.
  • Es kann als Daemon beim Systemstart gestartet werden und ist dann sofort verfügbar, wenn du den Player startest.
  • Du kannst es natürlich auch über die Kommandozeile konfigurieren.
  • Es funktioniert auch mit Servern, auf denen der Passwortschutz aktiviert ist (nur mit manueller Konfiguration).

Wenn du also mit dem Gedanken spielst, eine eigenes Pi-basiertes Radio mit Knöpfen und Drehreglern zu bauen, sieh es dir unbedingt an, es könnte hilfreich sein.  🙂

Erkenntnisse

Wie bei jedem Projekt ergaben sich einige Erkenntnisse dazu, was man beim nächsten Mal besser machen und welche Probleme man von vornherein vermeiden könnte:

  • Die Weckerfunktion ist natürlich eine schöne Sache, aber rückblickend würde ich wohl doch beim nächsten Mal eine Tivoli-Lautsprecher ohne Wecker bevorzugen (die gibt es nämlich auch). Der Wecker verbraucht viel mehr Platz im Gehäuse, als ich ursprünglich dachte, was aber noch stärker negativ ins Gewicht fällt, sind die zusätzlichen Anforderungen, die sich daraus ergeben haben. Der Akku brauchte einen zusätzlichen Ausgang, daher musste er größer sein, ich brauchte den Step-up-Converter und all das beanspruchte eine Menge Platz. Der Wecker ist schön und funktioniert gut, aber er machte die Montage zu einer echten Herausforderung, ohne ihn wäre sie vermutlich sehr viel simpler gewesen. Auf der anderen Seite ist es natürlich auch ganz schön, so eine große Batterie zu haben.
  • WLAN. Es wäre hilfreich, wenn eine der erhältlichen Betriebssystemdistributionen automatische WLAN-Konfiguration ohne WPS ermöglichen würde (da dies Zugang zum WLAN-Adapter erfordert).
  • Guter Drehregler und Knopf. Einen guten Drehregler und Knopf zu finden ist schwierig. Ich habe eine ganze Weile gesucht und bin nicht 100% glücklich mit dem haptischen Resultat. Bei meinem nächsten Projekt werde ich nach einer besseren Lösung suchen. Auf jeden Fall lautet mein Fazit hier: Wenn du auch planst, ein Radio zu bauen, geh davon aus, dass der Drehregler das teuerste Element sein wird. Teurer als der Pi, die Audiokarte und vielleicht sogar teurer als das Gehäuse.
  • Raspberry Pi zero Wireless. Pünktlich zum Erscheinen dieses Artikels hat die Raspberry Foundation jetzt den neuen „Raspberry Pi zero Wireless“ angekündigt. Dieser hat einen eingebauten WLAN-Adapter, was die Konstruktion doch nochmals einfacher machen dürfte. Insbesondere wenn man mit der internen Antenne leben kann, würde ich diesen doch sehr empfehlen.

Trotzdem bin ich sehr zufrieden mit dem Ergebnis. Natürlich kann man immer noch einiges verbessern, z.B. mehr Knöpfe hinzufügen oder ein kleines Display, aber das war ja bei diesem Projekt nicht geplant. Und das Resultat kann sich, wie ich finde, wirklich sehen lassen: Es sieht stylish aus, hat eigene Bedienknöpfe und funktioniert sehr stabil und verlässlich und der Sound ist für ein kleines Radio wirklich fantastisch!

Also, wenn du auch überlegst, ein Radio zu bauen: Tu’s einfach! 🙂