MQBoard-通过MQTT管理的MicroPython的微框架
[复制链接]
本帖最后由 dcexpert 于 2020-6-24 09:02 编辑
作者的简介:
我的项目是在基础设施方面,微控制器在某个地方工作很长一段时间,有时是十年。同时,这些项目中的很多都是实验性质,即使在“部署”和“投入生产”之后,我也会不断调整。所以我需要一个健壮的框架,让我可以远程查看板上发生的事情,有时执行交互式故障排除,并更新软件。并且有很高的可靠性,即使我犯了错误,我也不会失去与板的连接或管理权限。在这个上下文中,需要MQBoard。
MQBoard包含以下内容:
- 使用新uasyncio的MQTT客户机库,处理断开和重新传输,并支持OTA升级所需的数据速率(1.5MB传输…)
- 一组python文件,用于启动一个板、在出错时提供安全模式、通过MQTT登录、提供REPL访问和启动模块化应用程序
- 一个MQ REPL任务,它提供对flash文件系统、REPL和OTA的访问,并在MQTT上进行升级
- 具有类似于pyboard.py文件,加上OTA更新、日志查看和文件同步
- 一个简单的blinky演示应用程序
现在MQBoard只在esp32上工作。我想让它在PYBD上工作,但还没有时间。它在esp8266上不能运行,因为没有足够的内存。
目标和特点
所有内容都是针对以下系统设计的:
- 运行在某个远程位置,需要从远程进行管理,即无需将它们插入某些计算机的USB端口
- 使用单个加密连接,特别是与代理的MQTT连接。
通过使用单个连接,只需要一组TLS缓冲区(每个连接需要20KB!),并且没有要维护的证书。攻击者也没有针对性的开放端口。
上述目标使以下功能合乎需要:
- 一切都必须为保持24x7全天候运行并从故障中恢复而设计。
- REPL访问:能够通过MQTT访问板上的repl,以便运行诊断,执行升级或进行故障排除。
- OTA更新:能够通过MQTT发送MicroPython固件更新。
- 模块:能够轻松添加或更新功能模块,并且对现有模块的影响最小。
- 理想情况下,远程日志记录通常是通过MQTT打印到串行控制台的所有内容。
- 将崩溃日志记录到某些本地持久性存储中,以便在板复位后可以远程分析崩溃。
- 连续崩溃后的看门狗定时器和安全模式,以确保开发板始终处于启动状态,即使应用程序出现异常,也可以通过MQTT对其进行访问。
当前,除了崩溃日志到本地存储之外,所有这些功能都已实现。
问题
主要的问题是低功耗操作。目前没有考虑电源,尤其是没有优化启动时间以实现电池的定期唤醒操作。当前未集成OTA固件升级和安全模式,这意味着OTA升级需要比应有的更多的关注和思考。mqtt_async实现尝试与Peter Hinch的兼容,现在是废弃mqtt_as的时机了,以便可以直接集成board/mqtt.py功能,从而可以分离Wifi的管理。
项目仓库
|