scripts/rasp_startup.py
2014-09-28 22:20:41 +02:00

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)