RPi-Tron-Radio - Raspberry Pi Webradio im Tronstyle

L I V E Stammtisch ab 20:30 Uhr im Chat
  • RPi-Tron-Radio - Raspberry Pi Webradio im Tronstyle? Schau mal ob du hier fündig wirst!

  • Hab mir heute nochmal das originale Tron Script vorgenommen und nach meinen Wünschen bearbeitet. Hat zwar jetzt ne Weile gedauert, aber eigentlich bin ich schon mal ganz zufrieden.

    Nach dem Starten wird die Playlist mit den InternetRadios geladen, mit dem Favoriten-Button im zweiten Fenster lädt man die Playlist Favoriten welche meine liebsten Songs enthält. Auf dem dritten Button liegt nun der Befehl für einen Neustart der Netzwerkverbindung.

    Für die Übersicht all meiner mp3s nutze ich die App "MPDroid". Damit die App auch die Albumcovers anzeigen kann, habe ich "nginx" als Server für die Covers installiert. Ich denke das könnte evtl nützlich sein für mein Anliegen.

    Es wäre absolut geil wenn man beim Abspielen der mp3s das jeweilige Cover als Screensaver auf dem Display zu sehen ist. Falls kein Cover vorhanden sein sollte, dann soll auch der Screensaver nicht aktiv werden.

    Ich hoffe irgendjemand hier kann sich mein TronRadio mal anschauen und eventuell Hilfe leisten. Bin dankbar für jeden noch so kleinen Tip :danke_ATDE:


    Edit: Ich hab den Beitrag nun doch hier im Thread geschrieben, weil ich hoffe das hier schon ein paar Leute die Neuigkeiten verfolgen :^^:

  • Guten Morgen Leute, hab heut nacht ewig an dem Python Script rumgebastelt. Mittlerweile bin ich soweit das ich ein drittes Fenster angezeigt bekomme. Habe dann etwas mit dem Photoshop gewütet und für jeden Skin ein farblich passendes Bild erstellt :D so in etwa sieht es jetzt aus.

    Hab mir auch die Buttonfarbe etwas abgeändert :thumbs1: Das ist mein Standard Skin, als Schriftfarbe habe ich weiß gewählt.


    Code
    if menu == 3:                                        
                skin = skin3
    
                screen.blit(skin, (0, 0))
    
    
                #get current time
                screen.blit(time_label, (95, 200))
    
                pygame.display.flip()

    Mit diesem Schnipsel bekomme ich nun im dritten Fenster das Datum und die Uhrzeit am unteren Bildschirmrand schön mittig angezeigt. Wenn nun schon mal an dieser Stelle der Name des Albums angezeigt werden würde :@ wäre ich einen Schritt weiter. :helpnew: Und obendrüber is ja noch genug Platz um ein kleines Albumart anzuzeigen.

    Wer die Bilder und den gesamten Python Code haben möchte, der findet es im Anhang.

  • Naja den namen des Albums must du dir rauspasen.
    Beispiel:

    Code
    lines = subprocess.check_output('mpc -f [%album%]', shell=True).split("\n")
    album = lines[0]
    
    
    ... hier noch was einbauen falls kein Album vorhanden ist!
    
    
    album_label = font18.render(album.decode('utf-8',errors='ignore'), 1, (font_color))
    screen.blit(album_label, (30, 80))

    Musst halt erstmal ein wenig mit mpc rumspielen um zu sehen was da für Ausgaben rauskommen.
    Also in einer konsole machste ertmal

    Code
    mpc -f %album%
  • Geile Sache, dank deinem Tip hab ich jetzt schon mal den Namen des Albums anstelle der Uhrzeit im dritten Fenster :bravo2:

    Mit diesem Schnipsel hat es funktioniert, solange ein Albumname vorhanden ist. Jetzt muss ich nur noch die Lösung finden falls kein Name vorhanden ist.


    Das gute ist aber, das Programm bricht nicht zusammen falls kein Name vorhanden ist, es zeigt schlichtweg nix an.

    Einmal editiert, zuletzt von Greengecko (19. April 2015 um 20:23)

  • Cool, so schwierig is das mit dem Python ja gar nicht :D gestern nacht hat es wohl klick gemacht und dank der Hilfe von lema67 hab ich es geschafft dem Tron-Radio ein drittes Fenster zu verpassen. Dort wird jetzt mittig ganz unten der Albumname angezeigt und wenn nicht verfügbar steht dann "No Album-Info available! :thumbs1:

    Hab das Python Script im Anhang, wer probieren will kann die .zip's auf meinem vorherigen Post nehmen und muss nur das Script tauschen.

    Als nächstes mach ich mich an die Arbeit, das das Albumcover noch im dritten Fenster erscheint. Irgendwie muss ich in "Pythonsprache" dem RPI sagen, das wenn eine Datei namens cover.png im Ordner der momentan gespielten mp3 vorhanden ist, diese dann auch angezeigt wird. Die Cover .png's werd ich dann auf die Größe von etwa 200x200 Pixel machen, damit es stimmig aussieht.

    Und wenn kein Cover vorhanden, probier ich wieder eine "if/else" Regel damit dann stattdessen ein Standard Bild gezeigt wird.

    Das ist der Code für mein drittes Fenster ... :danke_ATDE::danke_ATDE:  lema67

  • EIN-/AUSSCHALTEN,

    hallo zusammen, erstmal einen lieben Dank an alle, insbesondere lema67, der das Image sehr gut für das 3,2" Display umgeschrieben hat.


    Wie macht ihr das mit dem Ein und Ausschalten des Radios? Nach dem drücken des -Aus- Buttons und herunterfahren bleibt mein Display nämlich weiss. Und einfach nur Strom ziehen ist auch nicht gut für die Speicherkarte.

    Gibt es die Möglichkeit einen über die PINS(die ja eigentlich von Display belegt sind) das Gerät an- und auszuschalten?

    Besten Gruss

  • Ich hatte so einiges mit meinem Display versucht da war nix zu machen.
    Rpi runterfahren ist halt keine Alternative weil dann der Start so lange dauert, also
    bleibt es ständig an. Die paar Watt machen den Kohl auch nicht fett :)

    gruß lema67

  • hello from Finland!

    great job with v5.3! :bravo2:

    i'm new with python so i ask here.

    how to get scandinavian characters to work at sender layout? :huh:

    i also tried to make mute/unmute fuction on same button but it crashed every time...

    i made boolean var:

    it crashes because of this line 'volume_mute = not volume_mute', but don't know why....?

    Thanks!

    -Flanagan

  • lema67,
    ich möchte Dein TronRadio mal ausprobieren, jedoch in einem bestehenden Image und nicht ein komplett neues installieren. Kannst Du mir bzgl. der benötigten Schritt auf die Sprünge helfen?

    - LCD/TFT genau identisch zu dem von Dir oben verlinkten bestellt (noch nicht da :(
    - /usr/src/tron_radio (5.3) liegt vor
    - Raspian mit Kernel: Linux WebRadio 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l GNU/Linux
    => somit bereits mit fb im Kernel. Welches "fbtft_device" muss für das LCD genutzt werden? (hy28b*, sainsmart32*, mi0283qt*, rpi-display, ...???)
    - was bzgl. Touchscreen? Ist der richtig?
    root@WebRadio:/lib/modules/3.18.11+/kernel/drivers/input/touchscreen# ls -ltr ads*
    -rw-r--r-- 1 root root 20848 Apr 27 21:37 ads7846.ko
    Muss wohl "ADS7843 or XPT2046" sein, aber wie geht das? (evtl. von hier kommend http://www.hotmcu.com/28-touch-scree…rface-p-63.html dann so http://www.hotmcu.com/wiki/HY28B_-_2…or_Raspberry_Pi ?)
    - muss in /boot/config.txt oder command.txt etwas aufgenommen werden?

    Könntest Du mir die Schritt zur Einrichtung ein wenig erläutern?

    in tron_radio.py geändert
    - os.environ["SDL_FBDEV"] = "/dev/fb0" => fb1 gibt es bei mir nicht
    - os.environ["SDL_MOUSEDEV"] = "/dev/input/mice" => touchscreen gibt es nicht und es kam Fehlermeldung "Unable to open mouse"
    nun startet tron_radio schon mal, lädt die Playlist und spielt "play 1" ab.

    Nun fehlt mir mein TFT/Touchscreen um etwas zu sehen ;) (hoffentlich kommt es bald)

    Meinst Du fehlt noch was für die Hardware? Gibt es evtl. die Möglichkeit einer Simulation der TFT Inhalte ... ?

    Danke
    giovanne

    Einmal editiert, zuletzt von giovanne (27. April 2015 um 22:31)

  • Ich bastel gerade auch just 4 fun an einem Recode des Originals, in dem ich auch keine Skin-Bilder nutzen möchte, eben weil die Skin-Bilder nur für eine Auflösung passen...

    Ich hab allerdings auch noch ein paar andere Sachen geändert wie zB nativ das mpd Python Module anstelle der subprocess Shellbefehle zu nutzen... Das senkt zum einen die CPU Belastung und macht die Bedienung ein bisschen flüssiger.

    Auch hab ich die 'global' Sachen durch Dictionaries ersetzt, den Code etwas aufgeräumt und Einrückungen usw ausgebessert... Aber auch sowas wie das auslesen der CPU-Temperatur über /sys/class/thermal/thermal_zone0/temp eingebaut denn das im original genutzt vcgencmd verursacht ebenfalls unnötige Last...

    Nunja, jedenfalls möchte ich wie gesagt keine starren Skins verwenden sondern so ähnlich wie tuxerli >hier< einzelnen Bildern - allerdings will ich noch einen Schritt weiter gehen und das 'Sprite Sheets' Feature von pygame verwenden, wie es auch bei Spielen zum Einsatz kommt. Dabei kommt eine einzige Bilddatei zum Einsatz auf der alle benötigten Bilder angeordnet sind und über pygame kopiert man sich dann nur das jeweilige Abbild heraus. Das reduziert die Anzahl der Dateien und macht es auch etwas flexibler. Ein Beispiel hierfür kann man zB hier nachlesen: http://programarcadegames.com/python_examples/en/sprite_sheets/

    Auch hatte Greengecko in seinem Thread die Idee das jeweilige Cover von local abgespielten MP3's darzustellen, was ich später auch noch einbauen möchte.

    Auch wären ein paar Animationen nicht schlecht wie zB den Track-Titel - der auf so kleinen Displays selten vollständig dargestellt werden kann - von links nach rechts durch zu scrollen.

    Ebenso wie weitere Informationen auf anderen "Fenstern", oder eben auch sowas wie "Verbleibende Zeit" des jeweiligen Tracks.

    Also weitere Möglichkeiten gäb es denk ich viele - dank der TRON-Radio Vorlage hat man zumindest schon mal eine brauchbare Basis die man erweitern kann :thumbs1:


    Beta3: http://slexy.org/view/s2onIiOIzL

  • Vielleicht sollte man dieses Thema langsam aufsplitten.
    Es ist ja toll was einige hier so aus dem Web-Radio so machen.
    Das wird , meiner Meinung nach, aber dem eigentlichen Thema und der Arbeit von Lema nicht mehr gerecht.
    Das Tron-Radio soll bitte auch das Tron Radio bleiben.
    So möchte ich gern ein nicht so aufwendiges Radio haben und hätte gern noch eine Funktion implementiert.
    Per Tastatur, hab so eine Mini-Tastatur, müsste es doch möglich sein von Station zu Staion zu zappen ( hoch/runter Taste würde voll ausreichen).
    Wäre so ein Gedanke und zu den anderen Sachen kann man ja diskutieren.
    Vielleicht sehe ich das auch falsch.

    Einmal editiert, zuletzt von tino11 (28. April 2015 um 17:42)

  • Durch deinen Implementierungswunsch bleibt das Original auch nicht mehr so wie es ist - also müsstest du um deiner Aussage treu zu bleiben auch deine Bitte von diesem Thread hier absplitten.

    Ich versteh deine 'Aufregung' aber auch nicht. Viele Augen sehen mehr als nur 2 und durch die Ideen wie sie hier zusammengetragen werden könnte das Original TRON-Radio Verbesserungen erfahren - oder magst du das auch nicht?

  • Hey meigrafd,

    hab jetzt dein script mal getestet. Leider will es bei mir nicht :(

    Code
    tron-radio.py:42: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(18, GPIO.OUT)
    Enabling DEBUG mode!
    volume: 80%   repeat: off   random: off   single: off   consume: off
    volume: 80%   repeat: off   random: off   single: off   consume: off
    Error...: 'name'

    Woran könnte das liegen ??

    Gruß mattes


  • Durch deinen Implementierungswunsch bleibt das Original auch nicht mehr so wie es ist - also müsstest du um deiner Aussage treu zu bleiben auch deine Bitte von diesem Thread hier absplitten.

    Ich versteh deine 'Aufregung' aber auch nicht. Viele Augen sehen mehr als nur 2 und durch die Ideen wie sie hier zusammengetragen werden könnte das Original TRON-Radio Verbesserungen erfahren - oder magst du das auch nicht?


    Wieso denn aufgeregt. Hab doch nur meine Gedanken zur Diskussion gestellt.:no_sad::no_sad:

  • Code
    tron-radio.py:42: RuntimeWarning: This channel is already in use, continuing anyway.  Use GPIO.setwarnings(False) to disable warnings.
      GPIO.setup(18, GPIO.OUT)
    Enabling DEBUG mode!
    volume: 80%   repeat: off   random: off   single: off   consume: off
    volume: 80%   repeat: off   random: off   single: off   consume: off
    Error...: 'name'

    Zeile 452 löschen und hiermit ersetzen:

    Code
    try: station_name = PlayCurrent['name']
    		except: station_name = None

    'name' gibt es nur bei einem Online-Stream, aber nicht wenn man eine locale Datei abspielt.

    Hab dieses Problem auch erst später festgestellt, aber meine aktuelle Build beschäftigt sich bereits mit dem Lauftext und ist noch nicht bereit veröffentlicht zu werden :daumendreh2:

  • Zitat

    'name' gibt es nur bei einem Online-Stream, aber nicht wenn man eine locale Datei abspielt.

    Hier geht es doch um ein Webradio also auch um online streams :huh:
    oder spielst du mit deinem script nur locale mp3´s ab ?

    Wenn ich das so ändere, wie du beschrieben hast, ist der nächste Fehler

    Code
    error 'album'

    in meiner playlist sind nur online streams.

    Gruß mattes

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!