Raspberry Pi als Musikabspielgerät an der Stereoanlage

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Music Player Daemon (MPD))
(Softwaredownload)
 
(37 dazwischenliegende Versionen von einem Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Kategorie:Hardware]]
 +
 
=Was soll das hier?=
 
=Was soll das hier?=
 +
[[Bild:Musikabspielgeraet.jpg|thumb|150px|Gesamtsystem...]]
 
Eigentlich wollte ich nie beim [http://www.nickles.de/forum/mikes-wohnzimmer/2013/2-millionen-raspberry-pi-sinnvoller-allrounder-oder-hype-539031263.html "Raspberry Pi"-Hype] mitmischen. Als eingefleischter Pinguin muß ich immer innerlich grinsen, wenn die neuen "Linuxversteher" von ihren genialen Projekten berichten, [http://www.mikrocontroller.net/topic/315653 aber meist nicht so richtig wissen, was sie tun...]! Allerdings hatte ich mir vor einiger Zeit auch so ein Ding angeschafft, weil der Mini-Rechner für meine [[Wetterdaten_mit_Linux_aufzeichnen_und_verarbeiten|Wetteraufzeichnungen]], nach langen Jahren klaglosen Betriebes, plötzlich rumzickte. Die aufgetretenen Probleme konnten aber gelöst werden, die Hardware arbeitet wieder stabil und nun lag der voreilig gekaufte Raspberry arbeitslos auf meinem Schreibtisch rum....
 
Eigentlich wollte ich nie beim [http://www.nickles.de/forum/mikes-wohnzimmer/2013/2-millionen-raspberry-pi-sinnvoller-allrounder-oder-hype-539031263.html "Raspberry Pi"-Hype] mitmischen. Als eingefleischter Pinguin muß ich immer innerlich grinsen, wenn die neuen "Linuxversteher" von ihren genialen Projekten berichten, [http://www.mikrocontroller.net/topic/315653 aber meist nicht so richtig wissen, was sie tun...]! Allerdings hatte ich mir vor einiger Zeit auch so ein Ding angeschafft, weil der Mini-Rechner für meine [[Wetterdaten_mit_Linux_aufzeichnen_und_verarbeiten|Wetteraufzeichnungen]], nach langen Jahren klaglosen Betriebes, plötzlich rumzickte. Die aufgetretenen Probleme konnten aber gelöst werden, die Hardware arbeitet wieder stabil und nun lag der voreilig gekaufte Raspberry arbeitslos auf meinem Schreibtisch rum....
  
Zeile 11: Zeile 14:
 
==Raspberry Pi mit Touch-Display==
 
==Raspberry Pi mit Touch-Display==
 
[[Bild:Rpi display.jpg|thumb|150px|Raspberry Pi mit Touch-Display]]
 
[[Bild:Rpi display.jpg|thumb|150px|Raspberry Pi mit Touch-Display]]
Hardwareseitig ist ein Raspberry Pi Dreh- und Angelpunkt des hier vorgestellten Musikabspielgerätes. Da es unendlich viele [https://www.google.de/#q=raspberry%20pi Webseiten] zum Thema "Raspberry Pi" im Internet gibt, will ich nicht noch eine anfangen.... Vielleicht nur soviel: für dieses kleine Projekt setze ich ein Board vom Modelltyp B ein.
+
Hardwareseitig ist ein Raspberry Pi Dreh- und Angelpunkt des hier vorgestellten Musikabspielgerätes. Da es unendlich viele [https://www.google.de/#q=raspberry%20pi Webseiten] zum Thema "Raspberry Pi" im Internet gibt, will ich nicht noch eine anfangen.... Vielleicht nur soviel: für dieses kleine Projekt setze ich ein Board vom Modelltyp B ein, was aber für das Projekt auch nicht von entscheidender Bedeutung ist.
  
 
Interessanter ist da schon das dazugehörige [https://github.com/watterott/RPi-Display Touch-Display] mit folgender Spezifikation:
 
Interessanter ist da schon das dazugehörige [https://github.com/watterott/RPi-Display Touch-Display] mit folgender Spezifikation:
Zeile 19: Zeile 22:
 
* Schnittstelle: SPI (Touch Controller + Display)
 
* Schnittstelle: SPI (Touch Controller + Display)
  
Die Platine des Displays ist so gestaltet, dass sie direkt auf das Raspberry-Board gesteckt werden kann. Mit einem entsprechend angepaßten Gehäuse ergibt das Ganze ein nettes kleines ansehliches Gerät. Ich habe das Raspberry-Board, das Display und das Gehäuse im Bundle bei einem gut sortierten Elektronik-Versender eingekauft.
+
Die Platine des Displays ist so gestaltet, dass sie direkt auf das Raspberry-Board gesteckt werden kann (...eigentlich ist dieser Fakt der einzige Grund dafür, unbedingt einen Raspberry Pi für dieses Projekt zu verwenden). Mit einem entsprechend angepaßten Gehäuse ergibt das Ganze ein nettes kleines ansehliches Gerät. Ich habe das Raspberry-Board, das Display und das Gehäuse im Bundle bei einem gut sortierten Elektronik-Versender eingekauft.
  
Ein speziell für das Touch-Display angepaßtes Linux-Image (Basis: Raspbian), welches einfach [http://basic-tutorials.de/raspbian-auf-raspberry-pi-installieren/ auf eine SD-Karte kopiert] wird, findet man [https://github.com/watterott/RPi-Display#sd-card-image hier].
+
Ein speziell für das Touch-Display angepaßtes Linux-Image (Basis: Raspbian), welches einfach [http://basic-tutorials.de/raspbian-auf-raspberry-pi-installieren/ auf eine SD-Karte kopiert] wird, findet man [https://github.com/watterott/RPi-Display#sd-card-image hier]. Bei einem Update des Systems (apt-get upgrade) sollten deshalb [https://github.com/watterott/RPi-Display/blob/master/docu/FAQ.md#the-display-does-not-work-after-an-update diese Hinweise beachtet werden]!
  
 
==USB-Soundkarte==
 
==USB-Soundkarte==
 
[[Bild:Behringer uac202.jpg|thumb|150px|USB-Soundkarte Behringer UAC202]]
 
[[Bild:Behringer uac202.jpg|thumb|150px|USB-Soundkarte Behringer UAC202]]
Wie allseits bekannt, ist die interne Soundkarte des Raspberry Pi qualitativ nicht besonders. Weiterhin will ich das System auch an den Verstärkereingang meiner Stereoanlage anschliessen. Also musste eine vernünftige externe USB-Soundkarte her. Meine Wahl fiel auf die USB-Soundkarte [http://www.behringer.com/assets/UCA202_P0484_M_DE.pdf U-Control UCA-202] der Firma Behringer. Neben den expliziet gesuchten Audio-Ein-/-Ausgängen via Cinch-Buchsen, verfügt das Teil auch über einen optischen S/PDIF Ausgang und einen Kopfhöreranschluss mit Lautstärkeregler als gern "mitgekaufte" Ausstattung. Die Audioqualität ist, soweit ich das beurteilen kann, sehr gut und reicht für meine Belange vollkommen aus. Die Anschaffung lohnt sich auf jeden Fall!
+
Wie allseits bekannt, ist die interne Soundkarte des Raspberry Pi qualitativ nicht besonders. Weiterhin will ich das System auch an den Verstärkereingang meiner Stereoanlage anschliessen, was auch nicht unbedingt für den Klinkenbuchsen-Ausgang des Rapberry Pi spricht. Also musste eine vernünftige externe USB-Soundkarte her. Meine Wahl fiel auf die USB-Soundkarte [http://www.behringer.com/assets/UCA202_P0484_M_DE.pdf U-Control UCA-202] der Firma Behringer. Neben den expliziet gesuchten Audio-Ein-/-Ausgängen via Cinch-Buchsen, verfügt das Teil auch über einen optischen S/PDIF Ausgang und einen Kopfhöreranschluss mit Lautstärkeregler als gern "mitgekaufte" Ausstattung. Die Audioqualität ist, soweit ich das beurteilen kann, sehr gut und reicht für meine Belange vollkommen aus. Die Anschaffung lohnt sich auf jeden Fall!
  
 
Der Anschluss der Soundkarte an den Raspberry Pi gestaltete sich recht einfach. Sie wurde sofort vom System erkannt und das entsprechende Kernelmodul problemlos nachgeladen.
 
Der Anschluss der Soundkarte an den Raspberry Pi gestaltete sich recht einfach. Sie wurde sofort vom System erkannt und das entsprechende Kernelmodul problemlos nachgeladen.
Zeile 61: Zeile 64:
 
</pre>
 
</pre>
  
Damit der MPD (siehe weiter unten!) die Soundkarte zur Audio-Ausgabe verwendet, ist in der Konfigurationsdatei /etc/mpd.conf der entsprechende Abschnitt für das Audio-Ausgabegerät anzupassen:
+
Damit der MPD ([[Raspberry_Pi_als_Musikabspielgerät_an_der_Stereoanlage#Music_Player_Daemon_.28MPD.29|siehe weiter unten!]]) die Soundkarte zur Audio-Ausgabe verwendet, ist in der Konfigurationsdatei /etc/mpd.conf der entsprechende Abschnitt für das Audio-Ausgabegerät anzupassen:
 
<pre>
 
<pre>
 
...
 
...
Zeile 80: Zeile 83:
  
 
==WLAN==
 
==WLAN==
...kommt später...
+
[[Bild:Mini wlan stick.jpg|thumb|120px|Mini-WLAN-Stick]]
 +
Die abzuspielenden mp3-Dateien befinden sich auf einem Netzwerklaufwerk, Radio soll aus dem Internet kommen und der [[Raspberry_Pi_als_Musikabspielgerät_an_der_Stereoanlage#Music_Player_Daemon_.28MPD.29|Music Player Daemon]] auf dem Raspberry Pi soll (alternativ zum Touch-Display) mit den verschiedensten [[Raspberry_Pi_als_Musikabspielgerät_an_der_Stereoanlage#Eine_kleines_Benutzerinterface|Clients]] über das Netzwerk bedienbar sein. In meinem Wohnzimmer gibt es keinen Netzwerkanschluss, also muss ein WLAN-Adapter her.
 +
 
 +
In einem der grossen Online-Versandhäusern habe ich einen dieser Mini-USB-WLAN-Sticks geordert. Dabei scheine ich tatsächlich Glück gehabt zu haben, da das Linux des Raspberry etwas mit dem WLAN-Adapter anfangen kann:
 +
<pre>
 +
> lsusb
 +
 
 +
...
 +
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
 +
...
 +
</pre>
 +
<pre>
 +
> dmesg
 +
 
 +
...
 +
usb 1-1.2: new high-speed USB device number 4 using dwc_otg
 +
usb 1-1.2: New USB device found, idVendor=0bda, idProduct=8176
 +
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
 +
usb 1-1.2: Product: 802.11n WLAN Adapter
 +
usb 1-1.2: Manufacturer: Realtek
 +
usb 1-1.2: SerialNumber: 00e04c000001
 +
...
 +
usbcore: registered new interface driver rtl8192cu
 +
...
 +
</pre>
 +
<pre>
 +
> lsmod
 +
 
 +
Module                Size  Used by
 +
...
 +
8192cu                551016  0
 +
...
 +
</pre>
 +
<pre>
 +
> ifconfig
 +
 
 +
...
 +
wlan0    Link encap:Ethernet  Hardware Adresse 44:33:4c:ee:6a:29 
 +
          UP BROADCAST MULTICAST  MTU:1500  Metrik:1
 +
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 +
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 +
          Kollisionen:0 Sendewarteschlangenlänge:1000
 +
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 +
...
 +
</pre>
 +
 
 +
Ein "mutiges" Scannen (''iwlist wlan0 scan'') der WLAN-Umgebung brachte auf Anhieb mein Funk-Netzwerk zum Vorschein. Also fehlt nur noch eine entsprechende Konfiguration des WLAN-Adapters und wir sind nicht mehr auf das Netzwerkkabel angewiesen.
 +
 
 +
 
 +
Da ich in meinem Netzwerk einen DHCP-Server (auf meiner Fritzbox ;-)...) betreibe, soll auch der WLAN-Adapter am Raspberry Pi seine IP-Konfiguration von Selbigen bekommen. Dies erreicht man mit folgenden Zeilen in der Datei ''/etc/network/interfaces'':
 +
<pre>
 +
auto lo
 +
iface lo inet loopback
 +
iface eth0 inet dhcp
 +
 
 +
auto wlan0
 +
allow-hotplug wlan0
 +
iface wlan0 inet dhcp
 +
wpa-ap-scan 1
 +
wpa-scan-ssid 1
 +
wpa-ssid "wlan_name"
 +
wpa-psk "passwort"
 +
</pre>
 +
 
 +
Ein Neustart des Netzwerkes (bzw. Neustart des Systems) sollte den Raspberry Pi ab sofort drahtlos ins heimische Netzwerk integrieren...
 +
<pre>
 +
sudo service networking restart
 +
</pre>
 +
<pre>
 +
> ifconfig
 +
 
 +
...
 +
wlan0    Link encap:Ethernet  Hardware Adresse 44:33:4c:ee:6a:29 
 +
          inet Adresse:10.1.1.42  Bcast:10.1.1.255  Maske:255.255.255.0
 +
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
 +
          RX packets:13733 errors:0 dropped:64 overruns:0 frame:0
 +
          TX packets:7488 errors:0 dropped:0 overruns:0 carrier:0
 +
          Kollisionen:0 Sendewarteschlangenlänge:1000
 +
          RX bytes:9770492 (9.3 MiB)  TX bytes:981955 (958.9 KiB)
 +
...
 +
</pre>
 +
<pre>
 +
> iwconfig
 +
 
 +
wlan0    IEEE 802.11bgn  ESSID:"wlan_name"  Nickname:"<WIFI@REALTEK>"
 +
          Mode:Managed  Frequency:2.412 GHz  Access Point: BC:05:43:98:3D:14 
 +
          Bit Rate:72.2 Mb/s  Sensitivity:0/0 
 +
          Retry:off  RTS thr:off  Fragment thr:off
 +
          Power Management:off
 +
          Link Quality=100/100  Signal level=98/100  Noise level=0/100
 +
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
 +
          Tx excessive retries:0  Invalid misc:0  Missed beacon:0
 +
</pre>
 +
 
 +
 
 +
Um die Stromsparfunktion des WLAN-Adapter zu deaktivieren, legt man, falls noch nicht vorhanden, die Datei ''/etc/modprobe.d/8192cu.conf'' an und erweitert diese um folgenden Inhalt:
 +
<pre>
 +
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
 +
</pre>
  
 
=Software=
 
=Software=
 
==Music Player Daemon (MPD)==
 
==Music Player Daemon (MPD)==
Für das Abspielen meiner MP3-Dateien, welche auf einem Netwerklaufwerk liegen, kam der [http://www.musicpd.org/ "Music Player Daemon" (MPD)] zum Einsatz. Dabei handelt es sich um einen reinen [http://de.wikipedia.org/wiki/Daemon Unix-Systemdienst] ohne eigene Oberfläche, dafür aber über das Netzwerk erreichbar ist. Damit ist die Bedienoberfläche austauschbar und kann auch remote über das Netzwerk erfolgen.
+
Für das Abspielen meiner MP3-Dateien, welche auf einem Netwerklaufwerk liegen, kommt der [http://www.musicpd.org/ "Music Player Daemon" (MPD)] zum Einsatz. Dabei handelt es sich um einen reinen [http://de.wikipedia.org/wiki/Daemon Unix-Systemdienst] ohne eigene Oberfläche, der dafür aber über das Netzwerk erreichbar ist. Damit ist die Bedienoberfläche austauschbar und kann auch remote über das Netzwerk erfolgen.
  
 
MPD kann MP3-, Ogg Vorbis-, FLAC-, AAC-, Mod- oder WAV-Dateien verarbeiten. Als Ausgabemedium wird die Soundkarte des Servers verwendet. Die Musikdateien können beliebig auf dem Rechner oder im Netzwerk (via SMB, NFS, sshfs etc. ins Filesystem des Servers eingebunden) liegen. MPD verwaltet die Verweise dorthin intern in einer eigenen Datenbank. Etwas gewöhnungsbedürftig ist, dass die Audiodateien nicht direkt abgespielt werden können, sondern erst die Verweise dorthin in eine "Queue" aufgenommen werden müssen. Die Wiedergabe aus dieser "Queue" kann dann aber mit den verschiedensten Kommandos ("Start", "Stop", "Vor", "Zurück", "Zufall", "Wiederholung" etc.) komfortabel über die Netzwerkschnittstelle gesteuert werden. Weiterhin stellen die MPD-Schnittstellen einige Kommandos zur Verwaltung von vorbereiteten Abspiellisten im [http://de.wikipedia.org/wiki/M3U m3u-Format] zur Verfügung.
 
MPD kann MP3-, Ogg Vorbis-, FLAC-, AAC-, Mod- oder WAV-Dateien verarbeiten. Als Ausgabemedium wird die Soundkarte des Servers verwendet. Die Musikdateien können beliebig auf dem Rechner oder im Netzwerk (via SMB, NFS, sshfs etc. ins Filesystem des Servers eingebunden) liegen. MPD verwaltet die Verweise dorthin intern in einer eigenen Datenbank. Etwas gewöhnungsbedürftig ist, dass die Audiodateien nicht direkt abgespielt werden können, sondern erst die Verweise dorthin in eine "Queue" aufgenommen werden müssen. Die Wiedergabe aus dieser "Queue" kann dann aber mit den verschiedensten Kommandos ("Start", "Stop", "Vor", "Zurück", "Zufall", "Wiederholung" etc.) komfortabel über die Netzwerkschnittstelle gesteuert werden. Weiterhin stellen die MPD-Schnittstellen einige Kommandos zur Verwaltung von vorbereiteten Abspiellisten im [http://de.wikipedia.org/wiki/M3U m3u-Format] zur Verfügung.
  
==Eine kleines Benutzerinterface==
+
Die Konfiguration des "Music Player Daemon" findet in der Datei /etc/mpd.conf statt. Folgende Dinge sollte man dort nach seinem Gegegebenheiten anpassen:
 +
* ''music_directory'': Pfad zu den Musik-Dateien (bei mir ein Netzwerklaufwerk, welches via cifs eingebunden ist)
 +
* ''playlist_directory'': Pfad zu den vorkonfigurierten Abspiellisten
 +
* ''log_file'': Log-Datei des MPD; sollte man auskommentieren um die SD-Karte zu schonen
 +
* ''state_file'': in der angegebenen Datei wird der letzte (bekannte) Status des MPD gesichert, was eigentlich nur beim Neustart interessant ist (das Gerät soll in meinem Anwendungsfall durchlaufen...); aus oben genannten Grund sollte dieser Punkt ebenfalls auskommentiert werden
 +
* Konfiguration der Soundkarte ([[Raspberry_Pi_als_Musikabspielgerät_an_der_Stereoanlage#USB-Soundkarte|siehe oben]])
 +
 
 +
MPD bietet auch eine rudimentäre Benutzerverwaltung und einige weitere Optionen an, ...einfach mal im [http://www.musicpd.org/doc/user/ Handbuch] nachlesen, ob etwas für den Einen oder Anderen dabei ist.
 +
 
 +
==Internetradio==
 +
Wenn man sich eine oder mehrere Playlists mit URLs von Internetradio-Stationen aufbaut, kann man, eine Internetverbindung vorausgesetzt, über diesen "Umweg" auch Internetradio via MPD hören.
 +
 
 +
Beispiel einer solchen Playlist (Dateiname z.B. RBB.m3u):
 +
<pre>
 +
http://fritz.de/livemp3
 +
http://rbb.ic.llnwd.net/stream/rbb_inforadio_mp3_m_b
 +
http://rbb.ic.llnwd.net/stream/rbb_radioeins_mp3_m_b
 +
</pre>
 +
 
 +
==Podcast==
 +
Ab und zu höre ich auch gern mal einen [http://de.wikipedia.org/wiki/Podcasting Podcast]. Durch Zufall lief mir irgendwann das Programm (eigentlich mehr ein Shell-Script) [http://podget.sourceforge.net/ podget] über den Weg. Mit Hilfe dieses Kommandozeilentools kann man die, in einer Konfigurationsdatei angegebenen Podcasts recht komfortabel von den entsprechenden Internetseiten herunterladen. Genau dies habe ich auf dem hier beschriebenen Raspberry-System eingerichtet.
 +
 
 +
Das Tool ist zwar in den Paketsystemen der meisten Distributionen enthalten, aber es empfiehlt sich ein aktuelles Archiv von der [http://podget.sourceforge.net/ Homepage des Projektes] zu besorgen. Nach dem Entpacken wird mit einem ''sudo make install'' das Tool sowie die dazugehörige man-Page installiert. Für den Betrieb des Scripts ist noch das Tool ''dos2unix'' erforderlich, welches mit ''sudo apt-get install dos2unix'' installiert werden kann.
 +
 
 +
Ein initialer Aufruf von ''podget'' auf der Kommandozeile generiert die beiden Konfigurationsdateien:
 +
<pre>
 +
~/.podget/podgetrc
 +
~/.podget/serverlist
 +
</pre>
 +
 
 +
Gleichzeitig wird dabei ein beispielhafter Podcast in das angelegte Verzeichnis ''~/POD/...'' heruntergeladen und dort auch eine entsprechende m3u-Playlist erzeugt.
 +
 
 +
Beide podget-Konfigurationsdateien sind sehr gut kommentiert und sollten natürlich für unsere Zwecke angepasst werden. Wenn man in der Konfigurationsdatei ''podgetrc'' das Zielverzeichnis der Podcast-Dateien (DIR_LIBRARY=...) analog dem Audio-Verzeichnis des MPD (music_directory=...) einstellt, landen die Podcasts gleich im richtigen Verzeichnis, auf welches auch der zentrale MPD-Dienst zugreift. Die m3u-Playlist-Dateien von ''podget'' werden in der Root dieses Verzeichnis generiert. Man sollte auch diese entsprechende Konfiguration von MPD (playlist_directory=...) auf diese Gegebenheiten von ''podget'' abzustimmen.
 +
 
 +
In der podget-Konfigurationsdatei ''serverlist'' werden die zu überwachenen Podcast-Adressen eingetragen. Nach dem Herunterladen der Podcasts in das MPD-Audio-Verzeichnis ist ein Update der MPD-Datenbank erforderlich (z.B. mit Hilfe des Kommandozeilentool mpc: ''mpc update'').
 +
 
 +
Um das Herunterladen der Podcast zu automatisieren bietet es sich an, einen zyklischen Aufruf von ''podget'' als [http://wiki.ubuntuusers.de/Cron cron-Job] einzustellen. Gleiches gilt natürlich auch für die danach erforderliche Aktualisierung der MPD-Datenbank.
 +
 
 +
Wer [http://de.wikipedia.org/wiki/Magnatune Magnatune], [http://de.wikipedia.org/wiki/Jamendo Jamendo] o.ä. mag, kann mit ähnlichen Verfahrensweisen auch deren Playlisten zyklisch laden und in das MPD-Playlist-Verzeichnis kopieren....
 +
 
 +
==Benutzerinterface==
 +
===Verfügbare MPD-Cients===
 
Zur Steuerung des MPD auf dem Raspberry gibt es eine Reihe von Clients für die verschiedensten Betriebssysteme. Hier eine kleine Auswahl für Linux:
 
Zur Steuerung des MPD auf dem Raspberry gibt es eine Reihe von Clients für die verschiedensten Betriebssysteme. Hier eine kleine Auswahl für Linux:
 
* [http://www.musicpd.org/clients/mpc/ mpc]: ein kleines Kommandozeilentool zur rudimentären Steuerung
 
* [http://www.musicpd.org/clients/mpc/ mpc]: ein kleines Kommandozeilentool zur rudimentären Steuerung
Zeile 100: Zeile 242:
 
(Cool, gerade gesehen! Es gibt auch [http://www.ewetel.net/~horst.raap/ MCBetty] für [http://bettyhacks.com/wiki/index.php/Main_Page BettyTV-Fernbedienungen]! Ich habe noch so ein Ding im Schrank zu liegen, dass sieht wohl nach einem kleinen Zusatzprojekt aus...:-))
 
(Cool, gerade gesehen! Es gibt auch [http://www.ewetel.net/~horst.raap/ MCBetty] für [http://bettyhacks.com/wiki/index.php/Main_Page BettyTV-Fernbedienungen]! Ich habe noch so ein Ding im Schrank zu liegen, dass sieht wohl nach einem kleinen Zusatzprojekt aus...:-))
  
[[Bild:Rpi gui music.png|thumb|150px|Screen "Music"]]
+
===Eigene Benutzeroberfläche===
[[Bild:Rpi gui queue.png|thumb|150px|Screen "Queue"]]
+
====Allgemeines====
[[Bild:Rpi gui weather.png|thumb|150px|Screen "Weather"]]
+
Nun ist es aber so, dass man nicht immer einen Rechner, Smartphone oder Tablet im Wohnzimmer zur Verfügung hat bzw. hochfahren möchte. Aus diesem Grund kommt, zur Steuerung des MPD, das Touch-Display an meinem Raspberry ins Spiel...
Nun ist es aber so, dass man nicht immer einen Rechner, Smartphone oder Tablet im Wohnzimmer zur Verfügung hat bzw. hochfahren möchte. Aus diesem Grund kommt zur Steuerung des MPD das Touch-Display an meinem Raspberry ins Spiel. Ich habe eine minimalistische Bedienoberfläche implementiert, mit der die wichtigsten MPD-Funktionen angesteuert werden können:
+
 
* Auswahl von (vorkonfigurierten) Abspiellisten auf dem Server
+
Bei der selbstgeschriebenen Benutzeroberfläche (GUI) handelt es sich um ein kleines C-Programm, welches das [http://de.wikipedia.org/wiki/Framebuffer Framebuffer-Device] des Raspberry ansteuert. Für die Ausgabe sind einige grundlegende Grafikfunktionen (Zeichnen von Punkten, Linien, Zeichen, Buttons etc.) implementiert worden. Zur Ansteuerung der Touch-Fläche für Eingaben, wurde die [https://github.com/kergoth/tslib tslib] verwendet. Als Schnittstelle zum MPD wurde die [http://api.sarine.nl/libmpd/main.html libmpd] eingebunden.
 +
 
 +
Die Anpassungen an die jeweilige individuelle Umgebung erfolgt über eine Konfigurationsdatei. Das Einlesen der Umgebungsvariablen erfolgt über die entsprechenden Funktionen aus der [http://www.hyperrealm.com/libconfig/ libconfig].
 +
 
 +
Die Übersetzung der [[Raspberry_Pi_als_Musikabspielger%C3%A4t_an_der_Stereoanlage#Softwaredownload|C-Quellen]] kann direkt auf dem Raspberry Pi erfolgen. Dazu sind die dev-Pakete diverser Bibliotheken (u.a. tslib, libmpd, libconfig) sowie der gcc und die entsprechenden bin-utils auf dem System zu installieren.
 +
 
 +
====MPD-Client====
 +
Zur Steuerung des MPD auf dem Raspberry Pi wurden zwei Ein-/Ausgabemasken implementiert.
 +
 
 +
[[Bild:Rpi gui music.png|150px|Screen "Music"]]
 +
[[Bild:Rpi gui queue.png|150px|Screen "Queue"]]
 +
 
 +
Folgende Funktionalitäten werden zur Verfügung gestellt:
 
* "Start", "Stop", "Vor" und "Zurück" innerhalb der aktiven Abspielliste
 
* "Start", "Stop", "Vor" und "Zurück" innerhalb der aktiven Abspielliste
 
* Ein-/Ausschalten von Zufallswiedergabe und Endlosschleife
 
* Ein-/Ausschalten von Zufallswiedergabe und Endlosschleife
 
* Anzeige diverser Informationen (Künstler, Album, Titel, Abspielzeit) zum gerade abgespielten Musikstück
 
* Anzeige diverser Informationen (Künstler, Album, Titel, Abspielzeit) zum gerade abgespielten Musikstück
* zusätzlich habe ich noch eine kleine Anzeige der aktuellen Wetterdaten aus meiner Wetteraufzeichnung implementiert; die Daten liegen in einer SQLite-Datenbank auf einem Netzwerklaufwerk
+
* Ausgabe des CD-Cover-Bildes, soweit vorhanden
 +
* Auswahl von (vorkonfigurierten) Abspiellisten auf dem Server
 +
* Anstoß des Updates der Musik-Datenbank des MPD
 +
 
 +
Die sonst noch üblichen MPD-Funktionen zur Lautstärkeeinstellungen und zum Lautlos-Stellen habe ich in der Benutzeroberfläche nicht implementiert, da dies ja über meine Stereoanlage geregelt werden kann.
 +
 
 +
Die Abspiellisten (Playlists) kann man ebenfalls nicht mit meiner Bedienoberfläche zusammenstellen. Dies ist, in einer ruhigen Minute, mit einem der oben erwähnten Clients am PC, Smartphone oder Tablet erledigbar.
 +
 
 +
====Ein paar Gimmiks====
 +
Neben der eigentlichen Steuerung des MPD, wurden noch ein paar weitere Dinge in die Bedienoberfläche aufgenommen.
  
Die sonst noch üblichen Funtionen zur Lautstärkeeinstellungen und zum Lautlos-Stellen habe ich in der Benutzeroberfläche nicht implementiert, da dies ja über meine Stereoanlage geregelt wird.
+
[[Bild:Rpi gui wetter.png|150px|Screen "Weather"]]
 +
[[Bild:Rpi gui system.png|150px|Screen "System"]]
  
Die Abspiellisten (Playlists) kann man ebenfalls nicht mit meiner Bedienoberfläche zusammenstellen. Dies kann man, in einer ruhigen Minute, mit einem der oben erwähnten Clients am PC, Smartphone oder Tablet erledigen. Achso, wenn man sich eine oder mehrere Playlists mit URLs von Internetradio-Stationen aufbaut, kann man, eine Internetverbindung vorausgesetzt, über diesen "Umweg" auch Internetradio hören.
+
Folgende sind dies:
 +
* Ausgabe von aktuellen Wetterinformationen meiner [http://bralug.de/wiki/Wetterdaten_mit_Linux_aufzeichnen_und_verarbeiten kleinen Wetterstation]
 +
* Ausgabe einer Drei-Tage-Wettervorhersage (Datenquelle [http://weather.tuxnet24.de/ tuxnet24.de])
 +
* eine kleine Diashow
 +
* Ausgabe einiger Systeminformationen des Raspberry Pi (uptime, Load-Werte, Speicherverbrauch, angemeldete Benutzer, Netzwerkstatistik)
  
Bei der selbstgeschriebenen Benutzeroberfläche (GUI) handelt es sich um ein kleines C-Programm, welches das [http://de.wikipedia.org/wiki/Framebuffer Framebuffer-Device] des Raspberry ansteuert. Für die Ausgabe sind einige grundlegende Grafikfunktionen (Zeichnen von Punkten, Linien, Zeichen, Buttons etc.) implementiert worden. Zur Ansteuerung der Touch-Fläche wurde die [https://github.com/kergoth/tslib tslib] verwendet. Als Schnittstelle zum MPD wurde die [http://api.sarine.nl/libmpd/main.html libmpd] eingebunden. Die Abfrage der SQLite-Datenbank ([[Wetterdaten_mit_Linux_aufzeichnen_und_verarbeiten|Wetterdaten]]) erfolgt unter Einbeziehung der, vom SQLite-Projekt zur Verfügung gestellten, [http://www.sqlite.org/c3ref/intro.html API]. Die Übersetzung der C-Quellen kann direkt auf dem Raspberry Pi erfolgen. Dazu sind die dev-Pakete der genannten Bibliotheken sowie der gcc und die entsprechenden bin-utils auf dem System zu installieren.
+
Die Übergabe der Daten für die Wetterinformationen/-vorhersage erfolgt jeweils über eine Datei im libconfig-Format.
  
 +
====Starten der Benutzeroberfläche====
 
Der Start des GUI-Programmes kann auf verschiedenste Art und Weise erfolgen:
 
Der Start des GUI-Programmes kann auf verschiedenste Art und Weise erfolgen:
 
* wenn eine USB-Tastatur am Raspberry angeschlossen ist (was allerdings kontraproduktiv zum Gesamtkonzept wäre), ganz normal über die Kommandozeile
 
* wenn eine USB-Tastatur am Raspberry angeschlossen ist (was allerdings kontraproduktiv zum Gesamtkonzept wäre), ganz normal über die Kommandozeile
Zeile 132: Zeile 301:
 
...
 
...
 
</pre>
 
</pre>
 
 
Tipp zur Erstellung von Screenshots von der Display-Ausgabe: Nachdem ich einige Zeit damit verschwendete, mit einem Fotoapparat halbwegs taugliche Bilder von der Display-Ausgabe anzufertigen (...und mir dies nicht gelungen ist), habe ich das kleine Kommandozeilentool [http://manned.org/fbcat/bab730ad fbcat] gefunden, mit dem man den Inhalt des Framebuffers 1:1 auslesen und in einer ppm-Datei abspeichern kann.
 
  
 
=Softwaredownload=
 
=Softwaredownload=
* [http://bralug.de/wiki-common/images/c/c0/Rpi_gui.tar.gz rpi_gui (Version 0.1)]
+
* aktuelle Version: [https://github.com/boerge42/rpi_gui https://github.com/boerge42/rpi_gui]
** erste, sehr unaufgeräumte Version...
+
** Ansteuerung und Zeichnen im Framebuffer
+
** Ansteuerung Touchscreen (tslib)
+
** Steuerungs-GUI für MPD
+
** Ausgabe Wetterdaten
+
  
 
=Kontakt=
 
=Kontakt=
 
[[Benutzer:bergeruw|Uwe]]
 
[[Benutzer:bergeruw|Uwe]]

Aktuelle Version vom 27. August 2015, 23:18 Uhr


Inhaltsverzeichnis

[Bearbeiten] Was soll das hier?

Gesamtsystem...

Eigentlich wollte ich nie beim "Raspberry Pi"-Hype mitmischen. Als eingefleischter Pinguin muß ich immer innerlich grinsen, wenn die neuen "Linuxversteher" von ihren genialen Projekten berichten, aber meist nicht so richtig wissen, was sie tun...! Allerdings hatte ich mir vor einiger Zeit auch so ein Ding angeschafft, weil der Mini-Rechner für meine Wetteraufzeichnungen, nach langen Jahren klaglosen Betriebes, plötzlich rumzickte. Die aufgetretenen Probleme konnten aber gelöst werden, die Hardware arbeitet wieder stabil und nun lag der voreilig gekaufte Raspberry arbeitslos auf meinem Schreibtisch rum....

Irgendwann kam mir dann doch eine Idee zu einem sinnvollen Einsatzzweck, für die es sich lohnte etwas Gehirnschmalz zu vergeuden. Ich wollte meine, auf einer Netzwerk-Festplatte abgelegten, MP3-Dateien auch auf der Stereoanlage im Wohnzimmer komfortabel abspielen können. Diese Stereoanlage ist nicht netzwerkfähig, um Mediaserver etc. einzubinden und hat auch keinen USB- oder sonst-was-Anschluß. Es steht nur der gewohnte einfache Verstärkereingang zur Verfügung...

Nach ein wenig Recherche, Rumprobieren und etwas Softwareentwicklung entstand ein kleines "Musikabspielgerät" auf Basis eines Raspberry Pi mit einem kleinen Touch-Display zur einfachen Bedienung (WAF beachten). In der Folge soll das Ganze mal ein wenig beschrieben werden.

Hinweis: Es wird dabei vorausgesetzt, dass der Leser dieses Artikels die wichtigsten Grundkenntnisse über das Betriebssystem Linux besitzt und sich z.B. nicht wundert, warum man als Non-Root keine Schreibzugriffe auf /usr/bin hat (siehe oben ;-))!

[Bearbeiten] Hardware

[Bearbeiten] Raspberry Pi mit Touch-Display

Raspberry Pi mit Touch-Display

Hardwareseitig ist ein Raspberry Pi Dreh- und Angelpunkt des hier vorgestellten Musikabspielgerätes. Da es unendlich viele Webseiten zum Thema "Raspberry Pi" im Internet gibt, will ich nicht noch eine anfangen.... Vielleicht nur soviel: für dieses kleine Projekt setze ich ein Board vom Modelltyp B ein, was aber für das Projekt auch nicht von entscheidender Bedeutung ist.

Interessanter ist da schon das dazugehörige Touch-Display mit folgender Spezifikation:

  • TFT-Display: 2.83", 240x320 (Transmissiv)
  • Touch Controller: TI ADS7846/TSC2046
  • Hintergrundbeleuchtung dimmbar (PWM)
  • Schnittstelle: SPI (Touch Controller + Display)

Die Platine des Displays ist so gestaltet, dass sie direkt auf das Raspberry-Board gesteckt werden kann (...eigentlich ist dieser Fakt der einzige Grund dafür, unbedingt einen Raspberry Pi für dieses Projekt zu verwenden). Mit einem entsprechend angepaßten Gehäuse ergibt das Ganze ein nettes kleines ansehliches Gerät. Ich habe das Raspberry-Board, das Display und das Gehäuse im Bundle bei einem gut sortierten Elektronik-Versender eingekauft.

Ein speziell für das Touch-Display angepaßtes Linux-Image (Basis: Raspbian), welches einfach auf eine SD-Karte kopiert wird, findet man hier. Bei einem Update des Systems (apt-get upgrade) sollten deshalb diese Hinweise beachtet werden!

[Bearbeiten] USB-Soundkarte

USB-Soundkarte Behringer UAC202

Wie allseits bekannt, ist die interne Soundkarte des Raspberry Pi qualitativ nicht besonders. Weiterhin will ich das System auch an den Verstärkereingang meiner Stereoanlage anschliessen, was auch nicht unbedingt für den Klinkenbuchsen-Ausgang des Rapberry Pi spricht. Also musste eine vernünftige externe USB-Soundkarte her. Meine Wahl fiel auf die USB-Soundkarte U-Control UCA-202 der Firma Behringer. Neben den expliziet gesuchten Audio-Ein-/-Ausgängen via Cinch-Buchsen, verfügt das Teil auch über einen optischen S/PDIF Ausgang und einen Kopfhöreranschluss mit Lautstärkeregler als gern "mitgekaufte" Ausstattung. Die Audioqualität ist, soweit ich das beurteilen kann, sehr gut und reicht für meine Belange vollkommen aus. Die Anschaffung lohnt sich auf jeden Fall!

Der Anschluss der Soundkarte an den Raspberry Pi gestaltete sich recht einfach. Sie wurde sofort vom System erkannt und das entsprechende Kernelmodul problemlos nachgeladen.

> lsusb

...
Bus 001 Device 004: ID 08bb:2902 Texas Instruments Japan PCM2902 Audio Codec
...
> dmesg

...
usb 1-1.2: New USB device found, idVendor=08bb, idProduct=2902
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-1.2: Product: USB Audio CODEC 
usb 1-1.2: Manufacturer: Burr-Brown from TI              
input: Burr-Brown from TI USB Audio CODEC  as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.3/input/input0
hid-generic 0003:08BB:2902.0001: input,hidraw0: USB HID v1.00 Device [Burr-Brown from TI USB Audio CODEC ] on usb-bcm2708_usb-1.2/input3
...
> lsmod

...
snd_soc_bcm2708_i2s     5474  0 
regmap_mmio             2806  1 snd_soc_bcm2708_i2s
snd_rawmidi            21357  2 snd_usbmidi_lib,snd_seq_midi
snd_soc_core          131356  1 snd_soc_bcm2708_i2s
...

Damit der MPD (siehe weiter unten!) die Soundkarte zur Audio-Ausgabe verwendet, ist in der Konfigurationsdatei /etc/mpd.conf der entsprechende Abschnitt für das Audio-Ausgabegerät anzupassen:

...
audio_output { 
        type            "alsa" 
        name            "My ALSA Device"
        device          "hw:1,0"        # optional
        format          "44100:16:2"    # optional
        mixer_device    "default"       # optional
        mixer_control   "PCM"           # optional
        mixer_index     "0"             # optional
...

Einziges Problem, welches mir nach einiger Zeit aufgefallen ist, war ein extensives Zumüllen diverser Log-Dateien mit der Meldung "delay: estimated 0, actual 132". Abhilfe schaffte folgende Zeile in der Datei /etc/modeprobe.d/snd_usb_audio.conf:

options snd-usb-audio nrpacks=1

[Bearbeiten] WLAN

Mini-WLAN-Stick

Die abzuspielenden mp3-Dateien befinden sich auf einem Netzwerklaufwerk, Radio soll aus dem Internet kommen und der Music Player Daemon auf dem Raspberry Pi soll (alternativ zum Touch-Display) mit den verschiedensten Clients über das Netzwerk bedienbar sein. In meinem Wohnzimmer gibt es keinen Netzwerkanschluss, also muss ein WLAN-Adapter her.

In einem der grossen Online-Versandhäusern habe ich einen dieser Mini-USB-WLAN-Sticks geordert. Dabei scheine ich tatsächlich Glück gehabt zu haben, da das Linux des Raspberry etwas mit dem WLAN-Adapter anfangen kann:

> lsusb

...
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
...
> dmesg

...
usb 1-1.2: new high-speed USB device number 4 using dwc_otg
usb 1-1.2: New USB device found, idVendor=0bda, idProduct=8176
usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.2: Product: 802.11n WLAN Adapter
usb 1-1.2: Manufacturer: Realtek
usb 1-1.2: SerialNumber: 00e04c000001
...
usbcore: registered new interface driver rtl8192cu
...
> lsmod

Module                Size  Used by
...
8192cu                551016  0
...
> ifconfig

...
wlan0     Link encap:Ethernet  Hardware Adresse 44:33:4c:ee:6a:29  
          UP BROADCAST MULTICAST  MTU:1500  Metrik:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
...

Ein "mutiges" Scannen (iwlist wlan0 scan) der WLAN-Umgebung brachte auf Anhieb mein Funk-Netzwerk zum Vorschein. Also fehlt nur noch eine entsprechende Konfiguration des WLAN-Adapters und wir sind nicht mehr auf das Netzwerkkabel angewiesen.


Da ich in meinem Netzwerk einen DHCP-Server (auf meiner Fritzbox ;-)...) betreibe, soll auch der WLAN-Adapter am Raspberry Pi seine IP-Konfiguration von Selbigen bekommen. Dies erreicht man mit folgenden Zeilen in der Datei /etc/network/interfaces:

auto lo
iface lo inet loopback
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid "wlan_name"
wpa-psk "passwort"

Ein Neustart des Netzwerkes (bzw. Neustart des Systems) sollte den Raspberry Pi ab sofort drahtlos ins heimische Netzwerk integrieren...

sudo service networking restart
> ifconfig

...
wlan0     Link encap:Ethernet  Hardware Adresse 44:33:4c:ee:6a:29  
          inet Adresse:10.1.1.42  Bcast:10.1.1.255  Maske:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:13733 errors:0 dropped:64 overruns:0 frame:0
          TX packets:7488 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:9770492 (9.3 MiB)  TX bytes:981955 (958.9 KiB)
...
> iwconfig

wlan0     IEEE 802.11bgn  ESSID:"wlan_name"  Nickname:"<WIFI@REALTEK>"
          Mode:Managed  Frequency:2.412 GHz  Access Point: BC:05:43:98:3D:14   
          Bit Rate:72.2 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=100/100  Signal level=98/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0


Um die Stromsparfunktion des WLAN-Adapter zu deaktivieren, legt man, falls noch nicht vorhanden, die Datei /etc/modprobe.d/8192cu.conf an und erweitert diese um folgenden Inhalt:

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

[Bearbeiten] Software

[Bearbeiten] Music Player Daemon (MPD)

Für das Abspielen meiner MP3-Dateien, welche auf einem Netwerklaufwerk liegen, kommt der "Music Player Daemon" (MPD) zum Einsatz. Dabei handelt es sich um einen reinen Unix-Systemdienst ohne eigene Oberfläche, der dafür aber über das Netzwerk erreichbar ist. Damit ist die Bedienoberfläche austauschbar und kann auch remote über das Netzwerk erfolgen.

MPD kann MP3-, Ogg Vorbis-, FLAC-, AAC-, Mod- oder WAV-Dateien verarbeiten. Als Ausgabemedium wird die Soundkarte des Servers verwendet. Die Musikdateien können beliebig auf dem Rechner oder im Netzwerk (via SMB, NFS, sshfs etc. ins Filesystem des Servers eingebunden) liegen. MPD verwaltet die Verweise dorthin intern in einer eigenen Datenbank. Etwas gewöhnungsbedürftig ist, dass die Audiodateien nicht direkt abgespielt werden können, sondern erst die Verweise dorthin in eine "Queue" aufgenommen werden müssen. Die Wiedergabe aus dieser "Queue" kann dann aber mit den verschiedensten Kommandos ("Start", "Stop", "Vor", "Zurück", "Zufall", "Wiederholung" etc.) komfortabel über die Netzwerkschnittstelle gesteuert werden. Weiterhin stellen die MPD-Schnittstellen einige Kommandos zur Verwaltung von vorbereiteten Abspiellisten im m3u-Format zur Verfügung.

Die Konfiguration des "Music Player Daemon" findet in der Datei /etc/mpd.conf statt. Folgende Dinge sollte man dort nach seinem Gegegebenheiten anpassen:

  • music_directory: Pfad zu den Musik-Dateien (bei mir ein Netzwerklaufwerk, welches via cifs eingebunden ist)
  • playlist_directory: Pfad zu den vorkonfigurierten Abspiellisten
  • log_file: Log-Datei des MPD; sollte man auskommentieren um die SD-Karte zu schonen
  • state_file: in der angegebenen Datei wird der letzte (bekannte) Status des MPD gesichert, was eigentlich nur beim Neustart interessant ist (das Gerät soll in meinem Anwendungsfall durchlaufen...); aus oben genannten Grund sollte dieser Punkt ebenfalls auskommentiert werden
  • Konfiguration der Soundkarte (siehe oben)

MPD bietet auch eine rudimentäre Benutzerverwaltung und einige weitere Optionen an, ...einfach mal im Handbuch nachlesen, ob etwas für den Einen oder Anderen dabei ist.

[Bearbeiten] Internetradio

Wenn man sich eine oder mehrere Playlists mit URLs von Internetradio-Stationen aufbaut, kann man, eine Internetverbindung vorausgesetzt, über diesen "Umweg" auch Internetradio via MPD hören.

Beispiel einer solchen Playlist (Dateiname z.B. RBB.m3u):

http://fritz.de/livemp3
http://rbb.ic.llnwd.net/stream/rbb_inforadio_mp3_m_b
http://rbb.ic.llnwd.net/stream/rbb_radioeins_mp3_m_b

[Bearbeiten] Podcast

Ab und zu höre ich auch gern mal einen Podcast. Durch Zufall lief mir irgendwann das Programm (eigentlich mehr ein Shell-Script) podget über den Weg. Mit Hilfe dieses Kommandozeilentools kann man die, in einer Konfigurationsdatei angegebenen Podcasts recht komfortabel von den entsprechenden Internetseiten herunterladen. Genau dies habe ich auf dem hier beschriebenen Raspberry-System eingerichtet.

Das Tool ist zwar in den Paketsystemen der meisten Distributionen enthalten, aber es empfiehlt sich ein aktuelles Archiv von der Homepage des Projektes zu besorgen. Nach dem Entpacken wird mit einem sudo make install das Tool sowie die dazugehörige man-Page installiert. Für den Betrieb des Scripts ist noch das Tool dos2unix erforderlich, welches mit sudo apt-get install dos2unix installiert werden kann.

Ein initialer Aufruf von podget auf der Kommandozeile generiert die beiden Konfigurationsdateien:

~/.podget/podgetrc
~/.podget/serverlist

Gleichzeitig wird dabei ein beispielhafter Podcast in das angelegte Verzeichnis ~/POD/... heruntergeladen und dort auch eine entsprechende m3u-Playlist erzeugt.

Beide podget-Konfigurationsdateien sind sehr gut kommentiert und sollten natürlich für unsere Zwecke angepasst werden. Wenn man in der Konfigurationsdatei podgetrc das Zielverzeichnis der Podcast-Dateien (DIR_LIBRARY=...) analog dem Audio-Verzeichnis des MPD (music_directory=...) einstellt, landen die Podcasts gleich im richtigen Verzeichnis, auf welches auch der zentrale MPD-Dienst zugreift. Die m3u-Playlist-Dateien von podget werden in der Root dieses Verzeichnis generiert. Man sollte auch diese entsprechende Konfiguration von MPD (playlist_directory=...) auf diese Gegebenheiten von podget abzustimmen.

In der podget-Konfigurationsdatei serverlist werden die zu überwachenen Podcast-Adressen eingetragen. Nach dem Herunterladen der Podcasts in das MPD-Audio-Verzeichnis ist ein Update der MPD-Datenbank erforderlich (z.B. mit Hilfe des Kommandozeilentool mpc: mpc update).

Um das Herunterladen der Podcast zu automatisieren bietet es sich an, einen zyklischen Aufruf von podget als cron-Job einzustellen. Gleiches gilt natürlich auch für die danach erforderliche Aktualisierung der MPD-Datenbank.

Wer Magnatune, Jamendo o.ä. mag, kann mit ähnlichen Verfahrensweisen auch deren Playlisten zyklisch laden und in das MPD-Playlist-Verzeichnis kopieren....

[Bearbeiten] Benutzerinterface

[Bearbeiten] Verfügbare MPD-Cients

Zur Steuerung des MPD auf dem Raspberry gibt es eine Reihe von Clients für die verschiedensten Betriebssysteme. Hier eine kleine Auswahl für Linux:

  • mpc: ein kleines Kommandozeilentool zur rudimentären Steuerung
  • ncmpc, ncmpcpp: Curses-basierte MPD-Clients für die Textconsole
  • gmpc: grafischer MPD-Client auf Basis GTK2
  • ario: grafischer MPD-Client auf Basis GTK+
  • Xfmpc: grafischer MPD-Client speziell angepasst für Xfce-Desktop
  • Sonata: ein, in Python geschriebener, grafischer MPD-Client auf Basis GTK+

Weitere MPD-Clients für Linux, Android, MacOS, Windows etc. findet man z.B. in dieser Übersicht.

(Cool, gerade gesehen! Es gibt auch MCBetty für BettyTV-Fernbedienungen! Ich habe noch so ein Ding im Schrank zu liegen, dass sieht wohl nach einem kleinen Zusatzprojekt aus...:-))

[Bearbeiten] Eigene Benutzeroberfläche

[Bearbeiten] Allgemeines

Nun ist es aber so, dass man nicht immer einen Rechner, Smartphone oder Tablet im Wohnzimmer zur Verfügung hat bzw. hochfahren möchte. Aus diesem Grund kommt, zur Steuerung des MPD, das Touch-Display an meinem Raspberry ins Spiel...

Bei der selbstgeschriebenen Benutzeroberfläche (GUI) handelt es sich um ein kleines C-Programm, welches das Framebuffer-Device des Raspberry ansteuert. Für die Ausgabe sind einige grundlegende Grafikfunktionen (Zeichnen von Punkten, Linien, Zeichen, Buttons etc.) implementiert worden. Zur Ansteuerung der Touch-Fläche für Eingaben, wurde die tslib verwendet. Als Schnittstelle zum MPD wurde die libmpd eingebunden.

Die Anpassungen an die jeweilige individuelle Umgebung erfolgt über eine Konfigurationsdatei. Das Einlesen der Umgebungsvariablen erfolgt über die entsprechenden Funktionen aus der libconfig.

Die Übersetzung der C-Quellen kann direkt auf dem Raspberry Pi erfolgen. Dazu sind die dev-Pakete diverser Bibliotheken (u.a. tslib, libmpd, libconfig) sowie der gcc und die entsprechenden bin-utils auf dem System zu installieren.

[Bearbeiten] MPD-Client

Zur Steuerung des MPD auf dem Raspberry Pi wurden zwei Ein-/Ausgabemasken implementiert.

Screen "Music" Screen "Queue"

Folgende Funktionalitäten werden zur Verfügung gestellt:

  • "Start", "Stop", "Vor" und "Zurück" innerhalb der aktiven Abspielliste
  • Ein-/Ausschalten von Zufallswiedergabe und Endlosschleife
  • Anzeige diverser Informationen (Künstler, Album, Titel, Abspielzeit) zum gerade abgespielten Musikstück
  • Ausgabe des CD-Cover-Bildes, soweit vorhanden
  • Auswahl von (vorkonfigurierten) Abspiellisten auf dem Server
  • Anstoß des Updates der Musik-Datenbank des MPD

Die sonst noch üblichen MPD-Funktionen zur Lautstärkeeinstellungen und zum Lautlos-Stellen habe ich in der Benutzeroberfläche nicht implementiert, da dies ja über meine Stereoanlage geregelt werden kann.

Die Abspiellisten (Playlists) kann man ebenfalls nicht mit meiner Bedienoberfläche zusammenstellen. Dies ist, in einer ruhigen Minute, mit einem der oben erwähnten Clients am PC, Smartphone oder Tablet erledigbar.

[Bearbeiten] Ein paar Gimmiks

Neben der eigentlichen Steuerung des MPD, wurden noch ein paar weitere Dinge in die Bedienoberfläche aufgenommen.

Screen "Weather" Screen "System"

Folgende sind dies:

  • Ausgabe von aktuellen Wetterinformationen meiner kleinen Wetterstation
  • Ausgabe einer Drei-Tage-Wettervorhersage (Datenquelle tuxnet24.de)
  • eine kleine Diashow
  • Ausgabe einiger Systeminformationen des Raspberry Pi (uptime, Load-Werte, Speicherverbrauch, angemeldete Benutzer, Netzwerkstatistik)

Die Übergabe der Daten für die Wetterinformationen/-vorhersage erfolgt jeweils über eine Datei im libconfig-Format.

[Bearbeiten] Starten der Benutzeroberfläche

Der Start des GUI-Programmes kann auf verschiedenste Art und Weise erfolgen:

  • wenn eine USB-Tastatur am Raspberry angeschlossen ist (was allerdings kontraproduktiv zum Gesamtkonzept wäre), ganz normal über die Kommandozeile
  • remote z.B. über eine ssh-Verbindung; Stichwort screen, damit das Programm auch weiterläuft, wenn die Remote-Verbindung beendet wird
  • automatischer Start des Programmes ohne Benutzeranmeldung über eine modifizierte /etc/inittab; Stichwort rungetty

Letzteres sieht dann ungefähr so in der /etc/inittab aus (das Programm rpi_gui in /usr/bin):

...
1:2345:respawn:/sbin/rungetty tty1 -u pi sudo rpi_gui
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
...

[Bearbeiten] Softwaredownload

[Bearbeiten] Kontakt

Uwe

'Persönliche Werkzeuge