Hallo liebe Programmiergemeinde,
ich habe hier ein kleines Programm geschrieben. Es funtioniert soweit wie gewünscht, jedoch bin ich kein Profi und würde mich freuen wenn mal einer von euch drüber schauen kann und mir noch ein paar hilfreiche Tipps geben kann. Was könnte z.B. zu Problemen führen ? Wie kann es effektiver gestaltet werden?
Zur Funktion:
Der Raspberry baut eine Netzwerkverbindung auf und wartet auf die Übertragung von Daten. Wenn "PLAY" übertragen wird soll je nach dem ob der Schalter am GPIO 2 geschalten ist Audiofile 1 oder 2 zwei abspielen. Danach wird ein Relais auf GPIO 26 gesetzt und die globale Variable "status = True". Nachdem status = true ist läuft mit time.sleep eine Zeit ab die ungefähr die der Audiospur entspricht ab und das Relais fällt wieder ab. Da das Audiofile jederzeit gestoppt werden muss habe ich das "Zeitrelais" über threading realisiert.
Wie bereits geschrieben würde mich sehr über ein paar Tipps freuen. Zudem ich das Programm zur Zeit nicht beeenden kann ohne den Raspberry neu zu starten. Ich habe es jetzt mit PYthon 2.7 realisiert.
Danke schon mal im Vorraus.
import socket
from threading import Thread
import pygame, time
import RPi.GPIO as GPIO
#===Init der GPIO Kontakte===#
GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.OUT)
GPIO.setup(2, GPIO.IN)
GPIO.setup(3, GPIO.IN)
#===Init PyGame===#
pygame.init()
#===Init der Verbindungsparameter===#
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(("0.0.0.0",5555))
status = False
def timerelais():
global status
while True:
if status == True:
time.sleep(60)
GPIO.output(26, GPIO.HIGH)
status = False
time.sleep(0.2)
def receive():
global status
while True:
daten, addr = sock.recvfrom(1024)
if daten == 'PLAY':
if GPIO.input(2) == GPIO.HIGH:
pygame.mixer.music.load('/home/pi/Music/02.wav')
else :
pygame.mixer.music.load('/home/pi/Music/01.wav')
pygame.mixer.music.play()
GPIO.output(26, GPIO.LOW)
status = True
print('PLAY')
if daten == 'STOP':
pygame.mixer.music.stop()
def Main():
try:
t1 = Thread(target = timerelais )
t1.start()
receive()
except KeyboardInterrupt:
print ('quit')
finally:
GPIO.cleanup()
if __name__ == '__main__':
Main()
Alles anzeigen
Habe noch was vergessen. Das Programm soll unendlich mal hintereinander abspielbar sein. Es läuft quasi per autostart an und soll den ganzen Tag laufen.