Raspberry pi 控制伺服电机的TCP连接

Raspberry pi 控制伺服电机的TCP连接,raspberry-pi,Raspberry Pi,我正在使用android客户端和python服务器编写一个套接字网络应用程序。客户端几乎可以完美地发送两个值“1”和“2”。在服务器端,服务器将接收值,以检查值是否等于“1”,电机伺服将从右向左移动,或者如果值等于2,电机将从左向右移动。请看代码: # server.py import socket import RPi.GPIO as IO import time IO.setmode(IO.BOARD) IO

我正在使用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
有什么建议吗?。。。整个想法是通过从android activity发送1或2来控制伺服。提前感谢您提供的任何帮助。

3建议:

  • 您不应该接受循环中的连接。您最好只接受一次,然后在需要时使用此连接
  • 如果您不介意在两次呼叫服务之间打开伺服,也许您可以避免启动/停止PWM引脚,只需更改占空比(功能更改DutyCycle(xx))
  • 如果您可以使用GPIO18(引脚12),因为它是硬件PWM。软件的工作很好,但他们使用DMA传输来实现这一点,这可能会消耗资源(我也经历了一些延迟)

非常感谢。我非常感谢你的帮助。第二个建议是我所寻求的。竖起大拇指!