Raspberry Pi上的Tornado可以使用WebSocket以及监控串行端口Arduino通信
本质上,我希望实现的是一个基于画布的web界面,通过。用户导航到Raspberry Pi上的Tornado可以使用WebSocket以及监控串行端口Arduino通信,websocket,arduino,tornado,raspberry-pi,Websocket,Arduino,Tornado,Raspberry Pi,本质上,我希望实现的是一个基于画布的web界面,通过。用户导航到raspberrypi:8080,显示画布。然后,在移动滑块时,将向Raspberry Pi上的服务器发送一条websocket消息。Tornado然后向Arduino发送一条串行消息,该消息会更改。到目前为止,我已经能够在开发人员的文档帮助下完成这项工作 然而,从树莓皮到阿杜伊诺之间的交流只是单向的。我希望Tornado也能监视串口,以便将任何传感器数据返回到前端。这就是我不确定如何继续的地方。我可以使用它来完成类似的事情,它可以
raspberrypi:8080
,显示画布。然后,在移动滑块时,将向Raspberry Pi上的服务器发送一条websocket消息。Tornado然后向Arduino发送一条串行消息,该消息会更改。到目前为止,我已经能够在开发人员的文档帮助下完成这项工作
然而,从树莓皮到阿杜伊诺之间的交流只是单向的。我希望Tornado也能监视串口,以便将任何传感器数据返回到前端。这就是我不确定如何继续的地方。我可以使用它来完成类似的事情,它可以异步监视websocket消息和串行消息
是否应该生成一个异步进程来持续监视端口?我已经看到了这种解决方案的几种选择
tornado.gen.Task
,但是对于单个HTTP请求,而不是常量串行数据tornado.ioloop.PeriodicCallback
我可以设置为每毫秒检查一次串行数据,但这听起来像是很大的开销导入tornado.httpserver
导入tornado.ioloop
导入tornado.options
导入tornado.web
导入tornado.websocket
从tornado.options导入,定义选项
定义(“端口”,默认值=8080,help=“在给定端口上运行”,type=int)
类IndexHandler(tornado.web.RequestHandler):
def get(自我):
self.render('index.html')
类WebSocketHandler(tornado.websocket.WebSocketHandler):
def打开(自):
打印“新连接”
自我书写信息(“已连接”)
def on_消息(自我,消息):
打印“已收到%s”消息“%s”消息
self.write_消息('收到消息%s'%message〕)
def on_关闭(自身):
打印“连接已关闭”
如果名称=“\uuuuu main\uuuuuuuu”:
tornado.options.parse_命令行()
app=tornado.web.Application(
处理者=[
(r“/”,IndexHandler),
(r“/ws”,WebSocketHandler)
]
)
httpServer=tornado.httpServer.httpServer(应用程序)
httpServer.listen(options.port)
打印“侦听端口:”,options.port
tornado.ioloop.ioloop.instance().start()
这是我的2美分。我支持Python->websockets客户机路线。Tornado服务器软件是为处理web客户端请求而制作和调试的。让它做它的工作。任何将其硬塞进另一个角色(如监视本地硬件)的尝试都会导致比(a)设计用于完成此类工作(如C/C++程序)或(b)足够灵活以相当小的开销处理此类任务(如Python脚本)的开销更大的开销
相关经验:已为树莓皮和Arduino编程。当地机器人俱乐部的官员。我想出了一个解决方案,其中包括使用Python的多处理库。我刚刚写了一篇详细的博文:
希望其他人觉得有用…谢谢你的建议。我同意最好将串行com保存在单独的程序中。如果你好奇的话,可以在答案中看到我的最终解决方案。好主意+1!你的链接已失效:/archive.org的副本在这里