29.March 2024    
   homeProjekteRaspberry PiRaspberry-Internetradio

 

Hobby 234x60
reichelt elektronik – Elektronik und PC-Technik
Seite zuletzt geändert: 28.11.2012 08:31

Internetradio mit dem Raspberry - mit LCD-Display und Fernbedienung

Übersicht

Nachdem die terrestrische Radioversorgung bei mir miserabel ist (sowohl bei analoger als auch digitaler Technik), ich keinen separaten Satellitenempfänger habe und mein Fernseh-Satellitenempfänger einfach zu lange zum Booten braucht, habe ich mit dem Raspberry einen kleinen Empfänger gebaut, der mich übers Internet mit den favorisierten Sendern versorgt.

Das Projekt ist noch in der Entwicklung, funktioniert bereits, ist aber noch nicht in einem Gehäuse eingebaut. Die Beschreibung wird stückweise hier eingestellt.

 

Anforderungen

Auf dem System sind folgende Software-Bestandteile erforderlich:

An Hardware ist nicht viel erforderlich:

  • ein Raspberry Pi
  • für die Fernbedienung und für das LCD-Display einige Elektronikteile
  • ein Internet-Anschluss, den der Pi erreichen kann (also per LAN oder WLAN-Stick)

Und zu guter Letzt natürlich das kleine Paket für die Aktivierung des Radios:

raspiradio-0.0.4.tgz

ältere Versionen:

raspiradio-0.0.3.tgz

raspiradio-0.0.2.tgz

raspiradio-0.0.1.tgz

Hardware-Außenbeschaltung

Die Verbindung vom Raspberry Pi zum Display erfolgt der Einfachheit halber mit den Pins, die auch vom Adafruit-Projekt benutzt werden. Auf diese Weise muss dort in der Konfiguration nichts geändert werden.

Pin 24 des Raspberry (GPIO 8) wird als Eingang für die IR-Fernbedienung benutzt. Hier ist auch jeder beliebige andere Anschluss benutzbar, dann muss allerdings das lirc-Modul entsprechend anders konfiguriert werden als unten beschrieben.

Ich habe bei mir als IR-Empfänger einen TSOP1738 im Einsatz, da ich von denen noch einige herumliegen hatte. Dieser Empfänger läuft nur mit einer Betriebsspannung von 5V. Da der Raspberry an seinen Ports nur Spannungen bis zur internen Betriebsspannung von 3,3V verträgt, kann der Empfängerausgang nicht direkt an den Eingang des Raspberry angeschlossen werden. Daher wird über den Widerstandsteiler R3/R4 die Ausgangsspannung auf 2/3 des Empfänger-Werts geteilt.

Die restliche Außenbeschaltung entspricht der Standardbeschaltung des TSOP1738 nach Herstellerangaben, so wird sie auch bei den einfachen Empfängern für LIRC zum Anschluss an den seriellen Port des PCs benutzt. Da wir direkt 5V zum Betrieb des TSOP1738 zur Verfügung haben, brauchen wir auch nicht, wie bei den PC-Schaltungen, einen 78L05.

Der Nachfolger des TSOP1738, der TSOP31238, arbeitet auch mit Spannungen unter 5V, so dass er statt an 5V auch an den 3,3V des Raspberry betrieben werden könnte. Hierbei entfällt dann der Teiler R3/R4, der Ausgang des IR-Empfängers kann direkt an den Raspberry angeschlossen werden und die Versorgungsspannung wird von Pin 1 des GPIO-Connectors statt von Pin 2 entnommen. Das habe ich selber allerdings nicht getestet, aber der Entwickler des lirc-Kernel-Moduls für den Raspberry hat das so im Einsatz.

Die Schaltung kann man auf einer kleinen Platine ausführen, dafür reicht eigentlich auch eine kleine Experimentierplatine, bei der man die Verdrahtung direkt durchführt. Das ist Geschmackssache. Viele Bauelemente gilt es nicht zu verarbeiten. Man kann auch auf die Steckverbinder verzichten und die externe Beschaltung jeweils direkt mit den Pins des Raspberry verbinden.

Installation des lirc-Kernelmoduls

Zunächst benötigen wir den Kernel-Source, diesen erhalten wir am besten mit dem Verfahren, wie es in http://elinux.org/RPi_Kernel_Compilation beschrieben ist. Das ist nicht nur deshalb empfehlenswert, weil man damit den neuesten Kernel bekommt, sondern auch deshalb, weil in diesem bereits der Patch für das Lirc-Modul eingearbeitet wurde. Man muss sich diesen Patch also NICHT separat von der Seite des Entwicklers herunterladen. Der Kernel-Source reicht!

Wir führen also nach derzeitigem Stand aus, so wie auf der o.g. Seite beschrieben:

sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y install git gcc make tmux
cd /opt
sudo mkdir raspberrypi
cd raspberrypi
sudo git clone --depth 1 git://github.com/raspberrypi/linux.git
cd linux
sudo zcat /proc/config.gz > .config
sudo make menuconfig

(für "sudo make menuconfig" benötigen wir auch noch das Modul ncurses-dev mit seinen Abhängigkeiten, müssen also ggf. vorher noch ein

sudo apt-get install ncurses-dev

durchführen). In der Menüconfiguration prüfen wir erst mal, ob allgemein die Fernbedienungstreiber aktiviert sind. Unter "Device Drivers" finden wir da "Multimedia Support". Darin geht es weiter mit "Remote Controller adapters", dort sollten die verschiedenen Optionen mit "M" aktiviert sein. Ist das OK, dann gehen wir wieder zurück in die Hauptebene.Die relevanten Einträge für das lirc-Modul finden wir unter "Device Drivers" - "Staging Drivers" - "Media Staging Drivers" (mit Leertaste aktivieren) - "Linux Infrared Remote Control IR receiver/transmitter drivers" (muss auch erst aktiviert werden), dort sollte dann bei "Homebrew GPIO Port Receiver/Transmitter for the RaspberryPi" nach dem Drücken der Leertaste ein "M" stehen. Wenn das alles passt, dann alles jeweils mit "Exit" verlassen und zum Schluss die Frage "Do you wish to save your new configuration ?" mit "yes" bestätigen.
Dann geht es weiter mit

sudo tmux new -s make
sudo nice make; nice make modules
[Ctrl]+[B],[D] ##############… 5 to 11 hours later…
sudo tmux a -t m
[Ctrl]+[D]
sudo cp arch/arm/boot/Image /boot/kernel.img
sudo make ARCH=arm modules_install INSTALL_MOD_PATH=/

Damit haben wir den neuen Kernel und die dazugehörigen Module bereits installiert und das LIRC-Modul für den Raspberry sollte uns zur Verfügung stehen.

Fehlt noch der letzte Schritt, um den neuen Kernel mit seinen Modulen aktiv zu haben:

sudo shutdown -r now

(von dem Entfernen des Source-Verzeichnisses wie in der Anleitung auf o.g. Seite halte ich jetzt persönlich nicht so viel, da es ja vielleicht sein könnte, dass man noch andere Sachen ausprobieren oder testen will - und dann sind die Sources schon wieder weg und man muss sie sich neu holen.

LIRC-Konfiguration

Nachdem die lirc-Module erstellt wurden, muss noch dem Modul, welches die Kommunikation mit dem IR-Receiver übernimmt (lirc_rpi) noch die Konfiguration des Systems bekannt gemacht werden. Das erfolgt über Kommandozeilenparameter und kann daher am besten mit einer .conf-Datei im Verzeichnis /etc/modprobe.d erfolgen. Ich habe mir dafür dort eine Datei raspi-lirc_rpi.conf erstellt, die diesen Inhalt hat:

# Options for lirc_rpi, see aron.ws/projects/lirc_rpi/
options lirc_rpi gpio_in_pin=8 gpio_out_pin=7

Wenn die Parameter korrekt sind, abspeichern (sonst vorher korrigieren) und probieren, ob sich die Module laden lassen. Da die Abhängigkeiten bekannt sind, reicht hier ein

sudo modprobe lirc_rpi

In der Hoffnung, dass jetzt hier bzw. im syslog keine Fehler erscheinen, sollte uns ein "lsmod" unter anderem diese Zeilen ausgeben:

root@radioraspi:/etc/lirc# lsmod
Module                  Size  Used by
lirc_rpi                6948  0
lirc_dev               10076  1 lirc_rpi

Im syslog müssten wir dann diese Zeilen sehen:

Nov 27 09:36:44 radioraspi kernel: [ 2661.409289] lirc_dev: IR Remote Control driver registered, major 251
Nov 27 09:36:44 radioraspi kernel: [ 2661.443542] lirc_rpi: module is from the staging directory, the quality is unknown, you have been warned.
Nov 27 09:36:44 radioraspi kernel: [ 2661.450323] lirc_rpi lirc_rpi.0: lirc_dev: driver lirc_rpi registered at minor = 0
Nov 27 09:36:44 radioraspi kernel: [ 2661.450350] lirc_rpi: driver registered!
Nov 27 09:36:45 radioraspi kernel: [ 2662.404256] lirc_rpi: auto-detected active low receiver on GPIO pin 8

Das Anlernen der Fernbedienung (sofern wir nicht eine haben, für die bereits alle Daten in Form einer .conf-Datei vorliegen), erfolgt über

sudo irrecord -d /dev/lirc0 /etc/lirc/lircd.conf

Wir müssen derzeit folgende Keys anlernen:

  • KEY_POWER
  • KEY_0
  • KEY_1
  • KEY_2
  • KEY_3
  • KEY_4
  • KEY_5
  • KEY_6
  • KEY_7
  • KEY_8
  • KEY_9
  • KEY_UP
  • KEY_DOWN
  • KEY_VOLUMEUP
  • KEY_VOLUMEDOWN
  • KEY_MUTE

Jetzt noch die Datei /etc/lirc/hardware.conf anpassen. Hier finden wir die Zeilen mit den Parameternamen "DRIVER", "DEVICE", "MODULES". Hier gehören folgende Werte hinein (der Rest der Datei kann unverändert bleiben):

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"

Ist das erledigt, sollte der lirc-Daemon gestartet werden können. Ein

sudo /etc/init.d/lirc start

sollte uns damit etwa diese Ausschrift bringen:

root@radioraspi:/etc/lirc# /etc/init.d/lirc start
[ ok ] Loading LIRC modules:.
[ ok ] Starting remote control daemon(s) : LIRC :.

 

Software-Installation

Für die Installation der erforderlichen Pakete führen wir dies aus:

sudo apt-get install lirc

und (je nachdem, für welches mpg-Ausgabeprogramm wir uns entscheiden):

sudo apt-get install mplayer

oder

sudo apt-get install mpg123

Für icecream nehmen wir NICHT das fertige Paket (denn z.B. bei einem dist-upgrade könnte unsere gepatchte Version überschrieben werden), sondern den Source. Also tragen wir in die /etc/apt/sources.list folgende zusätzliche Zeile ein:

deb-src mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

Anschließend aktualisieren wir die apt-Liste und holen uns den icecream-Source:

sudo apt-get update
cd /usr/src
sudo apt-get source icecream

Dabei entsteht das Verzeichnis /usr/src/icecream-1.3, in welches wir hineinwechseln und den Anzeige-Patch anwenden ("pfad" ersetzen durch den Pfad, in dem sich die Patchdatei gerade befindet):

cd /usr/src/icecream-1.3
sudo patch < /usr/src/icecream-lcd.patch
sudo make install

Dann brauchen wir noch die AdaFruit-Bibliotheken, um das LCD-Display ansteuern zu können. Das erledigen wir mit

cd /usr/src
git clone github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD
sudo patch < /usr/src/Adafruit_CharLCD-rev2.patch
cp Adafruit_CharLCD.py /usr/local/bin

Hinweis: Hier wird mit der Datei "Adafruit_CharLCD-rev2.patch" gepatcht! Wie der Name schon sagt, handelt es sich hier um die Patchdatei für die Rev2 des Raspberry-Modells B! Die Adafruit-Bibliothek benutzt im Original den GPIO 21 vom Raspberry. Bei der Rev2 des Raspberry ist der entsprechende Pin aber nicht mehr GPIO 21, sondern GPIO 27. Dementsprechend muss mit der Datei Adafruit_CharLCD-rev2.patch gepatcht werden, wenn man eine Rev2 hat, aber mit der Datei Adafruit_CharLCD-rev1.patch, wenn man noch eine Rev1 hat.

Der Rest der Installation beschränkt sich auf das Installieren des Pakets und das Einstellen der Konfiguration. Das Paket enthält derzeit noch keinen Installer, daher einfach entpacken und die im Paket enthaltenen Dateien dorthin kopieren, wo sie hingehören - die Pfade sind alle mit im Paket passend angelegt.

Nach dem Kopieren der Dateien noch ein

sudo insserv raspiradio

ausführen, damit die Programme beim Systemstart ausgeführt werden.

Konfiguriert werden muss noch die Senderliste. Diese ist in der Datei /etc/raspiradio/raspiradio.lst enthalten. Es handelt sich um eine ganz simple Textdatei, die in jeder Zeile die URL für den Stream einer Radiostation enthält. Dementsprechend werden auch die Sendernummern verteilt: der erste Eintrag in der Liste ist die Nummer 1, der zweite die Nummer 2, der dritte - kommt jemand drauf?

Fehlt noch das Festlegen des Ausgabe-Interfaces. Der Treiber für das Sound-Interface (snd_bcm2835) an sich wird normalerweise bei jeder aktuellen Distri-Version gleich mit aktiviert. Ebenso sind die alsa-utils bereits mit installiert. Damit können wir mit einer der folgenden Eingabezeilen festlegen, wohin unser Sound gehen soll:

sudo amixer cset numid=3 0    # auto
sudo amixer cset numid=3 1    # Klinkenstecker
sudo amixer cset numid=3 2    # HDMI

Das kann man auch life eingeben.

Damit ist jetzt eigentlich fast alles vorbereitet, um alles in Betrieb zu nehmen. Sofern wir den mplayer als Ausgabeprogramm nehmen, brauchen wir nichts weiter umzukonfigurieren. Bei Benutzung von mpg123 muss die Datei /usr/local/bin/runradio.sh noch angepasst werden, dort wird die Zeile für den Parameter MPEGPLAYER geändert in:

MPEGPLAYER="/usr/bin/mpg123"

So - und jetzt noch aus der Datei /etc/default/raspiradio die Zeile "runradio=yes" aktivieren,

sudo shutdown -r now

ausführen und hoffen, dass alles richtig startet...

 

Enrico, 17-05-13 21:48:
Hallo, das Internetradio mit dem Raspberry + LCD-Display und mit Fernbedienung finde ich ist ein cooles Projekt danke für die Ver­öf­fent­li­chung.
Könnte ich evt. den Schaltplan mit etwas bessere Auflösung bekommen ? ich kann bei mir kaum etwas lesen .
Danke mfg Enrico Hinz
anon, 08-06-13 19:20:
LC Display nicht LCD Display :P
Niklas, 11-09-13 21:33:
Beim Ausführen von:
sudo usr/local/bin# insserv raspiradio

Bekomme ich den Fehler:
insserv: script raspiradio is not an executable regular file, skipped!

Die Fernbedienung funktioniert nicht, ist aber richtig programmiert und wenn ich das Radio manuell starte, funktioniert es. Ein Display habe ich nicht angeschlossen, aber alle Programme dafür schon installiert (Das Display wird noch nachgerüstet).
Manfred, 05-01-14 20:42:
Hallo,
ich habe es versucht nach Anleitung zu installieren ---> geht nicht, z.Teil Fehlermeldungen bei der Installation.
Bitte die aktuellen Schritte mitteilen ( ohne Fernbedienung, aber mit Adafruit 16x2 LCD), Welches Images als Grundlage?
Gibt es vielleicht ein komplettes Images?

Gruß Manfred
Sven Krawietz, 28-03-14 17:31:
Hi, ich habe alles nach der Installation gemacht, leider gibt es ein problem und zwar kann ich den Befel sudo zcat /proc/config.gz > .config nicht absetzten, bekomme eine fehlermeldung das ich nicht die berechtigung habe. Unter root ist es möglich aber ich weis nicht ob sich was geändert hatte.
2. wenn ich zu dem Punkt Menüconfiguration komme, habe ich alles leer, also multimedia support ist leer, staging drivers. Gehe davon aus das mein 1. fehler die Ursache ist.

Die weiteren schritte sind kaum möglich:
sudo tmux new -s make
sudo nice make; nice make modules
[Ctrl]+[B],[D] ##############… 5 to 11 hours later…
sudo tmux a -t m
[Ctrl]+[D]
sudo cp arch/arm/boot/Image /boot/kernel.img
sudo make ARCH=arm modules_install INSTALL_MOD_PATH=/

ab da an verstehe ich nicht was ich machen soll, einfach abtippen ist auch erfolgslos.
Bitte mal um antwort.
Kommentar hinzufügen

* - Pflichtfeld

*



*
Copyright © 2008-2017