73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
import RPi.GPIO as GPIO
|
|
import time
|
|
import thread
|
|
import subprocess
|
|
from subprocess import Popen, PIPE, STDOUT
|
|
|
|
# pin-setup
|
|
GPIO.setmode(GPIO.BOARD)
|
|
led_pin = 12
|
|
blk_pin = 16
|
|
red_pin = 18
|
|
|
|
# set volume
|
|
cmd_amixer1 = 'amixer -c 0 set PCM 98%'
|
|
cmd_amixer2 = 'amixer -c 0 set Speaker 98%'
|
|
|
|
# the process we want to start and its argument
|
|
#cmd_player = 'mplayer'
|
|
cmd_player = 'ogg123'
|
|
arg_player = []
|
|
url_player = 'http://192.168.1.33:8000/mpd.ogg'
|
|
process = 0
|
|
|
|
def playerThreadFunc():
|
|
# we need in every thread, so it is a global
|
|
global process
|
|
# kill if running
|
|
if process != 0:
|
|
#if process.poll() == None:
|
|
#process.communicate(input='q')
|
|
if process.poll() == None:
|
|
process.terminate()
|
|
list_cmdarg = []
|
|
list_cmdarg.append('killall')
|
|
list_cmdarg.append(cmd_player)
|
|
subprocess.call(list_cmdarg, shell=False)
|
|
time.sleep(1)
|
|
# turn on led
|
|
GPIO.output(led_pin, True)
|
|
list_cmdarg = []
|
|
list_cmdarg.append(cmd_player)
|
|
list_cmdarg.extend(arg_player)
|
|
list_cmdarg.append(url_player)
|
|
# start process and wait for termination
|
|
process = subprocess.Popen(list_cmdarg)
|
|
#process = subprocess.Popen(list_cmdarg, stdin=PIPE)
|
|
process.wait()
|
|
# turn off led
|
|
GPIO.output(led_pin, False)
|
|
|
|
# callback function
|
|
def callBackFunc(channel=0):
|
|
thread.start_new_thread(playerThreadFunc, ())
|
|
|
|
# init
|
|
GPIO.setup(led_pin, GPIO.OUT)
|
|
GPIO.setup(blk_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
|
GPIO.setup(red_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
|
|
|
|
# add event
|
|
GPIO.add_event_detect(blk_pin, GPIO.RISING, callback=callBackFunc, bouncetime=300)
|
|
|
|
while True:
|
|
subprocess.call(cmd_amixer1, shell=True)
|
|
subprocess.call(cmd_amixer2, shell=True)
|
|
thread.start_new_thread(playerThreadFunc, ())
|
|
GPIO.wait_for_edge(red_pin, GPIO.FALLING)
|
|
break
|
|
|
|
# clean
|
|
GPIO.cleanup()
|
|
|
|
subprocess.call('shutdown -h now', shell=True)
|