commit e80cd6a3dd3ebd4065772784c786d69f8d2b6526 Author: zecktos <56479813+zecktos@users.noreply.github.com> Date: Thu Jun 17 18:41:41 2021 +0200 init repo diff --git a/README.md b/README.md new file mode 100644 index 0000000..9765f74 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# piPlayer +video player and motion detector for pi zero diff --git a/piplayer.service b/piplayer.service new file mode 100644 index 0000000..fd8f2c2 --- /dev/null +++ b/piplayer.service @@ -0,0 +1,14 @@ + [Unit] + Description=run osc video player + After=multi-user.target + + [Service] + Type=simple + Restart=always + User=root + ExecStart=/usr/bin/bash /home/pi/piPlayer/runPiPlayer.sh + + [Install] + WantedBy=multi-user.target + + diff --git a/runPiPlayer.sh b/runPiPlayer.sh new file mode 100755 index 0000000..b0a6802 --- /dev/null +++ b/runPiPlayer.sh @@ -0,0 +1,4 @@ +#! /usr/bin/bash + +cd /home/pi/piPlayer +python3 src/piPlayer.py diff --git a/src/piPlayer.py b/src/piPlayer.py new file mode 100644 index 0000000..f5dae5c --- /dev/null +++ b/src/piPlayer.py @@ -0,0 +1,46 @@ +from pythonosc import dispatcher +from pythonosc import osc_server +from pythonosc import udp_client +from playerClass import videoPlayer +from time import sleep +import RPi.GPIO as GPIO +import threading + +IP = "0.0.0.0" +PORT = 6060 +OSC_ADDR = "" +REMOTE_IP = "192.168.21.232" +REMOTE_PORT = 3030 +SENSOR_PIN = 4 +OSC_SENSOR_ADDR = "/blumen/movement" + +def readSensor(): + GPIO.setmode(GPIO.BCM) + GPIO.setup(SENSOR_PIN,GPIO.IN) + client = udp_client.SimpleUDPClient(REMOTE_IP, REMOTE_PORT) + pinState = GPIO.input(SENSOR_PIN) + while True: + pinStateNew = GPIO.input(SENSOR_PIN) + if pinStateNew != pinState : + client.send_message(OSC_SENSOR_ADDR,pinStateNew) + pinState = pinStateNew + sleep(0.2) + + +if __name__ == "__main__": + thread = threading.Thread(target=readSensor) + thread.daemon = True + thread.start() + player = videoPlayer() + dispatcher = dispatcher.Dispatcher() + dispatcher.map(OSC_ADDR + "/play", player.play) + dispatcher.map(OSC_ADDR + "/togglePause", player.togglePause) + dispatcher.map(OSC_ADDR + "/pause", player.setPause) + dispatcher.map(OSC_ADDR + "/stop", player.stop) + dispatcher.map(OSC_ADDR + "/loop", player.setLoop) + dispatcher.map(OSC_ADDR + "/setVolume", player.setVolume) + server = osc_server.ThreadingOSCUDPServer((IP, PORT), dispatcher) + print("Serving on {}".format(server.server_address)) + server.serve_forever() + + diff --git a/src/playerClass.py b/src/playerClass.py new file mode 100644 index 0000000..1b84e56 --- /dev/null +++ b/src/playerClass.py @@ -0,0 +1,47 @@ +import os +import mplayer +import subprocess +import time + + +class videoPlayer: + p = mplayer.Player() + loop = False + + def __init__(self): + os.environ["SDL_VIDEODRIVER"] = "fbcon" + os.environ["SDL_FBDEV"] = "/dev/fb1" + + self.p = mplayer.Player(args=("-vo sdl")) + self.p.framedropping = 1 + + def play(self, oscAddr, filePath): + source = "".join(filePath) + print("play", source) + try: + self.p.loadfile(source) + except Exception as e: + print("could not load video") + print(e) + + def togglePause(self, oscAddr=None, args=None): + self.p.pause() + print("togglePause") + + def setPause(self, oscAddr, args): + print("pause", args) + if bool(args) != self.p.paused : + self.p.pause() + + def stop(self, oscAddr=None, args=None): + self.p.pause() + time.sleep(0.5) + subprocess.run(["dd", "if=/dev/zero", "of=/dev/fb1"]) + + def setLoop(self, oscAddr, args): + print("loop", args) + self.p.loop = int(args) + + def setVolume(self, oscAddr, args): + print("setVolume", args) + self.p.volume = float(args)