python - 从网络控制机器人
问题描述
我正在尝试让 RPi3 机器人接受来自 Web 和触摸屏/键盘界面的命令。我有一个处理键盘的脚本,我正在寻找我在 Python 中拥有的当前脚本以扩展以接受来自网络的实时输入。以及试图弄清楚如何将数据发送到脚本。
更多细节如下,但这是基本问题。
我使用树莓派和 3 个控制直流电机和伺服系统的 arduino 来创建机器人,以使机器人移动。该程序是用 Python 编写的,并从命令行运行。运行时:
- 查询 Raspberry 上的活动串口
- 打开每个可用端口
- 向接收方 arduino 发送一个整数
- arduino 以识别整数响应,因此 RPI 可以命名端口
- 然后脚本等待用户输入,如“转发”
- 命令被翻译并发送到正确的端口
- 机器人移动
这一切都很完美。现在我想扩展它。我想保持这个功能完好无损并添加一个网络界面,这样我就可以从任何地方控制它。我尝试了几种不同的方法,但都没有成功。我已经安装了 apache,并且可以毫无问题地为页面提供服务,我可以获取页面上的数据,但我无法弄清楚如何让网页将数据发送到正在运行的 arduino 脚本。我的问题源于机器人控制脚本需要独立于网页运行。我现在仍然希望从键盘保持相同的输入,但我也希望它接受来自网页的数据。如果我每次都从网页调用机器人控制器,则每次都需要重新建立端口连接,这最多需要 20 秒...
我在想,如果我创建一个监听脚本,我可以让网站调用监听器,该监听器只会运行以接收来自网络的数据并将其传递给机器人控制器并返回。但我不确定如何做到这一点,或者这是否是最好的方法。
我查看了 websockets、CGI/wsgi、Flask、编写文件和 JSON,但我似乎无法将它们全部串起来。
如果这不是在正确的地方或之前已经回答过,请提前致谢并道歉。此外,我没有包含任何代码,因为唯一可靠的代码是机器人控制器。我希望有一些真正专业知识的人可以帮助我解开这个问题。
在此先感谢肯V
解决方案
我会说 Flask 是你最好的选择。如何使用它的一个简单示例:
from my_robot_stuff import move_forward
@app.route('/move_forward')
def move_forward_flask():
move_forward()
return redirect('/')
然后,您的 html 将有一个按钮,指示向前移动,指向 mysite.com/move_forward。flask 会处理它,运行代码,然后重定向回根目录。
推荐阅读
- tensorflow - doc_controls 没有属性“可继承的标头”
- reactjs - 如何在反应三纤维画布内添加 jsx 组件?
- kubernetes - 如何使用 kubectl 删除超过 24 小时的机密?
- javascript - clearInterval 不清除函数内部的 setInterval
- javascript - 如何使用 javascript 将商品添加到购物车?
- c# - Microsoft 通用主机应用运行时配置:我真的需要在我的代码库中喷洒“IOptions<>”吗?
- node.js - 如何docker化复合节点js项目
- r - 有谁知道如何让我的代码运行得更快?
- git - 通过 SSH 连接 github 返回权限被拒绝错误
- ios - 在 UserDefaults 的数组中更改字典中的值