Hallo zusammen,
ich baue gerade weiter an meiner Jukebox. Ich habe ein kleines Skript, welches zwei LEDs blinken lässt.
Mein Wunsch ist, das das Skript gestartet wird wenn über einen bestimmten RFID Token der dazugehörige Sound gestartet wird.
Der Sound ist in diesem Fall vom Martinshorn eines Feuerwehrautos und die LEDs sollen dazu abwechselnd leuchten.
Würde mich über Ideen freuen.
Display More
Ich habe eine Lösung gefunden. Vielleicht hilt es ja noch jemandem weiter:
Feuerwehr Blaulicht + Martinshorn
Ziel ist es mittels eines RFID Chips das Blaulicht und das Martinshorn zu aktivieren. Als Blaulicht sind zwei LEDs verbaut, welche abwechselnd blinken sollen. Der Sound für das Martinshorn wird über eine mp3 Datei realisiert, welche in der Phoniebox hinterlegt ist.
Sound Martinshorn in Phoniebox hinterlegen
Der abzuspielende Musiktitel wird wie gewohnt über die Weboberfläche der Phoniebox hinterlegt. Im Menü "Card ID" gibt es keine Möglichkeit eine eigene RFID-Nummer einzutippen.
Aus diesem Grund muss folgender Workaround angewendet werden:
- Musikordner "Feuerwehr" einer freien RFID Karte zuordnen
- Verwendete RFID Kartennummer merken, z.B. 00012345
- In den Ordner /home/pi/RPi-Jukebox-RFID/shared/shortcuts wechseln. Dort muss die Datei 00012345 in 00000001 umbenennen
- Die ID 00000001 muss mit der --cardid im Skript "Skript Feuerwehr-Leds-blinken.py" zwingend übereinstimmen
Festlegung der Spezial-Feuerwehr-RFID-Karte in der rfid_trigger_play.conf
Die Datei /home/pi/RPi-Jukebox-RFID/settings/rfid_trigger_play.conf muss um einen neuen Eintrag erweitert werden:
# Feuerwehr Feature fuer Jukebox. Nummer entspricht dem RFID Chip welcher das Feuerwehr Feature ausloesen soll
FEUERWEHR="0000170569"
Hinter der Variable FEUERWEHR steht die feste RFID-Kartennummer welche für die spätere Ansteuerung verwendet werden soll.
Festlegung der Reaktion bei Erkennung der Speial-RFID-Feuerwehr-Karte in der rfid_trigger_play.sh
Die Reaktion auf die spezielle RFID Karte wird in der Datei /home/pi/RPi-Jukebox-RFID/scripts/rfid_trigger_play.sh festgelegt.
Im Abschnitt
# If the input is of 'special' use, don't treat it like a trigger to play audio. # Special uses are for example volume changes, skipping, muting sound.
muss am Ende folgender Eintrag hinzugefügt werden:
$FEUERWEHR)
#Feuerwehr LED Skript starten
python3 /home/pi/Bitbucket_Repository/rpi-skripte-schaltungen/Jukebox-Gehaeuse/Feuerwehr-Leds-blinken.py
;;
Wird die hinter der Variable $FEUERWEHR hinterlegte RFID-Kartennummer erkannt, wird das Skript "Feuerwehr-Leds-blinken.py" gestartet.
Python Skript "Feuerwehr-Leds-blinken.py" für die Ansteuerung
Die eigentliche Logik für die Ansteuerung der LEDs und das parallele Abspielen der Sounddatei erfolgt in dem Python Skript "Feuerwehr-Leds-blinken.py".
Sound Martinshorn abspielen
Mit dem Befehl check_call (...) kann ein beliebiges Skript gestartet werden. Mit dem Aufruf des Skriptes rfid_trigger_play.sh und der Übergabe der cardid wird das Abspielen des entsprechend hinterlegten Musikordners gestartet.
Aufruf im pyhton Skript:
from subprocess import check_call
...
#cardid ist eine virtuelle ID zu welcher es keinen realen Token gibt. Im Ordner /home/pi/RPi-Jukebox-RFID/shared/shortcuts ist in der entsprechenden Datei hinterlegt
#welcher Musikordner abgespielt wird
check_call("/home/pi/RPi-Jukebox-RFID/scripts/rfid_trigger_play.sh --cardid=0000000001",shell=True)
Aktueller Inhalt des Skriptes "Feuerwehr-Leds-blinken.py"
#!/usr/bin/python3
import RPi.GPIO as GPIO
import time
from subprocess import check_call
GPIO.setmode(GPIO.BCM) #Art der Pinnummerierung: BCM - Broadcom Anschlussnummer,
GPIO.setup(14,GPIO.OUT) #Setze BCM14 als Ausgang
GPIO.setup(15,GPIO.OUT) #Setze BCM15 als Ausgang
end_time = time.time() + 60
#cardid ist eine virtuelle ID zu welcher es keinen realen Token gibt. Im Ordner /home/pi/RPi-Jukebox-RFID/shared/shortcuts ist in der entsprechenden Datei hinterlegt
#welcher Musikordner abgespielt wird
check_call("/home/pi/RPi-Jukebox-RFID/scripts/rfid_trigger_play.sh --cardid=0000000001",shell=True)
while time.time() < end_time:
GPIO.output(14,True)
time.sleep(0.400)
GPIO.output(14,False)
time.sleep(0.250)
GPIO.output(15,True)
time.sleep(0.400)
GPIO.output(15,False)
time.sleep(0.250)
Display More