我从事 Web 应用程序开发人员已有好几年了,现在正在使用 Python 和 Robotics。
我已经将 Python Tornado 设置为基于 javascript websocket 命令运行。这很棒,可以移动电机,打开 LED。不是问题。
我想做的2件事。
1) 使 LED 闪烁
2) 使用超声波范围传感器,停止 FORWARD 动作 IF range < X
我知道如何在自己内部做到这两点。
但是,我拥有我的 python 的方式如下
WS.py
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import time
# My Over python module
import tank
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'New connection was opened'
self.write_message("Welcome to my websocket!")
tank.init()
def on_message(self, message):
print 'Incoming message:', message
tank.run(message)
self.write_message("You said: " + message)
def on_close(self):
tank.end()
print 'Connection was closed...'
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/ws', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
TANK.py import RPi.GPIO as gpio import time
def init():
#Setting up all my pins, Not going to add all
def moveForward():
#open GPIO pins to move motors forward
def stop():
# close all GPIO pins to stop motors
def run(action):
# the method called by the IOLoop
if action == 'go':
moveForward()
elif action == 'stop':
stop()
else:
print "Oops, i cocked up"
注意:tank.py 是一个摘要,而不是实际代码。
我的 JS 在 Mouse Down 上工作,用 go、mouse up、call stop 调用我的 python WS
正如我所说,工作正常
但是如果我在 moveForward() 方法上添加一个 while 循环来计算范围并在关闭时停止,那么我的 WS 将被绑定并且不会监听 STOP
同样,如果我运行一个打开 LED、休眠、关闭、休眠的方法,我的 WS 将无法收听任何命令。