14.5. 总结

你已经走完了一台摄像头从可用的工作台脚本到出货产品的整个生命周期:

  • 自定义固件构建 —— 开发环境、从源码构建固件镜像、将其刷写到摄像头上,以及当固件端出现问题时,从 VS Code Cortex-Debug 到命令行 gdbrunner 的调试路径。

  • 发布应用程序 —— 通过冻结模块将应用代码烘焙进固件、将资源烘焙进 ROMFS 镜像,以及决定运行时在启动时实际加载某个文件哪一份副本的查找顺序。由此自然形成的分工是:boot.py 用于 REPL 之前的环境设置,main.py 作为应用程序的入口点,冻结的 main.py 作为入口、而 ROMFS 用于存放其他一切。

  • 面向生产的加固 —— 写入到已知路径的 logging 库、每次主循环迭代喂一次的 machine.WDT、将崩溃转化为已记录事件而非复位的顶层 try / except、随着应用在现场数月间不断累积记录而仍能保持文件操作迅速的文件系统卫生处理,以及——当产品有此需要时——闪存读取保护。

  • 进阶内容 —— 为那些需要向网络服务进行身份验证并对其流量加密的摄像头准备的 TLS 证书。

一台出货的摄像头已经具备所有这些:它的应用代码从固件镜像运行,它的看门狗每次主循环迭代都被喂一次,它的日志落在 SD 卡上一个以日期命名的目录里,并且——当产品有此需要时——它的闪存已被锁定以防读取。

14.5.1. 接下来该往哪里走

“生产”是本教程的最后一章。从这里开始,文档分流为参考资料:

  • 库参考 是按字母顺序排列的“这个调用的确切名称是什么”视图,涵盖摄像头所暴露的每一个模块——machineloggingoscsiimageml 等等。

  • 各板速查页 涵盖 OpenMV 产品线中每一款摄像头的具体细节——引脚分布、可挂载的总线、板 ID、外设可用性,以及当应用必须落地到某个特定型号时那些会产生影响的细微差异。

  • 传感器参考页扩展板参考页 涵盖一台摄像头可以搭载的各个图像传感器和附加扩展板——在为某个构建挑选传感器和扩展板时,应用所需要的逐型号规格、引脚分布与注意事项。

  • MicroPython 语言参考 涵盖语言本身——与 CPython 之间的语法差异、当脚本横跨两者时会产生影响的实现细节,以及在 Python 太慢的罕见情形下所需的内联汇编器参考。

本教程是从“我手上有一台新摄像头”到“我已经出货了一款产品”的路径。从这里开始,摄像头只是应用所负责的一个更大系统中的一个组成部分,而后续工作便属于应用自身了。