Raspberry Pi Projekte



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 ..

Hinter den Bildern findet sich immer ein Link zum Händlern, der mir die Teile verkauft hat. Diese sitzen alle irgendwo in Deutschland zur Minimierung des internationalen Paketverkehrs.

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

Da ich das Internet-Radio zusammen mit dem Verstärker ein- und ausschalten will, entsteht das Problem des geordneten herunterfahren des Raspberry Pi. Entzieht man dem Raspberry Pi einfach den Strom, kann es zur Zerstörung des Betriebssystems auf der SD-Karte, wenn gerade auf Daten auf die Karte geschrieben werden. So richtig final schaltet sich der Raspberry Pi eigentlich nur aus, wenn man Ihm den Strom entzeiht. Ein Neustart erfolgt dann beim nächsten Strom einschalten.

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 ...

Ein kommerzielles Gehäuse gibt es nur für das 7 Zoll Display. Ich stelle mir aber ein Gehäuse vor, dass alle Teile des Internetradio enthält und auch noch ins Wohnzimmer passt.

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.