gpt4 book ai didi

websocket - Raspberry Pi 上的 Tornado 使用 websockets 以及监控串口 Arduino 通信

转载 作者:行者123 更新时间:2023-12-03 14:59:26 25 4
gpt4 key购买 nike

本质上,我希望实现的是一个基于 Canvas 的 Web 界面来控制 Arduino ,通过 Raspberry Pi . use case是用户导航到raspberrypi:8080显示一个 Canvas 。然后在移动 slider 时,会向 Tornado 发送一条 websocket 消息。树莓派上的服务器。 Tornado 然后向 Arduino 发送一条串行消息,更改 RGB LED 的值.到目前为止一切顺利,我已经能够在开发人员的文档的帮助下做到这一点,Raspberry Pi Android HTML5 Realtime Servo Control .

但是,从 Raspberry Pi 到 Arduino 的通信只是单向的。我希望 Tornado 也可以监视串行端口,以将任何传感器数据返回到前端。这是我不确定如何进行的地方。我能够使用 Node.js 完成类似的事情,它异步监视 websocket 消息和串行消息。

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

  • 有人建议tornado.gen.Task ,但对于单个 HTTP 请求,而不是对于恒定的串行数据。
  • tornado.ioloop.PeriodicCallback我可以设置为每毫秒检查一次串行数据,但这听起来像是很多开销。
  • 我还看到了单独的工具,例如 Swirl . (根据 it's Github repo,漩涡已过时)

  • 或者我应该设置一个单独的 Python监视串行然后与 Tornado 应用程序通信的应用程序可以理解如下?
  • 使用 websocket client 的 websocket 消息
  • ZeroMQ(工作示例:pyzmq / examples / eventloop / web.py)

  • 所以有很多选择......有哪些建议和一些理由可以尝试或避免上述任何选项?

    这是我拥有和需要添加串行监控的内容:

    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    import tornado.websocket

    from tornado.options import define, options
    define("port", default=8080, help="run on the given port", type=int)

    class IndexHandler(tornado.web.RequestHandler):
    def get(self):
    self.render('index.html')

    class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
    print 'new connection'
    self.write_message("connected")

    def on_message(self, message):
    print 'message received %s' % message
    self.write_message('message received %s' % message)

    def on_close(self):
    print 'connection closed'

    if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(
    handlers=[
    (r"/", IndexHandler),
    (r"/ws", WebSocketHandler)
    ]
    )
    httpServer = tornado.httpserver.HTTPServer(app)
    httpServer.listen(options.port)
    print "Listening on port:", options.port
    tornado.ioloop.IOLoop.instance().start()

    最佳答案

    这是我的 2 美分。我会提倡 Python -> websockets-client 路线。 Tornado 服务器软件经过精心设计和调整以处理 Web 客户端请求。让它完成它的工作。任何将其硬塞到另一个角色(如监控本地硬件)的尝试都会导致比(a)设计用于执行此类工作(如 C/C++ 程序)或(b)足够灵活以处理的东西更多的开销这样的任务开销很小(如 Python 脚本)。

    相关经验:曾为 Raspberry Pi 和 Arduino 编程。本地机器人俱乐部的官员。

    关于websocket - Raspberry Pi 上的 Tornado 使用 websockets 以及监控串口 Arduino 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186925/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com