Raspberry Pi上的Tornado可以使用WebSocket以及监控串行端口Arduino通信

Raspberry Pi上的Tornado可以使用WebSocket以及监控串行端口Arduino通信,websocket,arduino,tornado,raspberry-pi,Websocket,Arduino,Tornado,Raspberry Pi,本质上,我希望实现的是一个基于画布的web界面,通过。用户导航到raspberrypi:8080,显示画布。然后,在移动滑块时,将向Raspberry Pi上的服务器发送一条websocket消息。Tornado然后向Arduino发送一条串行消息,该消息会更改。到目前为止,我已经能够在开发人员的文档帮助下完成这项工作 然而,从树莓皮到阿杜伊诺之间的交流只是单向的。我希望Tornado也能监视串口,以便将任何传感器数据返回到前端。这就是我不确定如何继续的地方。我可以使用它来完成类似的事情,它可以

本质上,我希望实现的是一个基于画布的web界面,通过。用户导航到
raspberrypi:8080
,显示画布。然后,在移动滑块时,将向Raspberry Pi上的服务器发送一条websocket消息。Tornado然后向Arduino发送一条串行消息,该消息会更改。到目前为止,我已经能够在开发人员的文档帮助下完成这项工作

然而,从树莓皮到阿杜伊诺之间的交流只是单向的。我希望Tornado也能监视串口,以便将任何传感器数据返回到前端。这就是我不确定如何继续的地方。我可以使用它来完成类似的事情,它可以异步监视websocket消息和串行消息

是否应该生成一个异步进程来持续监视端口?我已经看到了这种解决方案的几种选择

  • 有些人建议使用
    tornado.gen.Task
    ,但是对于单个HTTP请求,而不是常量串行数据
  • tornado.ioloop.PeriodicCallback
    我可以设置为每毫秒检查一次串行数据,但这听起来像是很大的开销
  • 我还看到了单独的工具,例如。(漩涡已过时,根据)
  • 或者我应该设置一个单独的应用程序来监视串行数据,然后通过它可以理解的东西与Tornado应用程序通信,如下面所示

  • 使用
  • ZeroMQ(工作示例:)
  • 所以有很多选择。。。尝试或避免上述任何选择的一些建议和理由是什么

    以下是我所拥有并需要添加串行监控的内容:

    导入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的副本在这里