Nachdem ich etwas mit dem Raspberry Pi, Pygame und einem kleinen Touch-Display rumgespielt habe (siehe Beitrag über GPIOs), wollte ich damit auch mal was Cooles machen, nämlich ein Internetradio. Beim Design des Players, habe ich so bisschen an den Film „Tron“ gedacht. Mehrere Designs wurden verworfen, bis ich mit einem Entwurf zufrieden war. Eine Anleitung hierfür wurde dieses Mal auf https://github.com/5Volt-Junkie „out-ge-sourced“ 😀
Ein kleines Video…
…des Players im Einsatz, mit Streams von SOMA.FM 😉
Player
Die Streams werden mit Hilfe von MPD (Music Player Daemon) und MPC (Music Player Client).
Player Skin
Die Skins wurden in Inkscape gezeichnet und dann als PNG in mehreren Farben exportiert.
Ablauf im Hintergrund
Durch den Skin wird die Anzeige (320x240px) in mehrere Bereiche aufgeteilt. Dies geschieht nicht automatisch, sondern man muss wissen, bei welchen Koordinaten sich die Buttons befinden. Beim Berühren des Displays wird geprüft, bei welchen Koordinaten berührt wurde. Wenn die Koordinaten im Bereich des ersten Buttons liegen (Play), dann wird von dem Python-Script ein Befehl in der Shell ausgeführt – mpc play . War soweit auch nicht besonders kompliziert. Wo es etwas schwieriger wurde, den aktuellen Titel und andere Angaben auszulesen. Da bekommt man manchmal mehrere Zeilen Ausgabe im Terminal und muss das Wichtigste rausfiltern. Zum Glück gibt es so viel Open Source mit Python, sodass ich mir was abgucken konnte.
Screensaver
Um das Einbrennen des Displays zu vermeiden, habe ich eine kleine Funktion für einen einfachen Bildschirmschoner geschrieben. Jede 60.000 Millisekunden (1min) wird ein Event ausgelöst und eine Variable wird um 1 inkrementiert. Wenn die Variable den Wert 5 erreicht hat, geht der Screensaver an. Dabei wird die Anzeige weiß gefüllt und die Hintergrundbeleuchtung abgeschaltet. Bei jedem Berühren des Bildschirmes, wird diese Variable zurückgesetzt. Damit man das „blinde Bedienen“ im Screensaver Modus vermeidet, geht beim ersten Berühren des Bildschirms erst die Hintergrundbeleuchtung an und statt der weißen Anzeige, wird wieder das Bedienpanel eingeblendet.
Features
Im Moment kann der Player, bzw. die Oberfläche noch nicht viel aber das Wichtigste. Hier sind einige Funktionen aufgelistet:
Buttons
- Play
- Pause
- Lautstärke +
- Lautstärke –
- Nächster Sender
- Vorheriger Sender
- Stumm
- zum nächsten Menü springen
- Raspberry ausschalten
- Raspberry neustarten
- Stream im Hintergrund laufen lassen
- Player beenden
- Farbe wechseln
Anzeige
- Name des Senders
- Aktuellen Titel/Künstler anzeigen
- Lautstärke
- Datum und Uhrzeit
- IP Adresse
- CPU Temperatur
Sonstige Funktionen
- Screensaver
Update 30. März 2015: im deutschen Raspberry-Pi Forum, ist zu dem Projekt eine kleine Diskussion entstanden, wo es einige hübsche und interessante Modifikationen gibt 🙂
Falls also jemand das Radio im Tron-Style nachbauen oder modifizieren oder erweitern möchte, wäre es toll, wenn ihr eure Ergebnisse (ab Besten inkl. Quellcode oder Verweis darauf) dort präsentieren würdet 😉
Update 10. Juli 2015
Weitere Weiterentwicklungen des Projektes im deutschen Raspberry-Forum 🙂
- Tron-Radio jetzt Auflösungsunabhängig: Newtron-Radio
- Raspbian Tron-Radio – lema67 Mod
- RPi-Tron-Radio. Eine weitere Abkopplung
Hallo!
Super Projekt, wollte es auch sofort nachbauen hätte aber noch eine Frage. Weißt du ob das Betriebssystem und das Pythonprogramm auch auf der älteren Version vom RPI läuft?
Gruß
Hi,
ja, das Läuft auch auf dem älteren RPi. Das von mir verwendete Display würde aber mechanisch nicht so gut passen, da die Bauform für den A+/B+ ausgelegt wurde.
Für die älteren A und B Modelle passt dann dieses hier http://www.watterott.com/de/RPi-Display
Danke für die schnelle Info, Display ist bestellt. Ich hoffe das ich auch genauso hinbekomme.
Gruß
Hallo!
Ich wollte nur mal kurz Rückeldung geben. Funktioniert soweit sehr gut. Auch das Hinzufügen von verschiedenen Sendern stellt kein Problem da. Ich versuche jetzt noch verschiedene Wlan Sticks durch, hab aber erst einen zum laufen gebracht.
Das Abspielen von MP3’s von einem USB Stick funktioniert generell auch mit dem MPD wenn sie in der Playlist sind. Meinst du es wäre möglich zwischen mehreren Playlists hin und herzuschalten, z.b. eine mit Radiosendern und die andere mit MP3’s?
Gruß
Scherheinz
Hallo!
Kurze Rückmeldung von mir. Funktioniert alles soweit, auch das hinzufügen von anderen Sendern ist kein Problem. Momentan versuche ich noch verschiedene Wlan Sticks durch, hab aber erst einen zum Laufen gebracht. In einem Forum hab ich noch gelesen das der mpc auch MP3’s von einem Stick abspielen kann, das wäre doch noch eine tolle Erweiterung, was meinst du?
Gruß
Hi,
danke für die Rückmeldung.
Die Kommentare werden von mir manuell freigeschaltet, daher kann das manchmal dauern, bis ich dazu komme, mich hier einzuloggen.
Die Idee mit den MP3 ist gut. Wenn das erweitert bekommst, würde ich mich über das Stückchen Code sehr freuen 😉
Ich selber habe mich damit noch nicht auseinander gesetzt.
…. also irgendwie werden die Kommentare nicht immer angezeigt. erst garkeiner sondern „Fehler CAPTCHA“ und nach 4 Versuchen werden 2 Antworten angezeigt…..
Ich bin leider nicht vom Fach, versuche aber mir ein wenig anzueignen. Schau dir mal in folgendem Link den Beitrag#12 an:
http://www.forum-raspberrypi.de/Thread-tutorial-music-player-daemon-mpd-und-mpc-auf-dem-raspberry-pi
Gruß
Hast du das mal ausprobiert?
Ich bin mir sicher, dass das funktioniert, kann aber nicht aus dem Kopf ein Code oder Befehle liefern. Muss mich da auch erst einlesen, da ich selber nur 1,5 Projekte mit Python und Raspberry umgesetzt habe.
Vielleicht hat es jemand hier bereits umgesetzt http://www.forum-raspberrypi.de/Thread-rpi-tron-radio-raspberry-pi-webradio-im-tronstyle
Nein noch nicht, wollte es erst an meinem Linux Mint testen bin aber noch nicht dazu gekommen. Mal sehen ob ich nachher noch dazu komme.
Hm, also ich bekomme MP3’s nicht zum Laufen. Ich bekomme sie nicht in die Playlist geladen.
Ich werde es mal die Tage versuchen.
Bis jetzt bin ich nur dazu gekommen, das Image runter zu laden und auf die SD-Karte zu flashen.
Hast du dir schon die man-Page von mpc mal angeschaut?
http://linux.die.net/man/1/mpc
Läuft jetzt nach mehreren Versuchen aber noch nicht von USB. Was halt sehr große Probleme macht sind die Leerstellen in den MP3 Dateinamen.
Gruß
Super! Die Oberfläche gefällt optisch sehr gut und ist prima zu bedienen. Praktisch fände ich, wenn man zwischen mehreren Playlisten vorwärts und rückwärts springen könnte. Etwas irritiert hat mich der screensaver. Wäre es nicht sinnvoller und stromsparender das Display abzudunken statt weiß zu schalten?
Danke, Tino!
Es wäre bestimmt praktisch für die, die es brauchen. Ich bin mit den wenigen Sendern von Soma FM zufrieden. Es gibt noch viele andere Sachen, die bei dem Projekt interessant wären, wie z.B. wie das Wetter wird, ob man neue Emails hat, wie die Raumtemperatur und die Luftfeuchtigkeit sind… 🙂 Jeder ist willkommen den Code um die Funktionen zu erweitern und am Besten auch veröffentlichen.
Ob das Display weiß oder schwarz gefüllt wird, hat keine Auswirkungen auf die Stromaufnahme.
Alles klar, werd ich mal ein bisschen mit python rumprobieren, der Raspberry ist schließlich ne Lern-, Bastel- und Frickelmaschine. Screensaver habe ich schon mal in schwarz geändert, auch wenns keinen strom spart 😉 , alles andere wird wahrscheinlich komplizierter,
Ja, leg einfach mal los! Das Radio war auch mein erstes Python-Projekt, an den kalten Abenden in meinem Weihnachtsurlaub 😉
Da habe ich eigentlich mehr irgendwelche Manuals etc. gelesen, als an dem Code gearbeitet 🙂
Die GPIO-Steuerung war so ein Zwischenschritt https://5volt-junkie.net/gpios-steuern-mit-raspberry-pi-und-touch-display/
Hallo,
ich habe probleme das tron-radio zum laufen zu bringen.
Nach dem reboot erscheint immer folgende Fehlermeldung:
tron-radio.py:16: RunTimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
Traceback (most recent call last)
File „tron-radio.py“, line 38, in
screen = pygame.display.set_mode(size)
pygame.error: Unable to open mouse
Und das Radio Frontend startet nicht.
Über eine Idee was hier schieflaufen könnte würde ich mich sehr freuen!
Hallo Andi,
welche Hardware verwendest du?
Raspberry Pi 2 Model B mit dem RPi-Display – 2,8″ von waterott https://github.com/watterott/RPi-Display
Die Fehlermeldung war nicht komplett.
Hier die komplette Fehlermeldung:
tron-radio.py:16: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(18, GPIO.OUT)
Traceback (most recent call last):
File „tron-radio.py“, line 38, in
screen = pygame.display.set_mode(size)
pygame.error: Unable to open mouse
Hi,
bin mir nicht sicher, ob es vielleicht was mit dem 2. Modell des RPi zu tun hat. Wie hast du den FBTFT installiert? Hast du den genauen Link zur Anleitung?
Hast du noch andere Python-Skripte laufen?
Ich habe das raspbian-image (8-bit) von watterott inklusive FBTFT verwendet.
Ich kann hier leider gerade nichts einfügen (vom Smartphone aus). Den link zum 8-bit-image von watterott (vom 16.03.2015) findet man wenn man deinem Installation guide folgt.
Das Display funktionierte nach dem ersten boot mit dem image.
Wenn ich X starte (startx) dann bekomme ich die Oberfläche einwandfrei angezeigt und auch der Touch funktioniert einwandfrei.
Kann das Problem im Moment nicht reproduzieren, habe aber was auf GitHub gefunden.
https://github.com/notro/fbtft/issues/105
Versuch mal mit:
unset SDL_MOUSEDRV
unset SDL_MOUSEDEV
Nun läuft es:
Ich habe /home/pi/rpi-display.sh ausgeführt
Dadurch wurden diverse Dinge nachinstalliert. (?)
Nach dem anschließenden Reboot des pi konnte ich nun /home/pi/tron-radio/launcher.sh erfolgreich starten.
Allerdings funktioniert leider der Touch nicht.
Nach dem start kommt wieder die Fehlermeldung:
sudo /home/pi/tron-radio/launcher.sh
tron-radio.py:16: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(18, GPIO.OUT)
Aber der erste Radiosender aus der mpd-Playlist läuft schon einmal, und ich sehe die aktuellen Infos auf dem Display 🙂
Ich muss mal mit dem neuen Image mal etwas rumspielen 🙂
GPIO 18 ist für die Hintergrundbeleuchtung. Vermutlich meckert es, weil das im neuen Image schon vorreserviert ist, wird aber im Python-Skript nochmal als Output gesetzt. Ist erstmal einfach nur eine Warnung.
Ich versuche es mal die Tage an ein RPi 2 + neues Image ran zu kommen und probiere dann bisschen rum.
Hi,
Hast du dein Touchscreen kalibriert?
https://github.com/watterott/RPi-Display/blob/master/docu/FBTFT-Install.md#ts_calibrate
Hi,
ich habe nun die Anleitung an das neue Image angepasst 😉
Super! da werden sich die nächsten User freuen 🙂
Das Radio werkelt bei mir seitdem übrigens einwandfrei!
Vielen Dank nochmals für dieses tolle Projekt!!
Erst mal meinen Respekt. Ein wirklich gelungenes Webradio.
Das Problem mit der Fehlermeldung “ … pygame.error: Unable to open mouse“ hatte ich auch.
Erst nachdem ich über Putty einmal „startx“ ausgeführt hatte und danach mich wieder abgemeldet habe, kamen noch einige Meldung von wegen TFT oder HDMI aktivieren, er hat auch noch einiges kompiliert und nachinstalliert.
Woran ich aber gerade scheitere, nichts gegen somafm aber ich möchte einen anderen Stream, oder etwas von meinem NAS abspielen. Ich schaffe es nicht mit dem Code „sudo mpc add “ einen Sender wie z.B. Rock Antenne (http://www.rockantenne.de/webradio/rockantenne.m3u) zum laufen zu überreden. Kannst Du mir evtl. etwas Hilfestellung geben?
Wäre super.
Danke
Danke, Andreas.
Versuch mal mit
cd /var/lib/mpd/playlists/
sudo wget http://www.rockantenne.de/webradio/rockantenne.m3u
sudo mpc load rockantenne.m3u
Evtl. dann nochmal auf Play drücken oder mpc play eingeben 😉
Funktioniert wunderbar.
Vielen Dank.
Hi Junkie ..
also, Raspberry Pi 2 Model B mit 3,5″ Waveshare DVK512 Display läuft auch mit dem echt coolen Radio …
Um es vorweg zu nehmen: Ich habe auch nur beschränkte Ahnung, was die Linux Welt betrifft.
Ich das Radio zum Laufen gebracht, soweit alles echt super: Anleitung, Design, Idee.
Allerdings – und deswegen meine Frage – habe ich keine Idee, wie z.B. Sender URLs wieder entfernt werden können. Ich habe nichts gefunden, wo eine Art Playlist oder Station List enthalten ist. Die „added“ Sender funktionieren, insbesondere die SOMAFM .. (genau meine Richtung).. dennoch möchte ich eben einige Stationen wieder raushaben, weil nervig oder „tot“…
Kannst du mir da bitte „auf’s Pferd helfen“ ?
Besten Dank schonmal .. und echt gut gelungen das Radio .. ich liebe TRON
Kann gerade auf Anhieb kein Befehl finden, wie man ein Sender löschen kann, ohne vorher eine Playlist angelegt zu haben.
Du kannst mit clear alles löschen.
Dann mit sudo nano /var/lib/mpd/playlists/playlist.m3u eine Playlist anlegen und die direkten Links dort hinein kopieren.
Dann mit sudo mpc load playlist.m3u die Playlist laden.
Siehe auch Kommentar oben drüber.
Hi… funzt.. der Tip war Spitze! Danke. Ich habe mich noch ein wenig eingelesen (mpd/mpc) und eine passende Playlist gebaut. Und siehe da: läuft.
ALso: Danke nochmal, wie schon gesagt: Geiles Teil – Super Projekt.. Respekt!
Bei Gelegenheit werde ich mir auch deine anderen Projekte anschauen. Ich habe noch 3 Pi’s rumliegen.
Aber erstmal das Radio für.. Küche oder Bad… so ganz einig bin ich mir noch gar nicht 😉
cheers
Gratulation von meiner Seite. Ich habe ein 3,5″ (320×480) TFT auf meinem Raspberry Pi 2 B „zu Fuß“ zum laufen bekommen. Ihr Python-Script funktionierte übrigens auf Anhieb. Werde es mal mit anderen Features „nachbauen“
Gruß
Andrea
Danke, Andrea.
Freut mich, dass es auch bei dir läuft 🙂
Ich denke, du kannst einigen „Raspberry’anern“ eine große Freude bereiten, wenn du deine Erweiterungen z.B. im deutschen Raspberry Forum präsentierst 😉
Hallo 5Volt-Junkie,
ich habe versucht das RPi-Tron-Radio bei mir zum Laufen zu bringen. Leider erhalte ich immer die gleiche Fehermeldung beim starten von launcher.sh
pi@raspberrypi ~/RPi-Tron-Radio $ ./launcher.sh
Traceback (most recent call last):
File „tron-radio.py“, line 44, in
screen = pygame.display.set_mode(size)
pygame.error: Unable to open mouse
Ich verwende einen Raspberry 2+ und habe dazu das passende Display von watterott.
Hast du eine Idee an was das liegen könnte?
Vielen Dank für deine Hilfe
Agent
Hi Agent,
hast du auch die Installation durch?
sudo /bin/bash rpi-display.sh 270
Hi 5Volt-Junkie,
das mit dem Skript habe ich versucht, leider habe ich damit keinen Erfolg gehabt.
Aus diesem Grund habe ich das Display manuell konfiguriert.
Ich habe dafür die folgenden Anleitungen auf github genutzt:
https://github.com/watterott/RPi-Display/blob/master/docu/FBTFT-Install.md
https://github.com/notro/fbtft/wiki/Touchpanel#-xinput—make-it-permanent
https://github.com/notro/fbtft/wiki#make-it-permanent-debian
Eigentlich sollte es mit dem Image und dem Script von Watterott ohne Probleme gehen.
Was genau hat dabei nicht geklappt?
Schau dir mal die älteren Kommentare an. ANDI hatte das Problem auch, aber nach dem Ausführen des Scriptes, lief es dann.
Gabe im Moment leider kein Raspberry zur Hand, um es selber noch auszuprobieren.
Hi 5Volt-Junkie,
es hat leider ein wenig gedauert …
Das Skript ist zwar durchgelaufen, leider hat aber das starten des X-Servers nicht mehr funktioniert. Es wechselte sich immer die Konsole und ein schwarzes Bildschirm ab. Aus diesem Grund habe ich dann die Installation manuell, ohne Skript, durchgeführt und nun funktioniert alles.
Hast du noch irgendwelche Ideen?
Grüße
Hi Agent,
für’s Tron-Radio brauchst du kein X-Server. Also nach dem Starten des Raspbians (nicht bis zum Desktop), einloggen und das Python-Script ausführen.
Aber wenn du für andere Zwecke den X-Server starten willst, dann mit folgenden Parametern.
startx — -layout TFT
oder
startx — -layout HDMI
Steht so auch im Wiki 😉
https://github.com/watterott/RPi-Display/blob/master/docu/FBTFT-Install.md
So nach ein wenig rumspielen, habe ich das Problem ein wenig einkreisen können.
Das Problem war bei mir, dass der Touchscreen nicht auf „/dev/input/touchscreen“ hörte, sondern auf „/dev/input/event1“.
siehe Datei „tron-radio.py“ Zeile 24 „os.environ[„SDL_MOUSEDEV“] = „/dev/input/touchscreen“
Um die richtige /dev/input/… zu finden. einfach den Befehl eingeben und das was unter dem Buchstaben H zu finden ist, in die Zeile 24 eintragen
cat /proc/bus/input/devices
Nun funktioniert bei mir auch das Radio 🙂
Hi, ist es mit diesem Image auch möglich mit einem Bluetooth stick den content auf einen Bluetooth Lautsprecher zu schicken?
Hi,
so out of the box wird es vermutlich nicht gehen. Da wird man wohl einige Pakete nachinstallieren und einige Einstellungen vornehmen müssen.
Pingback: Ein WLAN-Radio mit RaspberryPi und Touchdisplay selbstgebaut | vinzv
Hallo!
Der Screensaver haut aber nicht richtig hin oder?
Hi Maik, .. zumindest bei mir funzt alles. Der Screensaver schaltet das Display halt nur auf „weiss“, was ja erstmal besser als „aus“ ist, denn das würde „defekt“ implizieren. Wenn Du Ideen hast, da was anderes laufen zu lassen, gerne her damit. ^^
Mein Pi-Radio läuft seit gefühlten ewigen Zeiten im Hintergrund. Da schaut man eher selten auf das Display …
cheers
Bei mir schaltet da aber nichts!sobald der Screensaver angeht bleibt er so.Also mit Datum und Uhrzeit.da verändert sich nichts
Maik, ich werde dir da sicher nicht helfen können, wohl eher der Junkie himself.
Eine konkrete Beschreibung des Problems ist aber in jedem Fall hilfreich. Der Screensaver geht bei mir nach ca 15 min an.
Wie weiter oben schon geschrieben habe, bin ich nicht der Linux/Rasbian/Python Crack, wenn aber der Screen „einfriert“, heisst das ja, dass grundsätzlich irgendwas schonmal passiert. Schau doch mal ins Python-Script, vllt. ergibt sich ja die Lösung… Ansonsten ist möglicherweise auch ein Kontaktproblem die Ursache. Ich hab noch nicht danach geschaut, wie der Screensaver konkret das Display schaltet…
cheers
Ich kann da leider auch nicht helfen. Das Projekt ist so bisschen eingeschlafen und den Raspberry habe ich auch nicht mehr. Habe ich das richtig verstanden, dass im Screensaver Modus das Datum und die Uhrzeit angezeigt werden? Wenn ja, dann ist es wohl eine andere Version, denn meine Version hatte es nicht.
Schau einfach mal im Raspberry-Forum vorbei. Dort haben die Jungs und Mädels das Projekt schon weiterentwickelt und sind da auf dem neueren Stand als ich. Die Links dazu findest du unten im Artikel 🙂
Pingback: Raspberry Pi Internetradio - Mark's Haus-, Hof- und IT-Blog