Raspberry Pi Internetradio

RPi-Internet-Radio

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 😉

Hier geht’s direkt zum Thread 

Update  10. Juli 2015

Weitere Weiterentwicklungen des Projektes im deutschen Raspberry-Forum 🙂

 

53 Gedanken zu „Raspberry Pi Internetradio

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

    • 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

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

  3. …. also irgendwie werden die Kommentare nicht immer angezeigt. erst garkeiner sondern „Fehler CAPTCHA“ und nach 4 Versuchen werden 2 Antworten angezeigt…..

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

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

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

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

    • 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 🙂

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

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

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

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

        • 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

          • 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,

      so out of the box wird es vermutlich nicht gehen. Da wird man wohl einige Pakete nachinstallieren und einige Einstellungen vornehmen müssen.

  11. Pingback: Ein WLAN-Radio mit RaspberryPi und Touchdisplay selbstgebaut | vinzv

    • 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

        • 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 🙂

  12. Pingback: Raspberry Pi Internetradio - Mark's Haus-, Hof- und IT-Blog

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte löse folgende Rechenaufgabe * Time limit is exhausted. Please reload CAPTCHA.