Hallo zusammen,
seit einigen Tagen versuche ich mich an einem neuen Pi-Porjekt. Die Idee: Bewegungsdetektion über einen PIR-Sensor mit anschließender, zufallsbasierter Audiodateiwiedergabe für das Badezimmer. Da es mein zweites Projekt überhaupt ist, bin ich noch Neuling auf dem Gebiet. Viel gelernt habe ich durch Problemstellungen und anschließender Lösung durch Forenbeiträge. Nun sehe ich mich zum ersten Mal "gezwungen", selbst einen Beitrag zu verfassen, da ich keine Hilfestellung zu meinem Thema mehr finden kann.
What I've done so far....
-den Pi Model B+ grundlegend aufgesetzt
-remote-Steuerung mittels Putty und VNC Viewer
-Python 2.7 und 3.7 installiert, alle hier behandelten Skripte sind in der Python 3.7 Syntax geschrieben
-kleine Aktivbox am Audiojack vom Pi
-PIR Sensor am Pi verschaltet... das dazu passende Skript funktioniert!
-ein Python-Skript (randommusic.py) geschrieben. Funktionsweise: Programm liest einen Ordner aus, wählt eine zufallsbasierte (Musik)Datei, anschließende Ausgabe mittels ffplay-Befehl (FFMPEG-Modul)
Nun etwas genauer. Im PIR Skript habe ich an der Stelle, wo der Sensor eine Bewegung detektiert einen Subprocess eingebuden. Dieser Subprocess ruft eine Shell-Datei auf worin das Audio Programm gestartet wird.
Mit einem einzelnen Pfad zur Musikdatei im Shell Skript funktioniert alles wunderbar: Das PIR-Skript wird gestartet, eine Bewegung wird erkannt, die Shell aus dem Subprocess wird aufgerufen und die hinterlegt Audiodatei wird abgespielt. Super!
Nun zum Problem: Hinterlege ich in dem Shell Skript nun den Aufruf das zufallsbasierte Audioprogramm randommusic.py zu starten, die Zwischenschritte kann ich einsehen und es funktioniert alles wie es soll, nur bekomme ich keine Audioausgabe über meine Box
Zur Info: Starte ich randommusic.py in der Python Umgebung Thonny via VNC, funktioniert alles inklusive anschließender Audioausgabe.
Starte ich randommusic.py via Putty wird das Programm ausgefürt, am Ende die Info "Speicherzugriffsfehler".
Dieser Fehler ist schätze ich der Grund, weshalb alles funktioniert, am Ende aber kein Audio ausgegeben wird.
Wie bereits gesagt, für diesen Fehler finde ich im Netz wenig bis gar keine Lösungsvorschläge. Hat jemand eine Idee?
Ich führe nun noch kurz die jeweiligen Skripte auf:
Danke
LaZZeR
#!/usr/bin/python3
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# pir_1.py
# Detect movement using a PIR module
#
# Author : Matt Hawkins
# Date : 21/01/2013
# Import required Python libraries
import RPi.GPIO as GPIO
import time
import subprocess
# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)
# Define GPIO to use on Pi
GPIO_PIR = 7
print "PIR Module Test (CTRL-C to exit)"
# Set pin as input
GPIO.setup(GPIO_PIR,GPIO.IN) # Echo
Current_State = 0
Previous_State = 0
try:
print "Waiting for PIR to settle ..."
# Loop until PIR output is 0
while GPIO.input(GPIO_PIR)==1:
Current_State = 0
print " Ready"
# Loop until users quits with CTRL-C
while True :
# Read PIR state
Current_State = GPIO.input(GPIO_PIR)
if Current_State==1 and Previous_State==0:
# PIR is triggered
print " Motion detected!"
subprocess.run(['/home/pi/playsound.sh'])
# Record previous state
Previous_State=1
elif Current_State==0 and Previous_State==1:
# PIR has returned to ready state
print " Ready"
Previous_State=0
# Wait for 10 milliseconds
time.sleep(0.01)
except KeyboardInterrupt:
print " Quit"
# Reset GPIO settings
GPIO.cleanup()
Alles anzeigen
#########################################################################
# Programm "randommusic.py" liest (Audio)Dateien aus Verzeichnis #
# '/home/pi/Music/' aus und wählt zufallsbasiert eine Datei aus. #
# Anschließende Wiedergabe der Datei. #
#########################################################################
#Begin Script with Shebang line
#!/usr/bin/python
#Einbinden Modul "random"
#Einbinden Modul "os"
import random
import os
#import sys
#import MediaPlayer
from ffpyplayer.player import MediaPlayer
#Ordnerpfad der Musik wird festgelegt
Playlist_Ordner = '/home/pi/Music/'
#Alle Dateien der Playlist auslesen
Playlist = os.listdir(Playlist_Ordner)
print ("Files in Playlist: ")
print (Playlist)
#Ein zufälliges Lied wird ausgewählt
print ("\n")
print ("Chose follwing file to play: ")
Song = random.choice(Playlist)
print (Song)
Song_path = "/home/pi/Music/" + str(Song)
#print (Song_path)
print ("\n")
print ("Now playing: "+ str(Song))
player = MediaPlayer(Song_path)
#exit(0)
Alles anzeigen