EC600M 程序部署与调试:从烧录到串口排错

一、代码怎么跑到板子上

QuecPython 应用是 .py 脚本,不需要编译链接。部署方式是:

  1. 用官方工具 QPYcom 把脚本下载到模组的 /usr 分区
  2. 在串口 REPL 里执行 example.exec(‘/usr/_main.py’) 启动

底层固件是厂商预编译好的,我们只写应用层。

二、坑 1:自定义模块 import 失败

把多个 .py 一起烧进 /usr,主程序 import 时报 ImportError。

原因:直接 exec 时,sys.path 里可能不含 /usr。解决:

import sys
if "/usr" not in sys.path:
    sys.path.insert(0, "/usr")

所有自定义模块的 import 都要放在这行之后。

三、坑 2:模块命名冲突,import 拿到的是别的库

自定义模块的文件名如果和内置库重名,import 到的可能不是你写的那个文件。

规避方法:给业务模块起不会撞名的名字(比如相机模块不要叫 camera),必要时加后缀区分。

四、坑 3:别让代码一上电就自动跑

MicroPython 上电会约定自动执行 main.py。调试期间如果不想一上电就跑主流程,就不要把入口命名为 main.py(例如改用 _main.py),改由手动 exec 启动。

这样做的好处:烧完代码不会立刻跑起来,可以先检查文件、再手动运行,避免一上电就进业务逻辑而没法调试。

五、坑 4:烧录前先做语法校验

设备上排查语法错误成本高,先在 PC 上过一遍:

python -m py_compile _main.py voice.py cloud.py camera_srv.py

注意 py_compile 会在本地生成 pycache,提交或烧录前清掉。

六、调试手段

主要靠串口日志。几个建议:

  • 关键节点打一行事件日志即可,不要每帧都打,否则刷屏反而看不清。
  • 诊断性的内存打印(如 gc.mem_free())只在排查时加,事后删掉。
  • 异常一定要带 repr(e),否则只看到"失败"两个字。
  • 把"每帧级"的日志删掉,只留"事件级"的,一条正常对话就只有寥寥几行。

七、小结

  • 部署等于下载到 /usr 加手动 exec,没有编译链接。
  • 先修 sys.path,再 import。
  • 模块名别撞内置库。
  • 入口别叫 main.py,防止上电自动跑。
  • 烧录前 py_compile,日志要"少而准"。

感谢分享这段 EC600M 部署与调试记录,对 sys.path、模块命名、入口命名、烧录前语法校验等问题的描述清晰,对遇到同类问题的伙伴很有参考价值。

本回答仅供参考。