Kaynağa Gözat

decode payload as json, close the file to apply servo movement

David 8 yıl önce
ebeveyn
işleme
0f43e8d984
1 değiştirilmiş dosya ile 12 ekleme ve 5 silme
  1. 12 5
      camera1/rotate-servo.py

+ 12 - 5
camera1/rotate-servo.py

@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 import paho.mqtt.client as mqtt
 import threading
+import json
 from time import sleep
 from os import path
 
@@ -20,12 +21,14 @@ def on_message(client, userdata, msg):
     if msg.topic == "video/servo1/restart":
         restart_servos()
     if msg.topic == "video/servo1/rotate":
-        payload = msg.payload.decode("utf-8", errors="ignore")
-        servo_arg = payload.split()[0]
         try:
+            payload = json.loads(msg.payload.decode("utf-8", errors="ignore"))
+            servo_arg = payload.split()[0]
             offset = int(payload.split()[1])
-        except:
+        except Exception as e:
+            print("Exception", e)
             return
+        print(servo_arg, offset)
         servo = -1
 
         if servo_arg.lower() == "x":
@@ -48,6 +51,7 @@ client.connect("192.168.2.123", 1883, 60)
 
 
 def update_servo(servo, offset):
+    print("rotating", servo, offset)
     filename = "/tmp/servo_%s" % servo
     old_val = ""
 
@@ -81,10 +85,11 @@ def update_servo(servo, offset):
 
     servoblaster = open("/dev/servoblaster", "w")
     for _ in range(0, steps):
-        # print("%d=%sus" % ( servo, delta ))
+        print("%d=%sus" % ( servo, delta ))
         print("%d=%sus" % (servo, delta), file=servoblaster)
         servoblaster.flush()
         sleep(0.12)
+    servoblaster.close()
 
 
 def restart_servos():
@@ -101,7 +106,9 @@ def restart_servos():
     servo = 1
     percentage = 61
     filename = "/tmp/servo_%d" % servo
-    print("%d=%d%%" % (servo, percentage), file=servoblaster)
+    s = "%d=%d%%" % (servo, percentage)
+    print(s)
+    print(s, file=servoblaster)
     print(int((maxv-minv) * (percentage/100))+minv, file=open(filename, "w"))
 
     servoblaster.flush()