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…