MicroPython的uasyncio模块为何无run函数?ESP8266使用遇问题
问题原因及解决方案
原因分析
你碰到的AttributeError: 'module' object has no attribute 'run',核心原因是ESP8266搭载的MicroPython内置uasyncio版本太旧。
你参考的文档对应的是第三方维护的uasyncio v3版本,这个版本新增了run()、new_event_loop()这类简化API;但ESP8266官方MicroPython固件里的uasyncio还是旧版核心,没有这些高阶封装方法——从你列出的模块属性列表也能验证这一点,只有get_event_loop()这类基础方法。
解决方案
把代码里的asyncio.run()替换成旧版uasyncio的事件循环运行逻辑,修改后的代码如下:
from robot import * import uasyncio as asyncio def main(args): robot = MicroportalRobot("robotName", "serverAddr", 8266) # 获取事件循环实例 loop = asyncio.get_event_loop() # 运行协程直到完成 loop.run_until_complete(robot.main()) if __name__ == "__main__": main([])
如果想长期使用新版uasyncio的特性,还可以尝试两个方向:
- 升级ESP8266的MicroPython固件到最新稳定版,部分新版固件会同步更新内置的uasyncio
- 手动安装第三方uasyncio v3库(注意:ESP8266内存有限,可能存在兼容性或资源不足问题)
内容的提问来源于stack exchange,提问作者Kaki In
相关产品推荐
相关产品推荐

