Raspberry Pi als Internet-Radio
Der 25 Jahre alte Verstärker soll mit einem Internet-Radio zu neuem Leben erweckt werden. Auch sind die Lieblingsradiosender nicht über UKW zu empfangen. Der bisher verwendete Fernseher mit Satelitten-Schüssel hat nicht den gewünschen Klang von zwei 40 kg Boxen.
Konzept
Raspberry Pi mit 7 Zoll Touch Display und einem Digital-Analog-Wandler mit Stereo-Chinch-Buchsen. Bedienung über den Browser auf dem Raspberry oder eine App auf dem Smartphone.
Genauer ..
Raspberry Pi 3B+
Da ich noch keinen Raspberry Pi besitze, habe ich mir einen zu Weihnachten schenken lassen. Natürlich die gerade aktuelle Version 3B+, da er ja diverse Aufgaben übernehmen soll.
Weiteres benötigtes Zubehör:
- Raspberry Pi Netzteil
- Mini-SDHC Speicherkarte mit mindestens 8 GB Speicherplatz (aktuell 32 GB)
- Diverses Befestigungsmaterial
7 Zoll Touch Display
Entschieden habe ich mich für das 7" Touch Display von Waveshare.
-
Vorteile:
- Auflösung: 1280 x 800 Pixel
- Anschlüsse: HDMI für das Video-Signal und MiniUSB für das Touch-Feld
-
Nachteile:
- Anschlüsse liegen auf der (rechten) Seite
- Kein kommerziell verfügbares Gehäuse
HiFi Berry DAC Plus
Für die kleine Quäck-Box reicht der Klang des Onboard-Digital-Analog-Wandlers des Raspberry Pi völlig aus. Meine alte Stereo-Anlage soll aber schon etwas besser klingen und hat auch keine Klinken-Buchse.
So wird ein besserer Digital-Analog-Wandler benötigt, der auch gleich noch Chinch-Buchen bereitstellt.
Entschieden habe ich mich für den DAC+ PRO von HifiBerry.
HDMI Kabel
Das mit dem 7 Zoll Touch Display gelieferte HDMI Kabel ragt zu weit auf der linken Seite heraus. Dadurch würde das geplante Gehäuse sehr breit werden. Bei der Suche nach einem Bandkabel mit abgewinkelten Stecker wird man für fertige Kabel fündig in Fernost. Zufällig habe ich Einzelteile für solch ein Kabel gesehen, mit denen man sich individuelle Lösungen einfach selbst herstellen kann.
Entschieden habe ich mich für die HDMI DIY Teile von Adafruit. Das Bandkabel hat eine Länge von 20 cm.
Montiert werden die Bandkabel in den Klemmen auf den kleinen Leiterplatten. Dazu werden die beiden kleinen schwarzen Gnubbel auf der linken und rechten Seite Klemmen herausgezogen. Das Kabel wird dann mit der blanken Seite nach oben in die Klemme geschoben. Mit dem zurückschieben der Gnubbel wird das Kabel befestigt.
USB Kabel
Das mit dem 7 Zoll Touch Display gelieferte USB Kabel ragt fast so weit auf der linken Seite heraus wie das HDMI Kabel. Bei der HDMI-Kabel-Quelle gibt es auch die Einzelteile, mit denen man sich individuelle Lösungen ach für USB einfach selbst herstellen kann.
Entschieden habe ich mich für die HDMI DIY Teile von Adafruit. Das Bandkabel hat eine Länge von 10 cm.
Für das Internetradio verwende ich ein "RaspberryPi OS with desktop" in der 32bit-Version. Alle zusätzlich benötigte Software wird nachinstalliert. Wenn man wirklich nur das Internetradio betreiben will, kann man sogar noch einen Teil der enthaltenen Pakete deinstallieren, um zusätzlichen Platz zu schaffen.
7 Zoll Touch Display
Startet man den Raspberry Pi ohne Anpassungen mit dem 7 Zoll Display, wird nur ein Teil den Fläche zur Anzeige genutzt. Der andere Teil wird mit bunten Streifen gefüllt. Dies sollte man auch nicht zu lange tun, da sich diese Streifen schnell in das Display "einbrennen". Aber keine Angst, sie gehen wieder weg, es dauert aber etwas. Um das ganze Display zu nutzen, muß die boot-Konfiguration angepasst werden.
Am komfortablesten geht dies schon am Linux-PC. Die Raspberry Pi Speicherkarte in einen Kartenleser stecken und warten bis sie vom System erkannt wurde. Dann die Konfigurationsdatei mit dem Editor öffnen und die notwendigen Änderungen vornehmen. Dies kann auch schon vor dem ersten Nutzen der Speicherkarte im Raspberry Pi erfolgen.
/boot/config.txt
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_ct 1024 600 60 6 0 0 0
dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
hdmi_drive=1
hdmi_force_hotplug=1
Feste IP Adresse
Mit einem großen Monitor arbeitet es sich deutlich bequemer als auf dem kleinen 7" Displays des Raspberry. Also ist der Plan, Remote auf dem Raspberry zu arbeiten. Damit das immer mit der gleichen Adresse erfolgen kann, ist eine feste IP-Adresse notwendig. Das üblicherweise voreingestellte DHCP vergibt die IP-Adressen wie es ihm passt. Da kann sich die Adresse schon mal ändern.
Also beherzt die Konfigurationsdatei des DHCP-Client-Dienstes geöffnet und entsprechend dem Beispiel die feste IP-Adresse definieren. Diese sollte auch von Router unterstützt werden.
/etc/dhcpcd.conf
# Static IP configuration:
# LAN port
interface eth0
static ip_address=192.168.xxx.80/24
static routers=192.168.xxx.1
static domain_name_servers=192.168.xxx.1
# WLAN port
interface wlan0
static ip_address=192.168.xxx.81/24
static routers=192.168.xxx.1
static domain_name_servers=192.168.xxx.1
Remote Desktop Service
Zugriff vom Laptop mit Linux/Windows auf den Raspberry Desktop. Um den ganzen Desktop auch über nicht so schnelle Netze zu übertragen, funktioniert RDP deutlich besser als der X-Server. So ist ein konfortabler Zugriff von überall möglich.
Raspberry Pi Seite: RDP Server installieren
Auf der Raspberry Pi Seite wird ein RDP Server benötigt. Die beste freie Implementierung auch mit mehreren Bildschirmen ist XRDP. Nach der Installation wird der Server komplett eingerichtet und auch gleich gestartet.
sudo apt install xrdp
sudo systemctl status xrdp
Windows Seite: Einfach verbinden
Da RDP von Microsoft stammt, ist der Client auf allen Windows-Installationen vorhanden. Einfach 'Remote Desktop' starten, die Adresse des Raspberry Pi eingeben, den Anmeldenamen und das Passwort eingeben und fertig.
Linux Seite: RDP Client installieren und verbinden
Remmina RDP Client installieren. Remnina starten und neue Verbindung anlegen. Verbinden...
Dateien von Linux/Windows Laptop zum Raspberry und zurück
Der Zugang aus dem Heim-Netz zum Internet erfolgt über eine Fritzbox. Diese bietet auch die Möglichkeit, sie als kleinen NAS-Server zu verwenden. Damit sollte es eigentlich möglich sein, Dateien einfach zwischen allen Geräten des Heim-Netzes auszutauschen.
Fritzbox vorbereiten
Damit die Fritzbox genügend Platz zum speichern der Dateien besitzt, habe ich einen 32GB USB-Stick in die USB-Buchse gesteckt. Dieser wird dann in der Konfiguration der Fritzbox als NAS-Speicher freigegeben. Für die Freigabe muss man dann noch einen Nutzer in der Fritzbox anlegen. Ich habe ihn 'nasuser' genannt und ein möglichst sicheres Passwort gesetzt.
Raspberry-Zugriff auf NAS
Als erstes brauchen wir ein Verzeichnis, mit dem wir das Verzeichnis des Fritzbox-NAS verbinden wollen.
mkdir ~/NAS
chmod 777 ~/NAS
Um den Zugriff zu testen, verbinden wir uns erst einmal manuell mit dem NAS. Dazu benötigen wir den Freigabenamen des USB-Sticks, den Nutzernamen und das Passwort.
sudo mount -t cifs -o username=nasuser,password=xxxxxxx,uid=pi,gid=pi //fritz.box/fritz.nas/USB-Stick-Name /home/pi/NAS
chmod 777 ~/NAS
Kommt keine Fehlermeldung, sollte sich der USB-Stick der Fritzbox hinter dem Verzeichnis NAS verstecken. Um zu testen, ob alle funktioniert, wechseln wir in das Verzeichnis und erzeugen ein neues Verzeichnis für den Datenaustausch.
cd ~/NAS
mkdir raspberry-pi
Klappte das wieder, benötigen wir noch eine Lösung, wie die Verbindung zum NAS auch einen neustart des Raspberry überlebt. Dazu trennen wir die Verbindung zum NAS und legen uns einen speziellen Eintrag in der Mount-Tabelle des Raspberry an.
cd ~
sudo umount /home/pi/NAS
/etc/fstab
//fritz.box/fritz.nas/SanDisk-CruzerFit-01 /home/pi/NAS cifs username=nasuser,password=xxxxxxx,uid=1000,gid=1000 0 0
Hat man alles richtig eingegeben, kann der neue Eintrag in der Mount-Tabelle getestet werden.
sudo mount -a
cd ~/NAS
ls -la
Jetzt sollte man das vor kurzem angelegte Verzeichnis 'raspberry-pi' mit dem Nutzer pi und der Gruppe pi wieder sehen.
Laptop mit Linux
Geht analog zum Raspberry.
Windows Laptop
Siehe AVM-Hilfe.
Xxxx
Installation
Von den Mopidy-Entwicklern wird empfohlen, Mopidy vom Server der Entwickler zu installieren. Die Zyklen, bis eine neuen Version in den offizielln Debian-Repositories enthalten ist, sind doch recht lang.
Dazu muss zuerst der Schlüssel für das Repository bekannt gemacht werden. Dann das Repository zu den Paketquellen hinzufügen und die Paketlisten neu eingelesen. Jetzt kann Mopidy installiert werden:
wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list
sudo apt update
sudo apt install mopidy
Wenn man Mopidy aus dem Repository der Entwickler installiert hat, kann man dies auch mit den gewünschten Erweiterungen tun. Dazu verwendet man den Python3 Paket-Manager pip. Die folgenden Kommandos zeigen die notwendigen Schritte: Paket suchen und Paket installieren.
- Installierte Pakete auflisten
- Neues Paket suchen
- Neues Paket installieren
- Nicht mehr benötigtes Paket deinstallieren
sudo python3 -m pip list
sudo python3 -m pip search mopidy - oder die PyPi Internetseite https://pypi.org
sudo python3 -m pip install Mopidy-Local
sudo python3 -m pip uninstall Modipy-Local
In der Liste der installiereten Pakete findet man zum Beispiel schon eine Zeile für Mopidy: 'Mopidy: 3.1.1'. Die Suche funktioniert zur Zeit nur über die Internetseite von PyPi, da der Kommandozeilenzugang attakiert wird. Für das Internetradio verwende ich derzeit folgende Erweiterungen:
- Mopidy-Local - Zugriff auf das lokale Dateisystem
- Mopidy-MusicBox-Webclient - Steuerung von Mopidy mit dem Browser
Konfiguration
Verwendung
Hardware
Die Lösung ist eines der USV-Module, die es für den Raspberry als HAT-Modul gibt. Ich habe mich für PiUSV+ von Ritter Elektronik entschieden. Diese hat einen drei Möglichkeiten für die Stromversorgung des Raspberry:
- Eine Micro-USB-Buchse für ein Standard-Raspberry-Netzteil.
- Einen Wide-Range-Gleichstromeingang für 5-25 V (z.B. Auto-Steckdose).
- Einen LiPo-Akku-Anschluß mit Ladefunktion!
Der USB- und der Wide-Range-Eingang werden überwacht und nach dem Ausfall wird mit hilfe des Akkus der Raspberry geordnet heruntergefehren. Auch kann hoffentlich ein weiteres HAT-Modul auf die USV+ gesteckt werden (z.B. der HifiBerry).
Ein weiterer Vorteil gegenüber Alternativen wie dem StromPi ist, dass die Kommunikation zwischen PiUSV+ und dem Raspberry Pi nur über den I2C-Bus geht. Damit stehen alle anderen Ports für weitere HAT-Module zur Verfügung. Auch der I2C-Bus wird an weitere HAT-Module durchgeschleift.
Installation
Die Platine der USV+ wird einfach zwischen Raspberry Pi und HifiBerry gesteckt. Zur Befestigung des HifiBerry auf der USV+ werden 10mm Distanzstücken benötigt. Das Netzteil wird nicht mehr an den Raspberry Pi angeschlossen sondern in die USB-Buchse der USV+ Platine. Danach sollte wieder alles funktionieren wie vorher.
Damit die USV+ die ihr zugewiesene Aufgabe auch erfüllen kann, benötigt sie noch einen LiPo/LiIon-Akku. Laut Dokumentation ist ein Akku mit einer Zelle (also 3,7V) und mindestens 300mA/h für den Betrieb notwendig. Da ein Raspberry Pi mit 7 Zoll Display, HAT-Modulen und eventuell weiterer USB-Hardware bis zu 3A Strom ziehen kann, ist aber ein weitaus größerer Akku notwendig.
Für die ersten Tests habe ich mich für einen 3400mAh Akku entschieden, der auch mal 3A liefern kann und hoffentlich die Zeit für das Herunterfahren des Raspberry Pi durchhält. Der Akku wird an die beiden Anschlüsse neben dem MiniUSB-Anschluss angeschlossen. Dabei müssen die Anschlußkabel relativ dick sein, damit sie in den Anschlussklemmen halten. Wird der Raspberry Pi jetzt eingeschaltet, beginnt die USV+ sofort damit, den Akku aufzuladen, wenn dies notwendig ist.
Der erste Schritt für die Konfiguration ist das Aktivieren des I2C-Busses, fals der nicht schon für anderes benötigt wird. Dazu wird einfach das Raspberry Pi Konfigurationstool aufgerufen (GUI oder Konsole) und unter "Schnittstellen" I2C auf "Aktiviert" gesetzt. Benötigt wird noch einen Treiber für die USV+. Dieser heißt piupsmon und muss extra heruntergeladen werden, da er nicht in den Repositories von Raspbian enthalten ist. Der größte Händler stellt auf seiner Web-Site auch den Treiber bereit. Den kann man am einfachsten mit wget auf den eigenen Raspberry Pi laden und dann installieren:
cd ~/temp
wget https://cdn-reichelt.de/documents/datenblatt/A300/PIUPSMON-0.9.zip
unzip PIUPSMON-0.9.zip
sudo dpkg -i piupsmon-0.9.deb
sudo /etc/init.d/piupsmon start
Nach dem ersten Start des Monitors sollte man den Raspberry Pi so lange laufen lassen, bis der Akku voll aufgeladen ist. Erst nach dem ersten vollständigem Aufladen ist die USV+ vollständig funktionstüchtig. Vorher schaltet sie nicht richtig um auf die Notstromversorgung durch den Akku.
Konfiguration
Die Konfiguration erfolgt Linux-Üblich über eine Konfigurationsdatei:
/etc/piupsmon/piupsmon.conf
Folgende Konfigurationsparameter stehen zur Verfügung:
Parameter | Wertebereich | Standardwert | Beschreibung |
---|---|---|---|
ShutdownTimer | 1 - 999.999.999 | 300 | Zeit in Sekunden, die das System weiterläuft, nachdem die Stannungsversorgung auf den Akku gewechselt hat. |
PowerOffTimer | 1 - 255 | ??? | Zeit in Sekunden, die das System noch eingeschaltet bleiben soll, nachdem der Befehl zum Herunterfahren gesendet wurde. |
ShutdownCmd | Zeichenkette | ??? | Befehl, mit dem das System heruntergefahren werden soll. Dies kann ein einfacher Befehl, als auch ein spezielles Script sein. Das Script sollte am Ende aber auch wirklich den Raspberry Pi herunterfahren. |
LogLevel | notice, error oder debug | ??? | Definiert die Menge der in die Log-Datei geschrieben Informationen. |
LogStatusDesc | 0 oder 1 | ? | Definiert, ob bei einem Statuswechsel nur ein numerischer Wert oder zusätzlich auch eine Beschreibung in die Log-Datei geschrieben wird. |
Fuß | Fuß | Fuß | Fuß |
/var/log/piupsmon.log
Experimentiert man mit dem Raspberry Pi auf dem Tisch, kann die in den Bauteilen entstehende Wärme einfach nach oben entweichen.
Steckt man aber ein oder mehrere HAT-Module auf den Raspberry Pi und alles in ein Gehäuse, kann die Wärme nicht mehr so einfach entweichen. Wird dann ordentlich was berechnet (z.B. bei einem großen Update) kann schon mal so viel wärme entstehen, dass der Raspberry Pi die Arbeitsfrequenz drosselt um weniger Wärme zu erzeugen. Damit wird der Raspberry Pi langsam. Da helfen dann aufgeklebte Kühlkörper auch nicht mehr. Die Wärme muss irgendwie aus dem Gehäuse raus.
Überwachen
Als erstes sollte man sich die Temperatur der CPU anzeigen lassen, um festzustellen, ob sie zu heiß wird.
Hinweis: Alles auf eine Zeile schreiben!
while true; do vcgencmd measure_clock arm; vcgencmd measure_temp; sleep 1; done&
Quelle: Make, Heft 3/2019, Seite 102
Hardware
Die einfachste Lösung: Einfach den Lüfter an die GPIO Pins GND und +5V anschließen.
Damit läuft der Lüfter dann los, sobald der Strom am Raspberry Pi anliegt. Das hat einen kleinen Nachteil: Auch wenn der Lüfter sehr leise läuft, ist es doch immer zu hören, auch wenn die Temperatur eigentlich nicht zu hoch ist. Da der Raspberry Pi im Wohnzimmer stehen soll, ist das natürlich ein Problem, besonders für Leute mit einem empfindlichen Gehör.
Die komfortable Lösung: Der Lüfter wird vom Raspberry Pi nur eingeschaltet, wenn die Temperatur über einen Schwellwert steigt.
Löten
...
Installation
wget ...
3D Druck
Gerade in Mode sind ja 3D-Drucker. Dafür muss man dann "nur" das Gehäuse konstruieren. Und diese Konstruktion wird zum Drucker gesendet und der liefert dann das Gehäuse.
Zum Glück hat sich ein Kollege einen 3D-Drucker zugelegt. So hat dieser Drucker dann ordentlich was zu tun.
Version 1
Der erste Versuch, der bis zum Drucken vollendet wurde.
Zweiteiliges Gehäuse: Vordere Abdeckung und hintere Abdeckung. Der Baugruppenträgen ist eine Platte, die an die vordere Abdeckung angeschraubt wird.
Version 2
Dreiteiliges Gehäuse: Baugruppenträger, vordere Abdeckung, hintere Abdeckung. Alle HAT-Module werden direkt auf den Raspberry Pi aufgesteckt.
Die Tiefe des Gehäuses ist noch sehr groß. Damit sieht es noch etwas unförmig aus.
Version 3
Dreiteiliges Gehäuse: Baugruppenträger, vordere Abdeckung, hintere Abdeckung. Die HAT-Module werden aufgeteilt. Eins steckt direkt auf den Raspberry Pi gesteckt. Das zweite wird neben dem Raspberry Pi befestigt und mit einem Bandkabel mit dem Raspberry Pi verbunden.
Es ist die flachste Gehäuse-Variante, die für das Wohnzimmer geeignet scheint.