Raspberry Pi Internetradio (2017)

… Ein Internetradio mit viel zu großen Ambitionen (und zu schlechten Programmierkenntnissen)

Ich war der Meinung mir ein Internetradio bauen zu müssen (fürs Bad) welches natürlich mehr können sollte als ein normales „kauf“ Radio. Ich dachte an Airplay, MPD-Deamon, diverse Smarthome-Funktionen, Gimmiks wie ein Kamerabild auf dem Display anzuzeigen (wofür auch immer ^^) und so weiter. Halbwegs gut aussehen sollte es natürlich auch…

Mittlerweile habe ich schon einige „Holzkisten“ gebaut, dank meiner Proxon-Minikreisäge und mittlerweile einem Bandschleifer (dieses Projekt ist in der Prä-Bandschleifer Ära entstanden) und die guten Toom Mini-Spannecken 🙂
Das Materal für dieses Projekt war Sperrholz für die Rückblende und Reste meines Wohnzimmer Parketbodens (Eiche).

Teile wurden testweise mal zusammengehalten – geklebt wird erst später

Im Inneren entstehen 3 Kammern (links / rechts für Lautsprecher)
In der Mitte die Technik


Die Frontplatte entsteht…

Ein Stück Plexiglas fürs Display

Das Display selbst ist ein Composite-Videodisplay von Adafruit (war zu „lazy“ damals für eine digitale Ansteuerung des Displays)

Schaut ja schonmal gar nicht so schlecht aus 🙂

Die Lautsprecher wurden in die Seitenteile eingefräst (Oberfräsensatz für Dremel)

Halteplättchen aus dem 3D-Drucker

In der Zwischenzeit mal ein kurzer Test (noch im Bild zu sehen: Mini-Röhrenmonitor als Retro-Element im Radio, Idee schnell verworfen, da zu sperrig und zu klein)

Weiterer Test-Fit

Nun beginnt das Bestücken und Verkleben der Teile…

Auf dem Raspberry Pi A+ steckt eine Wolfson-Audiokarte

Die restlichen GPIOs werden für die Tasten und die LED in der Front benötigt…

…sowie für ein Schaltrelais, welches das Display schalten kann.

Die grauen Schraub-Ecken sind wieder 3D gedruckt…

Die Rückseite soll ja auch gut aussehen: von links nach rechts – roter shutdown Taster, etwas versenkter Kontrast-Toggle Taster für Display, Micro-SD Card Extender, 5 Volt DC Buchse (Spannungsregelung der Wolfson Karte wird genutzt um Pi und Soundkarte zu versorgen sowie alle angeschlossenen Teile
Eckiges Loch oben: USB Aussparung für WLAN Adapter

Fertich…

Kurze Demo:

Fazit: das Radio kann per Airplay angesprochen werden (wichtig für mich um morgens automatisch durch die Synology Audiostation synchron im Schlafzimmer und im Bad Musik zu haben) und per MPD-Deamon Musik durch die Haussteuerung abspielen. MPD steuere ich über IO-Broker an. Die 3 Tasten regeln die Lautstärke und schalten einen (bzw. den letzten) eingestellten Sender von MPD an oder aus. Das Display tut (eingangs gesagt – komplexere Programmierungen sind nicht meine Stärke) nicht viel, zeigt nur die Lautstärke an und ein paar Statusmeldungen. Display schaltet sich nach ein paar Sekunden aus wenn nicht benötigt. Die blaue LED leuchtet wenn das Radio über den mittleren Taster eingeschaltet wurde. Das Radio spielt stabil, sonst tut es nicht viel. Von meinen Wünschen konnte ich mangels Zeit und Motivation nicht viel umsetzen. Vielleicht wird das nochmal 🙂
Zur Soundkarte: würde ich nicht empfehlen zu kaufen, da ich auf relativ alte Treiber und somit ein altes Raspian System setzen musste, was ich derweil noch nicht mal mehr updaten kann, ohne das nichts mehr funktioniert. Evtl. müsste ich mal das System komplett neu aufsetzen und schauen ob es nicht doch mittlerweile was neueres gibt. Die Audioqualität ist allerdings gut und der integrierte Verstärker hat viel Power (Netzteil sollte hier nicht zu schwach gewählt werden).
„Programmiert“ wurden die Sachen in Python, da es am schnellsten ging damals.
Mittlerweile würde ich vielleicht einen Ansatz mit einem ESP32 wagen, da man damit auch MP3 decodieren kann. Ein Display wäre damit ohne größeren Aufwand auch ansteuerbar.

Und nein, ich werde sicherlich nie wieder ein Radio bauen, soviel steht fest 😛

Machts besser als ich (ernsthaft)…

VN:F [1.9.22_1171]
Rating: 2.0/5 (1 vote cast)

ELV Internetradio FS20 IRB

… eigentlich für’s FS20 System – mit leichten Modifikationen perfekt für die Homematic

Man ist ja ein guter Sohn – so habe ich natürlich auch das Haus von meinen Eltern nicht verschont und seit längerer Zeit eine Homematic laufen. Besonders der Bereich der Beschallung kommt aufgrund des großen Hauses hier nicht zu kurz.
So habe ich auch vor längerer Zeit ein Radio fürs Badezimmer konzipiert welches (bis Heute) halbwegs seinen Dienst erfüllt und soweit auch über die Homematic gesteuert werden konnte… Leider aber alles nicht zufriedenstellend: die Basis der Steuerung stellte der 4fach Schaltaktor Bausatz (HM-LC-SW4-PCB) und ein selbst programmierter Microcontroller dar. Das Radio war ein RDS100 (Bausatz) – alles in allem ein wirklich schönes Analogradio mit Display und allem Drum und dran (auch eigentlich vorbereitet für FS20). Als Verstärker diente der V40 Bausatz…
Die meisten Probleme traten beim Steuern des Radios auf. Wenn ich auf FS20 gesetzt hätte wärs nicht so schlimm gewesen – ich will aber Homematic verdammt !! So habe ich angefangen die Tastendrücke per Microcontroller zu simulieren und so das Radio per 4fach Aktor angesteuert. Der Verstärker wurde per Relais geschaltet sobald das Radio eingeschaltet war. Leider rummste es immer gewaltig bei Einschalten, da ich bis zuletzt zu Faul war eine „Anti-Rums“ Verzögerung einzubauen, die das unterdrückt. Naja damit mussten meine Eltern leben (neben dem Fakt, dass sich die Lautstärke nicht gut regeln ließ und man sich auf einen Sender einschießen musste, da der Senderwechsel auch nicht immer geklappt hat). Najaaaaah 🙂

Hier ein kleiner Eindruck meines mit Liebe zusammengebauten Radios:

Vor kurzem ist mir dann der FS20 IRB Bausatz über den Weg gelaufen. Sehr vielversprechende Features. Leider wieder mal nur für FS20 aber weniger ein Problem, da man das Radio komplett über das Webinterface per POST-Requests fernsteuern kann. Das klappt per Zentralenskript und CURL ziemlich reibungslos.
Der Anfang ganz nach Anleitung – Bausatz zusammengelötet…


Dann gings los. Radio ist in einem Standbyzustand und lässt sich ansich erst einschalten wenn man über eine passende FS20 angebundene Fernbedienung verfügt. Verdammt…. LAN Port nicht aktiv, Radio aus und auch nicht ohne Weiteres zum Starten zu bewegen. Nun ja ein Anruf bei der ELV Technik bracht mich schon weiter – und zwar muss man ein paar Bauteile überbrücken:
Den Transistor T3 (oder FET, ka auch egal) – nun schaltet das Radio schonmal ein sobald man die Versorgungsspannung anlegt
Den Transistor T5 – schaltet den Vorverstärker ein. Habe ich allerdings ohne die Hilfe von ELV rausfinden müssen. Überbrückt man Ihn nicht spielt das Radio zwar aber nur sehr leise und kratzig egal ob am NF Ausgang oder an den Verstärkten Ausgängen

Jubel jubel freu freu – ein Internetradio das man nun perfekt in jede Haussteuerung integrieren kann, zum lowcost Preis (meine Meinung)
So… den Rest müsst ihr selbst rausbekommen…. Nein Quatsch – nun noch ein paar Details für die Befehle die man zum Radio schicken kann:
Alles was auf dem Webinterface des Radios ausgelöst wird über ein „ge-POST-etes“ Formular gesendet. Alles ist in schönen Variablennamen gehalten, so dass man sehr diskret eizelne Befehle auslösen kann und somit eine zuverlässige und eindeutige Steuerung des Radios möglich ist.

Die wichtigsten Befehle (danke an meine aktuellen Schulpraktikanten, der das Reverse-Ingeniering innerhalb weniger Stunden über die Bühne gebracht hat):

Befehl Variable Wert Datei an die der POST gesendet wird
Verstärker ein btnAmplifierSwitch „Einschalten“ index.htm
Verstärker aus btnAmplifierSwitch „Ausschalten“ index.htm
Wiedergabe Play btnStationStart 0 index.htm
Wiedergabe Stop btnStationStop 0 index.htm
Play mit Speicherplatz 0 btnPlay und hidStationIndex btnPlay=0
hidStationIndex=[ID]
stations.htm
Nächster Sender btnStationNext 0 index.htm
Vorheriger Sender btnStationPrev 0 index.htm
Laustärke + btnVolumeUp 0 index.htm
Lautstärke – btnVolumeDown 0 index.htm

Bei btnAmplifierSwitch bin ich mir nicht sicher ob wirklich der Wert berücksichtigt wird oder ob das Radio einfach nur ein / aus Togglet… Die restlichen Variablen kann jeder selbst aus dem Quelltext der Webseite auslesen. Der 1. Sender der Liste hat die ID0 …

CURL Aufruf sieht in etwa so aus:

curl --data-urlencode btnVolumeUp=0 http://192.168.20.35/index.htm

 curl --data-urlencode btnPlay=0 --data-urlencode hidStationIndex=[StationID] "http://192.168.20.35/stations.htm"

Der CURL Befehl ist nicht standardmässig in der CCU enthalten, kann aber mit wenig Aufwand integriert werden

Ein Zentralenskript zum Einschalten des Radios sieht wie folgt aus:

 string stdout;
 string stderr;
 system.Exec("curl --data-urlencode btnPlay=0 --data-urlencode hidStationIndex=0 -s -k 'http://192.168.2.41/stations.htm'", &stdout, &stderr);
 string stdout;
 string stderr;
 system.Exec("curl --data-urlencode btnAmplifierSwitch=Einschalten -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);

Es macht sich gut erst die Wiedergabe zu starten und dann den Verstärker einzuschalten, so erziehlt man einen leicht Soft-Dimmeffekt und nicht ein aprubtes Starten der Musik. Zu Abschalten geht man den Weg anders herum:

string stdout;
string stderr;
system.Exec("curl --data-urlencode btnAmplifierSwitch=Ausschalten -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);
string stdout;
string stderr;
system.Exec("curl --data-urlencode btnStationStop=0 -s -k 'http://192.168.2.41/index.htm'", &stdout, &stderr);

Das Radio kann nun bequem per Wandtaster oder per zeitgesteuertem Zentralenskript bedient werden und hat trotz des kleinen Verstärkers einen guten verzerrungsfreien Klang. Als Lautsprecher dienen beim ELV erhältliche KFZ Lautsprecher von MAC Audio die in einen einfachen Multiplex-Kasten gebaut wurden.

Ich hoffe das war Interessant und ein Kaufanreiz 😛 Viel Spaß beim Basteln…

VN:F [1.9.22_1171]
Rating: 5.0/5 (6 votes cast)