13.5. MicroPython 工具

MicroPython 项目在提供语言本身的同时,还附带了一套主机端工具链。其中有两个工具对任何在 IDE 之外进行的 OpenMV cam 工作流都很有用;两者都可以通过一条命令从 PyPI 安装,并且都针对摄像头已经暴露出来的同一套 USB 串口 / 文件系统接口工作。

13.5.1. mpremote

mpremote 是 OpenMV IDE 的命令行替代方案。一条命令即可涵盖 IDE 通过其文件浏览器、终端和运行脚本按钮所完成的工作:通过 USB 串口连接摄像头、驱动 REPL、在摄像头文件系统中复制文件进出、在不上传的情况下针对摄像头运行主机端脚本,以及使用 mip 安装第三方软件包:

$ pip install --user mpremote
$ mpremote                          # interactive REPL
$ mpremote cp main.py :             # upload to cam
$ mpremote run local_script.py      # run host script on cam
$ mpremote ls                       # list cam filesystem
$ mpremote mip install aioble       # install package on cam

对于自动化测试台、无界面部署、刷写全新镜像并运行冒烟测试的 CI 脚本,以及任何运行图形界面都显得多余的工作流来说,它都是合适的工具。mpremote 参考 中记录了每一条命令和选项。

13.5.2. mpy-cross

mpy-cross 是一个交叉编译器,它将 .py 源文件转换为可在摄像头上导入的 .mpy 二进制容器。提前编译省去了摄像头在导入时解析源代码的开销,减小了磁盘占用空间,并且是使用 @native@viper 装饰的函数的唯一途径,这类函数需要与摄像头 MCU 架构相匹配的构建:

$ pip install --user mpy-cross
$ mpy-cross foo.py
$ mpremote cp foo.mpy :

对于烘焙进固件镜像的冻结模块以及随固件一同发布的 ROMFS 分区,同一个工具会作为固件构建的一部分自动运行——构建系统在生成 .bin 的过程中会对 scripts/ 下的每个 .py 调用 mpy-cross。当应用程序希望将 .mpy 与固件分开发布,或希望从构建脚本中驱动编译器时,就需要直接调用它。

.mpy 文件参考中的 mpy-cross 部分 介绍了命令行标志、优化级别、-march 矩阵以及 Python 模块入口点。