scripts/rasp_startup.py

60 lines
1.5 KiB
Python

import RPi.GPIO as GPIO
import time
import thread
import subprocess
# 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'
arg_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.terminate()
subprocess.call(['killall', cmd_player], shell=True)
time.sleep(1)
# turn on led
GPIO.output(led_pin, True)
# start process and wait for termination
process = subprocess.Popen([cmd_player, arg_player])
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)