/ / PIR-Sensor mit Raspberry Pi - Python, Himbeer-Pi

PIR-Sensor mit Raspberry Pi - Python, Himbeer-Pi

Mein Projekt ist es, die Lesung aus dem PIR zu nehmenSensor und spielen Sie ein Lied, wenn die Person vor dem Sensor ist, aber ich kann die Logik hinter diesem Code, den ich online fand, nicht verstehen und habe versucht, es zu ändern.

Was ich tun muss, ist:

  1. Wie mache ich das, omxp.poll () funktioniert nicht :(

Edit: Jetzt stoppt es, aber gibt es eine Möglichkeit, den Prozess zu wiederholen, und gibt es eine Möglichkeit, den Skriptspeicher effizient zu machen

Hier ist der Code: (aktualisiert)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#from subprocess import Popen
from omxplayer import OMXPlayer
import RPi.GPIO as GPIO
import time
import subprocess

GPIO.setmode(GPIO.BCM)
PIR_PIN = 7
GPIO.setup(PIR_PIN, GPIO.IN)

song = OMXPlayer("/home/pi/5Seconds.mp3")

try:
print ("Pir Module Test (CTRL+C to exit)")
time.sleep(2)
print("Ready")
active = False

while  True:
time.sleep(2)
if GPIO.input(PIR_PIN):
time.sleep(1)
print("Motion detected")
if not active:
active = True
print("Music started")
song.play()
time.sleep(10)

elif active:
print("No motion detected, stop the music")
song.pause()
song.can_control(song)
active = False

if active and song.poll() != None:  # detect completion to allow another start
print("Music finished")
active = False


except KeyboardInterrupt:
print ("Quit")
GPIO.cleanup()

Antworten:

1 für die Antwort № 1

Versuchen Sie Folgendes auf der Grundlage Ihres ursprünglichen Codes: Ich habe ein paar kleinere Änderungen an der Funktionsweise Ihres Skripts vorgenommen:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from subprocess import Popen
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
PIR_PIN = 7
GPIO.setup(PIR_PIN, GPIO.IN)

song_path = "/home/pi/Hillsong.mp3"

try:
print ("Pir Module Test (CTRL+C to exit)")
time.sleep(2)
print("Ready")
active = False

while  True:
if GPIO.input(PIR_PIN):
print("Motion detected")
if not active:
active = True
print("Music started")
omxp = Popen(["omxplayer", song_path])
elif active:
print("No motion detected, stop the music")
omxp.terminate()
active = False

if active and omxp.poll() != None:  # detect completion to allow another start
print("Music finished")
active = False

time.sleep(5)

except KeyboardInterrupt:
print ("Quit")
GPIO.cleanup()

Hinweis:

  1. while True bedeutet Schleife für immer, als solche die time.sleep(10) Es würde niemals ausgeführt werden.
  2. while False wird nie ausführen, was drin ist, also omxp.terminate() würde nie ausgeführt werden.
  3. Verwenden Sie eine Variable active um anzuzeigen, ob der Player läuft, um Mehrfachstarts zu vermeiden.

Ich habe kein Pi zur Hand, also wurde es nicht getestet.