Nun kommt endlich wie versprochen der Sourcecode des PitRadios V1.2
Dies ist ein funktionsfähiger Code. Klar lässt er sich noch verbessern. Vor der Version 2.0 werde ich den Code aufgeräumt haben. Da ich aber zur Zeit leider nicht ganz so viel Zeit habe kann es also noch eine Weile dauern bis eine neue Version erscheint.
Damit der Code funktioniert benötigt Ihr noch folgende Sachen:
1. The Adafruit_CharLCD
2. Eine Senderliste. Diese findet Ihr am Ende des Beitrages
#!/usr/bin/python #PitRadio Version 1.2 #Copyright 2014 by Daniel Schwarz #Daniel.Schwarz@Blackit.eu #http://blackit.eu/?s=pitradio# PIN_PREV = 18 PIN_NEXT = 4 PIN_VOLUP = 14 PIN_VOLDOWN = 15 PIN_MENU = 8 # The Adafruit_CharLCD class controls the LCD display # 25 = RS (register select) # 24 = E (enable/strobe) # 23 = Data bit 4 # 17 = Data bit 5 # 27 = Data bit 6 # 22 = Data bit 7 # Import import os import RPi.GPIO as GPIO from Adafruit_CharLCD import Adafruit_CharLCD from datetime import datetime from subprocess import * from time import sleep, strftime LCD = Adafruit_CharLCD() PLAYLIST_MSG = [] STATION = 1 NUM_STATIONS = 0 class mpc_T: "Speichert den aktuellen Status des MPC Players" def __init__(self): self.volume = 70 self.on = False self.station = "station" def toggle(self): LCD.clear() os.system("mpc toggle") self.on = not self.on if self.on: LCD.message("play") else: LCD.message("stop") def vol(self): LCD.clear() LCD.message(volume) #Stopt das Radio falls es laufen sollte #Verhindert das gleichzeitige Laufen von mehreren Radio_Prozessen os.system("mpc stop") #xx Millisekunden warten. def delay_milliseconds(milliseconds): seconds = milliseconds / float(1000) # Rechnet Sekunden in Milisekunden um sleep(seconds) #Ueberwacht ob ein Taster gedrueckt wurde oder nicht def read_switches(): #Implementierung der Taster got_prev = False got_next = False got_volup = False got_voldown = False got_menu = False sw1_prev = GPIO.input(PIN_PREV) sw2_next = GPIO.input(PIN_NEXT) sw3_volup = GPIO.input(PIN_VOLUP) sw4_voldown = GPIO.input(PIN_VOLDOWN) sw5_menu = GPIO.input(PIN_MENU) #Wird ein Taster gedrueckt dann while(sw1_prev or sw2_next or sw3_volup or sw4_voldown or sw5_menu): if(sw1_prev): got_prev = True if(sw2_next): got_next = True if(sw3_volup): got_volup = True if(sw4_voldown): got_voldown = True if(sw5_menu): got_menu = True delay_milliseconds(1) sw1_prev = GPIO.input(PIN_PREV) sw2_next = GPIO.input(PIN_NEXT) sw3_volup = GPIO.input(PIN_VOLUP) sw4_voldown = GPIO.input(PIN_VOLDOWN) sw5_menu = GPIO.input(PIN_MENU) #if(got_prev and got_next): #Wird Taster 1 und 2 gedrueckt dann #return 3 if(got_next): return 1 if(got_prev): return 2 if(got_volup): return 3 if(got_voldown): return 4 if(got_menu): return 5 return 0 def playlists(): LCD.message("Playlisten werden n importiert") print "Playlisten werden importiert" echo=os.system("sh ./radio_playlist.sh") LCD.clear() def mainloop(): #Hauptfunktion # volume=70 #Die start Lautstaerke betraegt 70 Prozent #GPIO Implementierung GPIO.setmode(GPIO.BCM) GPIO.setup(PIN_PREV, GPIO.IN) GPIO.setup(PIN_NEXT, GPIO.IN) GPIO.setup(PIN_VOLUP, GPIO.IN) GPIO.setup(PIN_VOLDOWN, GPIO.IN) GPIO.setup(PIN_MENU, GPIO.IN) LCD.begin(16,2) LCD.clear() playlists() # Radio wird gestartet mpc = mpc_T() os.system("mpc play") mpc.on = True LCD.message("PitRadion...") print "Radio startet" sleep(0.1) # LCD.clear() i=0 while True: press = read_switches() #Ueberwacht ob ein Taster gedrueckt wurde i += 1 if(i % 60 == 0): LCD.setCursor(0,0) sender1=os.popen("mpc current").read() sender = (sender1.split(':')[0])[:10] titel=os.popen("mpc -f %title% current").read() Anzeige = sender ; datetime.now().strftime(' %H:%M') print Anzeige LCD.clear() LCD.message(sender) LCD.setCursor(10,0) LCD.message(datetime.now().strftime(' %H:%M')) #Zeigt die aktuelle Zeit auf dem Display an LCD.message("n%s" %titel) if(press == 3): LCD.clear() LCD.message("lauter") os.system("mpc volume +3") elif(press == 4): LCD.clear() LCD.message("leiser") os.system("mpc volume -3") elif(press == 5): mpc.toggle() if(press == 1): LCD.clear() LCD.message("Next") os.system("mpc next") elif(press == 2): LCD.clear() LCD.message("Prev") os.system("mpc prev") LCD.setCursor(0,1) LCD.noAutoscroll delay_milliseconds(100) mainloop() #Ausfuehrung des Programmes
radio_playlist.sh
#! /bin/sh mpc clear 1>/dev/null #1 SWR3, Hitradio nrock mpc add http://swr-mp3-m-swr3.akacast.akamaistream.net/7/720/137136/v1/gnl.akacast.akamaistream.net/swr-mp3-m-swr3
hallo könntest du ein step by step tutorial popsten oder zusammenstellen ?
ohne den tasten wenns möglich währe 🙂
oder mich kontaktieren per mail 🙂
herzlichen dank 🙂
Wie willst Du das Radio ohne die Taster bedienen?
Wenn Du die Taster nicht brauchst wofür soll ich denn die Anleitung schreiben?
Zur Ansteuerung des Players oder für das Display?
Gerne schreibe ich dir eine step by step Anleitung und lade diese auf meinen Blog. Aber eine Bitte werde etwas genauer und sage mir was genau Du wissen möchtest.
Liebe Grüße
Hiho, Danke für das Schreiben, genau was ich suche!
Ein Fehler im Skript!? Du rufst in Zeile 117 die Playlists auf mit
echo=os.system(„sh ./radio_playlis.sh“)
Da fehlt ein „t“ in „radio_playlist.sh“
Danke für den Hinweis!
Hallo
ich habe ein problem mit den Gpio welche verwendest du um die Taster anzusteuern. durch das LCD 20×4 sind ja schon einige belegt.
Danke für deine hilfe.
In der Regel kannst Du jeden beliebigen GPIO für deine Taster verwenden. Ich habe folgende Belegung benutzt:
PIN_PREV = 18
PIN_NEXT = 4
PIN_VOLUP = 14
PIN_VOLDOWN = 15
PIN_MENU = 8
Bei weiteren Fragen stehe ich gerne auch weiterhin zur Verfügung.
Hallo
Danke für deine schnell Hilfe.
Ich sage nur wer die Augen aufmacht :-).
mein nächstes Problem ist, das ich die Play-Liste unter dem Pfade
pi@raspberrypi /var/lib/mpd/playlists $
Abspeichere aber es wird nichts abgespielt. i
Ich vermute dass ich die Daten unter dem falschen Verzeichnis abspeichere.
Gruß Gerold
Guten morgen, ich habe meine playlist in dem selben Ordner wie mein Script. Wenn du also mein Script nutzt, musst du die playlist in den selben Ordner wie das Script schieben. Ich hoffe, dass ich helfen konnte…