Соединение TCP к мотору сервопривода управления

Я пишу сетевое приложение сокета, используя клиент android и сервер python. Клиентская сторона почти идеально подходит для отправки двух значений «1» и «2». На стороне сервера сервер получит значение, чтобы проверить, если значение равно «1», сервопривод двигателя будет двигаться справа налево или если значение равно 2 двигатель будет двигаться слева направо. Пожалуйста, посмотрите код:

# server.py 
import socket                                         
import RPi.GPIO as IO
import time
IO.setmode(IO.BOARD)
IO.setup(12,IO.OUT)
pwm2=IO.PWM(12,50)
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# get local machine name
host = "192.168.1.10"                             
# bind to the port
s.bind((host, 18050))                                  
# queue up to 5 requests
s.listen(1)
while True:
    print("Listenng  to the client" )
    # establish a connection
    clientsocket,addr = s.accept()      
    print("Got a connection from %s" % str(addr))
    d=int(clientsocket.recv(1024))
    if d==1:
       print(d, "right to left")
       pwm2.start(12)
       time.sleep(3)
       pwm2.stop()
    elif d==2:
       print(d, "left to right") 
       pwm2.start(2)
       time.sleep(3)
       pwm2.stop()
IO.cleanup()     
s.close() 

В реализации всегда происходит странное поведение. Иногда моторы будут двигаться, в то время как в другое время они не. Более того, они будут перемещаться только один раз справа налево и слева направо. Результат таков:

>>
Listenng  to the client
Got a connection from ('192.168.1.9', 1313)
(1, 'right to left')                  # Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1337)
(2, 'left to right')                 # Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1383)
(1, 'right to left')                  # No Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1416)
(2, 'left to right')                    # No Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1445)
(1, 'right to left')                       # No Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1528)
(2, 'left to right')                      # No Movement occurs 
Listenng  to the client
Got a connection from ('192.168.1.9', 1574)
(1, 'right to left')             # No Movement occurs 
Listenng  to the client

Пожалуйста любое предложение ?… Вся идея состоит в том, чтобы управлять сервоприводом, отправляя 1 или 2 из Android-активности. Заранее спасибо за любую помощь, которую вы можете предоставить.

1 ответ

  1. 3 предложения :

    • Не следует принимать подключение в цикле. Вы должны принять только один раз, а затем работать с этим соединением столько, сколько вам нужно.
    • Если вы не возражаете, чтобы ваш сервопривод был включен между двумя вызовами к вашей службе, возможно, вы могли бы избежать запуска / остановки ШИМ-штифт и просто изменить обязанность (функция ChangeDutyCycle (xx))
    • Если вы можете использовать GPIO18 (pin 12) как аппаратный ШИМ. Программное обеспечение работает хорошо, но они используют передачу DMA для достижения этого, что может быть потребляющим ресурсы (я тоже испытал некоторую задержку)