Internet Radio mit HomeKit Integration

13.04.2022 | Basteln, Software und Tools

Features

  • Empfängt Internet Radio Streams
  • nutzt eigenen Verstärker mit externen passiven Boxen
  • hat Stationstasten am Gerät
  • besitzt einen Drehregler zur Lautstärke Steuerung
  • hat ein einfaches LCD Display
  • kann AirPlay Streams empfangen
  • ist in HomeKit integriert
  • kann mit Infrarot Fernbedienung bedient werde
  • kann über Bluetooth genutzt werden
  • kann Spotify Connect nutzen (nutze ich nicht)
  • kann Songs aus eigener Musik Bibliothek abspielen (nutze ich nicht)

Genutzte Hardware

  • Raspberry Pi 3B 1GB
    (das neuere Modell gibt es für unter 40€ z.B. hier RaspPiShop.de)
  • HifiBerry Amp2
    (etwa 60€ bei HiFiBerry.com)
  • Micro SD Karte, Netzteil, Kühlkörper, Lautsprecher Boxen
    (hatte ich von alten Geräten)
  • LCD Display mit 2 Zeilen à 16 Zeichen und I2C Anschluss
    (HD44780 1602 mit I2C etwa 6€ z.B. bei AZ-Delivery.de)
  • Rotary Encoder
    (KY-040 etwa 5€ ebenfalls z.B. bei AZ-Delivery.de, man braucht noch den Knopf für den Schaft in 6mm mit D-Form)
  • 3 Taster
    (hatte ich noch, meine sind Kurzhubtaster für Durchsteckmontage mit Kappen, habe ich auf eine Lochrasterplatine gelötet)
  • IR Empfänger VS1838B
    (hatte ich noch, unter 2€ z.B. im Makershop.de)
  • IR Fernbedienung
    (meine gibt es für etwa 5€ bei Sparkfun.com)
  • Lautsprecher Klemmleiste
    (unter 2€ z.B. bei Conrad.de)
  • Stromanschluss Buchse und intern ein 2,1mm Stecker
    (ebenfalls unter 2€ z.B. bei Conrad.de)
  • Kabel mit DuPont Steckern
    (als Set z.B. bei Reichelt.de, man braucht natürlich noch eine Crimpzange)
  • 3D gedrucktes Gehäuse
    (meine Konstruktion bei Thingiverse.com und die Fusion360 Datei)
DIY Internetradio mit Fernbedienung

Genutzte Projekte

Vorgeschichte

Unser altes Küchenradio ging kaputt und ich dachte mir, das ist die Gelegenheit für ein Elektronik Bastelprojekt.

Wichtig war eine einfache Bedienbarkeit am besten mit Stationstasten, eine Infrarot Fernbedienung da das Radio oben in einem Regal steht und eine Möglichkeit Podcasts vom Smartphone zu hören.

Die Integration in unser SmartHome ist eigentlich nicht wichtig aber für mich ein Nice-to-Have.

Das Design war mir Anfangs sehr wichtig und ich wollte ein Radio im Retro Stil mit moderner Technik. Allerdings ist mir das erste Gehäuse zu beengt ausgefallen um die Komponenten gut zu montieren. Das jetzige Design ist vereinfacht und bietet viel Platz.

In einem ersten Projekt habe ich versucht einen Akku-Betrieb zu ermöglichen mit einer Docking-Station mit Kontakt Pins. Funktioniert im Prinzip ist dann aber der Vereinfachung des Designs zum Opfer gefallen.

Ich habe unterschiedliche Hardwareausprobiert: ESP32 mit Mini Verstärker, Raspberry Pi Zero mit Adafruit Audio Bonnet und dann ein Raspberry Pi 3B mit HiFiBerry Amp2.

Zwischenzeitlich hatte ich dann den Wunsch möglichst noch Teile des alten Radios wieder zu beleben: das eingebaute Netzteil oder den Verstärker. Das hat gar nicht funktioniert, da das alte Radio noch analoge Technik war und die dort eingesetzten Spannungen gar nicht passten mit meinen Kenntnissen der Mikrokontroller und Einplatinen Computer Boards.

Für den ESP32 gab es Software Projekte, die sehr viele Funktionen abgedeckt haben, die für mich aber nicht mehr beherrschbar waren. Ausserdem benötigt man mehr Komponenten zur Umsetzung mit mehr Fehlermöglichkeiten. Der Pi Zero ist etwas zu schwach um parallel zum Abspielen der Musik noch auf Signale zur externen Steuerung zu reagieren. Ausserdem gab es in einigen Projekten Probleme mit der Ansteuerung des Audio Bonnets. Erste Projekte waren per MQTT steuerbar.

Über ein Jahr hatte ich das Volumio Projekt installiert und war sehr zufrieden. Dann habe ich nach langer Zeit die Version geprüft und festgestellt das es eine neue Version gab. Ohne groß nachzudenken habe ich auf Version 3 aktualisiert und erst dann bemerkt, dass nicht alle Plug-Ins schon kompatibel sind. Ausserdem musste ich feststellen, dass meine eigene Dokumentation mit allen Konfigurationen und notwendigen Schritten mangelhaft war. Obendrein scheint das Volumio Projekt sich in Richtung Premium Modell zu entwickeln. Das ist prima wenn man es im Wohnzimmer in seiner Stereoanlage einsetzt, für mich aber nicht mehr so gut ist.

Hier jetzt also die Dokumentation meines Raspberry Pi 3B Projekts mit HiFiBerry Amp2 und dem moOde Audio Projekt.

Hardware

Die Komponenten sind mit selbstkonfigurierten DuPont-Steckern versehen und können einfach auf die GPIO Pins des Pi gesteckt werden. Beim nächsten Umbau können die Teile einfach wiederverwendet werden. An die Micro SD Karte kommt man noch dran im zusammengebauten Zustand.

Raspberry 3B und HiFiBerry Amp2

Es gibt zwar genügend Ground Anschlüsse auf der GPIO Leiste, aber nicht genügend 3,3V Pins. Aus einem kleinen Pfostenstecker und etwas Kupferdraht habe ich mir eine Verteilerleiste für die Spannung erstellt, isoliert mit etwas Heisskleber.

gecrimpte DuPont Stecker

Meine Stationstasten belegen die nebeneinander liegenden Pins Ground, 25, 8 und 7.

Der Infrarot Empfänger belegt Pin 17 und einen nebenan liegenden Ground Pin (und 3,3V aus dem „Verteiler“).

Der Drehgeber mit Druckknopf belegt 3,3V, 10, 9, 1 und Ground.

Das Display belegt 3,3V, 2, 3 und Ground.

GPIO Leiste Raspberry Pi

Der HiFiBerry Verstärker ist intern ebenfalls an den Pins 2 und 3 angeschlossen, es gibt aber keine Konflikte, da eine andere I2C Adresse benutzt wird. Die Pins 18, 19, 20 und 21 sind das I2S Interface und werden vom HiFiBerry benutzt. Pins 4 und 17 schalten ebenfalls Funktionen auf dem Verstärker Board und werden von mir nicht benutzt. Siehe auch hier.

LCD Panel und Knopfleiste auf Lochrasterplatine

Statt die Anschlüsse des Raspberry Pis bzw. des HiFiBerrys direkt zu benutzen habe ich die Lautsprecheranschlüsse und die Strombuchse verlängert. Sieht etwas besser aus und gibt mir mehr Möglichkeiten beim Design des Gehäuses.

Lautsprecheranschluss und 12V Stromanschluss

Das Radio ist sehr leicht. Unten habe ich kleine Klebefüsschen angebracht. Wenn man die Druckknöpfe direkt am Gerät benutz muss man es festhalten bzw. auf das Regal festdrücken.

Gummifüsse

Das Gehäuse hat kleine Stand-Offs für alle Komponenten integriert. Für den Deckel habe ich hier keine Gewinde Inserats für Metallschrauben benutzt. Die kleinen Holzschrauben schneiden sich selbst in das Plastik rein.

2-teiliges 3D gedrucktes Gehäuse

Um den Platzbedarf besser abschätzen zu können erstelle ich mir ganz einfache 3D Modelle der Komponenten. Damit ist es auch leichter, die Position der Befestigungslöcher zu bestimmen.

Design in Fusion360

Hier nochmal der Link zu meiner Fusion360 Datei.

moOde

Neben moOde gibt es noch andere tolle Audio Projekte für den Raspberry Pi. Auch für den ESP32 Mikrocontroller findet man Internet Radio Projekte. moOde hat eine aktive Community und viele Funktionen sind schon eingebaut. Den Rest konnte ich über Linux Dienste nachinstallieren.

Nach der Installation kann ich über den Access Point (SSID=Moode, pwd=moodeaudio), den moOde am Anfang zur Verfügung stellt, per Webinterface (http://172.24.1.1) mit der Konfiguration fortfahren. Steht alles im moOde Setup Guide.

Meine Konfiguration sieht so aus:

moOde Konfiguration
moOde GPIO Konfiguration
moOde Netzwerk Konfiguration
moOde Audio Konfiguration Teil 1
moOde Audio Konfiguration Teil 2

Weitere Konfigurationsschritte laufen dann über das Terminal und SSH Zugriff auf den Pi.

moOde 8 in der Konsole

Zuerst natürlich ein neues Passwort vergeben und im Passwortmanager speichern.

Um einige Konfigurationsdateien einfach zu erstellen oder auf meinem Rechner zu sichern verwende ich ein File Transfer Programm.

Für die drei Tasten gibt es drei kurze Skripte. Die sehen so aus (Beispiel station1.sh):

#!/bin/bash
mpc clear
mpc load station1
mpc play

Auf dem Pi im Verzeichnis /var/lib/mpd/playlists gibt es dann die dazu passenden m3u Dateien. Diese haben nur eine Zeile und sehen bei mir so aus (Beispiel station1.m3u):

http://www.radioeins.de/livemp3

Für station2 und station3 entsprechend.

pigpio

Damit man überhaupt auf die GPIO Pins zugreifen kann muss noch eine Bibliothek installiert werden. Dazu wird dann ein Hintergrundprozess gestartet, der beim Booten mit aufgerufen wird. Installation ist hier beschrieben. Bei der Benutzung eines HiFiBerrys muss noch berücksichtigt werden, dass nicht alle Pins zur Verfügung stehen (siehe hier).

pydPiper

pydPiper ist ein Python Programm das in einem Docker Container läuft und als Hintergrundprozess unterschiedliche Informationen auf unterschiedlichen Displays anzeigen kann.

Im Forum findet man im Bereich FAQ and Guides eine Anleitung: LCD/OLED display using pydPiper.

MoodeIrRemote

Um eine Infrarot Fernbedienung nutzen zu können setzte ich eine weitere Bibliothek ein. Im Forum gibt es hier eine Anleitung: IR remote control without LIRC

Im Verzeichnis /home/pi/MoodeIrRemote/keymaps auf dem Pi habe ich mir nach dem Training mit meiner kleinen roten Fernbedienung eine JSON Datei. Ich habe der Einfachheit halber meine Tasten A, B und C auf der Fernbedienung als Kommandos für seek_forward, seek_backward und mute eingelesen. Diese Funktionen benötige ich nicht, man kann das aber auch besser konfigurieren. Meine config.json Datei im Verzeichnis /home/pi/MoodeIrRemote sieht so aus:

{
  "remotes": ["default.json",
              "red_remote.json"],
  "ir_gpio_pin":  17,
  "logging": {
    "level": "INFO",
    "file_level": "DEBUG",
    "global_level": "WARNING",
    "log_all_to_file": true
  },
  "spotify": {
    "redirect_uri": "http://moode.local:8080/auth",
    "client_id": "",
    "client_secret": "",
    "auth_server_listen_ip": "0.0.0.0",
    "auth_server_listen_port": 8080
  }
}

Im Verzeichnis /home/pi/MoodeIrRemote/commands habe ich dann die base.json Datei editiert. Eigentlich sollte man hier eher eine separate Datei anlegen, habe ich nicht gemacht. Die Einträge der drei Tasten A (seek_forward), B (seek_backward), und C (mute) sehen damit so aus:

{
 ...
  "seek_forward": {
    "moode": {
      "target": "shell",
      "command": ["mpc clear", "mpc load "station1"", "mpc play"]
    },
 ...
}

NAS

Als SmartHome System nutzen wir Apple HomeKit. Um Geräte einzubinden die keine direkte Unterstützung bieten setzen wir Homebridge ein. Das ist eine freie Software die auf einem Server läuft. Über Plug-Ins werden Funktionen und Geräte angeschlossen die dann in Apple Home zur Verfügung stehen. Bei uns läuft Homebridge in einem Docker Container auf der Synology Diskstation.

Homebridge

Die Installation ist einfach und ist hier beschrieben. Ein Pfad aus dem Container ist auf ein Verzeichnis auf dem NAS gemappt. Dadurch hat man einfachen Zugriff auf die Konfigurationsdateien. Homebridge lässt sich aber sehr gut über das Webinterface einrichten.

OwnTone

In einem separaten Docker Container läuft OwnTone-Server ebenfalls auf der Synology Diskstation. Hier habe ich das /config/owntone Verzeichnis des Containers gemappt. Die Installation ist hier beschrieben. OwnTone kann man über ein Webinterface konfigurieren. Der Ordner mit den Radiostationen befindet sich unter /config/owntone/music/ . Dort habe ich ebenfalls für 3 Stationen m3u Dateien angelegt. Sieht so aus (Beispiel station1.m3u):

http://www.radioeins.de/livemp3

Homebridge OwnTone Radio Plugin

In Homebridge findet man dann ein Plug-In von joepool über das dann die Verbindung hergestellt werden kann.

In einem ersten Durchgang stellt man die Optionen für Device Discovery und Station Discovery auf true. Beim nächsten Neustart von Homebridge findet man die gefundenen AirPlay Geräte und die im OwnTone Container gespeicherten Radio Streams als IDs. Wir finden also auch unser neues moOde Radio. Jetzt kann man in Homebridge für jeden AirPlay Empfänger und jede Station ein Gerät anlegen, das sich dann in HomeKit ein- und ausschalten lässt.

Steuerung per App

Da moOde auf MPD nutzt, gibt es auch Apps für iOS Geräte, die als Steuerung dienen können.

yaMPC auf dem iPhone

Ich habe „yet another Music Player Daemon Client) yaMPC ausprobiert. Funktioniert einwandfrei.

Browser am Mac

Am Mac benutze ich das Web Frontend von OwnTone.

Fazit

Musik in der Küche zu hören geht natürlich preisgünstiger. Die hier eingesetzten Komponenten kosten etwa 250€. Wenn man schoneinige alte Teile hat, kann man etwas sparen.

Dieses Projekt ist sehr umfangreich und vielschichtig, so wie hier beschrieben dauert es einige Abende bis man fertig ist. Da gibt es sicher einfachere Umsetzungen.

Mir gefällt gerade dieser Bogen von

  • Komponenten auswählen und besorgen
  • Elektronik Bauteile zusammenbauen und löten
  • Gehäuse designen und bauen (bzw. 3D drucken)
  • Software auswählen und installieren
  • Software Komponenten konfigurieren und individualisieren
  • Kompatibilitätsprobleme lösen
  • Dokumentation für die Wartbarkeit und als mögliche Hilfe für andere

moOde läuft sehr gut und bietet sehr viele Funktionen. Der Raspberry 3B hat genügend Power, der HiFiBerry Amp2 klingt super.

Die Boot-Up Zeit sind etwa 45 Sekunden bis Musik aus dem Lautsprecher kommt und weitere 15 Sekunden für das Display. Deshalb läuft das Radio ununterbrochen bei mir, ich mute nur die Ausgabe. Der gemessene Stromverbrauch liegt bei etwa 1,5 W (auch im StandBy).

Von mir noch zu verbessern wäre die Konfiguration von pydPiper. Die Anzeige beim Radio Stream nutzt noch nicht alle Felder. Wird über OwnTone angesteuert ist nur die Uhrzeit zu sehen.

In der Konfiguration von OwnTone Radio gibt es wohl noch einen Fehler. Die Einrichtung hat funktioniert und es läuft auch alles, aber es gibt im Status einige Warnhinweise.

Das Gehäuse ist zu leicht. Das nächste Mal werde ich einige Metallgewichte einbauen. Ich nutze in anderen Projekten große Metallunterlegscheiben.

Der ganze SmartHome Aufwand lohnt sich eigentlich nicht. Man müsste sicher erkennen, welcher Bewohner gerade in der Küche ist um den Wunschsender einzustellen. Bei uns zu Hause findet nur einer SmartHome gut, die andere lässt es über sich ergehen.

Insgesamt hat es viel Spass gemacht!

Beitrag teilen:

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert