Radiosender auf Display anzeigen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe Gemeinde,

    Ich nutzte mein RB als Webradio und würde nun gern auf mein erfolgreich angeschlossenes 16x2 LCD den aktuellen Radiosender anzeigen lassen.

    Player ist der MPC MPD.

    Viel mehr soll der code gar nicht können da eh immer der gleiche Sender läuft...sprich keine Schalter o.ä vorerst...naja vllt. noch die Uhrzeit:)

    Da ich nicht gerade der große Programmierer bin würde ich mich freuen wenn mir jemand weiterhelfen könnte...würde auch ggf. ein eigenen Fred dazu eröffnen.

    Viele Grüße
    Flo

  • Ich selbst nutze MPC MPD nicht. Nach kurzer Suche im Forum:

    disaster76
    29. Juni 2013 um 16:05

    Probier mal aus, was dir "mpc current" auf der console zurückgibt.

    Einmal editiert, zuletzt von PinQin (29. Juni 2014 um 17:38)

  • Na was macht das Internetradio?

    Ich hatte hier noch ein paar GrafikLCD Display's basierend auf dem KS0108 Controler liegen aus alten Atmega Projekten, da bot sich doch an diese zu benutzen.

    Die Ansteuerung wollte ich mal in Python realiesieren, da meine Python Kenntnisse aber recht bescheiden sind musste ich mich da erstmal ein wenig reinfuxen :)
    So langsam wird's aber was.
    Ich habe heute eine Textroutine fertig geproggt so das schon mal Text ausgegeben werden kann. Allerdings passen nur 16 Zeichen in eine Reihe da muss ich nun noch gerade für den Titel Scrollmäßig machen.

    displayinternetradiowrsxt.jpg internetradio_displayjasxn.jpg

    Ups: Gerade gesehen bei Bild 1 fehlt ein b bei Raspberry :D

    Einmal editiert, zuletzt von lema67 (2. Januar 2015 um 20:20)

  • soweit ok
    display angeschlossen und test py funktioniert

    import time
    import RPi.GPIO as GPIO
    import os

    # Zuordnung der GPIO Pins (ggf. anpassen)
    DISPLAY_RS = 7
    DISPLAY_E = 8
    DISPLAY_DATA4 = 25
    DISPLAY_DATA5 = 24
    DISPLAY_DATA6 = 23
    DISPLAY_DATA7 = 18

    DISPLAY_WIDTH = 16 # Zeichen je Zeile
    DISPLAY_LINE_1 = 0x80 # Adresse der ersten Display Zeile
    DISPLAY_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile
    DISPLAY_CHR = True
    DISPLAY_CMD = False
    E_PULSE = 0.00005
    E_DELAY = 0.00005

    def get_cpu_temp():
    tempFile = open("/sys/class/thermal/thermal_zone0/temp")
    cpu_temp = tempFile.read()
    tempFile.close()
    return float(cpu_temp)/1000

    def get_cpu_speed():
    tempFile = open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")
    cpu_speed = tempFile.read()
    tempFile.close()
    return float(cpu_speed)/1000


    def main():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(DISPLAY_E, GPIO.OUT)
    GPIO.setup(DISPLAY_RS, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA4, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA5, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA6, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA7, GPIO.OUT)

    display_init()


    lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD)
    lcd_string("CPU Temp: " + str(round(get_cpu_temp(), 2)))
    lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
    lcd_string("CPU Speed: " + str(round(get_cpu_speed(), 2)))

    GPIO.cleanup()

    def display_init():
    lcd_byte(0x33,DISPLAY_CMD)
    lcd_byte(0x32,DISPLAY_CMD)
    lcd_byte(0x28,DISPLAY_CMD)
    lcd_byte(0x0C,DISPLAY_CMD)
    lcd_byte(0x06,DISPLAY_CMD)
    lcd_byte(0x01,DISPLAY_CMD)

    def lcd_string(message):
    message = message.ljust(DISPLAY_WIDTH," ")
    for i in range(DISPLAY_WIDTH):
    lcd_byte(ord(message[i]),DISPLAY_CHR)

    def lcd_byte(bits, mode):
    GPIO.output(DISPLAY_RS, mode)
    GPIO.output(DISPLAY_DATA4, False)
    GPIO.output(DISPLAY_DATA5, False)
    GPIO.output(DISPLAY_DATA6, False)
    GPIO.output(DISPLAY_DATA7, False)
    if bits&0x10==0x10:
    GPIO.output(DISPLAY_DATA4, True)
    if bits&0x20==0x20:
    GPIO.output(DISPLAY_DATA5, True)
    if bits&0x40==0x40:
    GPIO.output(DISPLAY_DATA6, True)
    if bits&0x80==0x80:
    GPIO.output(DISPLAY_DATA7, True)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_E, True)
    time.sleep(E_PULSE)
    GPIO.output(DISPLAY_E, False)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_DATA4, False)
    GPIO.output(DISPLAY_DATA5, False)
    GPIO.output(DISPLAY_DATA6, False)
    GPIO.output(DISPLAY_DATA7, False)
    if bits&0x01==0x01:
    GPIO.output(DISPLAY_DATA4, True)
    if bits&0x02==0x02:
    GPIO.output(DISPLAY_DATA5, True)
    if bits&0x04==0x04:
    GPIO.output(DISPLAY_DATA6, True)
    if bits&0x08==0x08:
    GPIO.output(DISPLAY_DATA7, True)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_E, True)
    time.sleep(E_PULSE)
    GPIO.output(DISPLAY_E, False)
    time.sleep(E_DELAY)

    if __name__ == '__main__':
    main()

    nur wie ich das jetzt ummünze das die radiostation bzw der titel angezeigt bekomme ist mir noch ein räzel

    lg
    m4xx

  • Hier mal ein Beispiel aus meinem aktuellen Projekt.
    Dann hast Du schon mal den Titel.

    Das hier hinter display_init() ersetzen
    das hier
    [code=php]
    lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
    lcd_string("CPU Speed: " + str(round(get_cpu_speed(), 2)))
    [/php]

    mit dem hier
    [code=php]
    title = get_title()
    lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
    lcd_string(title,1)
    [/php]

    und dies Funktion noch einfügen

    [code=php]
    def get_title():
    f=os.popen("mpc current")
    data = ""
    for i in f.readlines():
    data += i

    if len(data) <= 1:
    data = "N/A"

    data = data[data.find(":")+2:]
    data = data[:data.find("|")]
    data += " "

    return data
    [/php]

    Einmal editiert, zuletzt von lema67 (4. Januar 2015 um 19:04)

  • danke für deine hilfe

    hab das jetzt geendert aber leider kommt eine fehler meldung und angezigt wird noch immer temp und speed

    pi@rasp ~ $ sudo python lcd.py
    File "lcd.py", line 62
    GPIO.cleanup()
    ^
    IndentationError: unexpected indent


    import time
    import RPi.GPIO as GPIO
    import os

    # Zuordnung der GPIO Pins (ggf. anpassen)
    DISPLAY_RS = 7
    DISPLAY_E = 8
    DISPLAY_DATA4 = 25
    DISPLAY_DATA5 = 24
    DISPLAY_DATA6 = 23
    DISPLAY_DATA7 = 18

    DISPLAY_WIDTH = 16 # Zeichen je Zeile
    DISPLAY_LINE_1 = 0x80 # Adresse der ersten Display Zeile
    DISPLAY_LINE_2 = 0xC0 # Adresse der zweiten Display Zeile
    DISPLAY_CHR = True
    DISPLAY_CMD = False
    E_PULSE = 0.00005
    E_DELAY = 0.00005

    def get_cpu_temp():
    tempFile = open("/sys/class/thermal/thermal_zone0/temp")
    cpu_temp = tempFile.read()
    tempFile.close()
    return float(cpu_temp)/1000


    def get_title():
    f=os.popen("mpc current")
    data = ""
    for i in f.readlines():
    data += i

    if len(data) <= 1:
    data = "N/A"

    data = data[data.find(":")+2:]
    data = data[:data.find("|")]
    data += " "

    return data

    def main():
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(DISPLAY_E, GPIO.OUT)
    GPIO.setup(DISPLAY_RS, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA4, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA5, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA6, GPIO.OUT)
    GPIO.setup(DISPLAY_DATA7, GPIO.OUT)

    display_init()


    lcd_byte(DISPLAY_LINE_1, DISPLAY_CMD)
    lcd_string("CPU Temp: " + str(round(get_cpu_temp(), 2)))

    title = get_title()
    lcd_byte(DISPLAY_LINE_2, DISPLAY_CMD)
    lcd_string(title,1)

    GPIO.cleanup()

    def display_init():
    lcd_byte(0x33,DISPLAY_CMD)
    lcd_byte(0x32,DISPLAY_CMD)
    lcd_byte(0x28,DISPLAY_CMD)
    lcd_byte(0x0C,DISPLAY_CMD)
    lcd_byte(0x06,DISPLAY_CMD)
    lcd_byte(0x01,DISPLAY_CMD)

    def lcd_string(message):
    message = message.ljust(DISPLAY_WIDTH," ")
    for i in range(DISPLAY_WIDTH):
    lcd_byte(ord(message[i]),DISPLAY_CHR)

    def lcd_byte(bits, mode):
    GPIO.output(DISPLAY_RS, mode)
    GPIO.output(DISPLAY_DATA4, False)
    GPIO.output(DISPLAY_DATA5, False)
    GPIO.output(DISPLAY_DATA6, False)
    GPIO.output(DISPLAY_DATA7, False)
    if bits&0x10==0x10:
    GPIO.output(DISPLAY_DATA4, True)
    if bits&0x20==0x20:
    GPIO.output(DISPLAY_DATA5, True)
    if bits&0x40==0x40:
    GPIO.output(DISPLAY_DATA6, True)
    if bits&0x80==0x80:
    GPIO.output(DISPLAY_DATA7, True)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_E, True)
    time.sleep(E_PULSE)
    GPIO.output(DISPLAY_E, False)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_DATA4, False)
    GPIO.output(DISPLAY_DATA5, False)
    GPIO.output(DISPLAY_DATA6, False)
    GPIO.output(DISPLAY_DATA7, False)
    if bits&0x01==0x01:
    GPIO.output(DISPLAY_DATA4, True)
    if bits&0x02==0x02:
    GPIO.output(DISPLAY_DATA5, True)
    if bits&0x04==0x04:
    GPIO.output(DISPLAY_DATA6, True)
    if bits&0x08==0x08:
    GPIO.output(DISPLAY_DATA7, True)
    time.sleep(E_DELAY)
    GPIO.output(DISPLAY_E, True)
    time.sleep(E_PULSE)
    GPIO.output(DISPLAY_E, False)
    time.sleep(E_DELAY)

    if __name__ == '__main__':
    main()

    nach dem ich spannungslos gemacht habe lässt sich die lcd.py nicht mehr starten und das display bleibt leer

    Einmal editiert, zuletzt von m4xx (4. Januar 2015 um 19:49)

  • sorry
    hab null ahnung

    ich hoffe es passt so


  • danke für deine hilfe

    hab das jetzt geendert aber leider kommt eine fehler meldung und angezigt wird noch immer temp und speed

    pi@rasp ~ $ sudo python lcd.py
    File "lcd.py", line 62
    GPIO.cleanup()
    ^
    IndentationError: unexpected indent

    Die angemeckerte Zeile ist eingerückt, aber kein neuer Block!
    In Python wird durch einrücken ein "Unterblock" angezeigt, an den anderen Stellen, wo ein if (vergleich) .... steht, hast du das ja richtig gemacht...

    Einrückung soweit rausnehmen, dass es mit dem aktuellen Block übereinstimmt, und schon geht es (inhaltlich hab ich nicht reingeschaut...)

    Mfg, Zen

    sieht auch komisch aus:
    Nach dem Funktionsaufruf display_init() ist die nächste Zeile (unmotiviert) eingerückt... sollte ebenfalls angemeckert werden, oder?

  • so habs zum laufen gebracht mit

Jetzt mitmachen!

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