v4.1.0

v4.1.0 带来了对 Arduino Nano RP2040 Connect / Raspberry Pi Pico 的完整支持(WiFi、蓝牙、摄像头捕获、跳转至引导加载程序)、直接的 JPEG 图像解码、冻结的 urequests HTTP 客户端、OV7670 传感器支持以及标准化的传感器错误报告。WiFi API 和传感器异常发生了变化——请阅读下方的重大变更。

亮点

  • RP2 开发板——Arduino Nano RP2040 Connect / Pico 获得了 WiFi(NINA-W10)、蓝牙(NimBLE)、摄像头/DCMI 捕获以及跳转至引导加载程序的能力。

  • JPEG 解码——图像操作现在可以直接接受压缩的 JPEG 图像。

  • urequests HTTP 客户端被冻结进固件。

  • OV7670 摄像头传感器支持。

  • 重大变更: NINA/RP2 WiFi API 经过了重构,多个传感器错误现在会抛出 RuntimeError——参见重大变更。

新功能

  • Arduino Nano RP2040 Connect / Raspberry Pi Pico——通过 NINA-W10 network 驱动实现 WiFi、蓝牙/NimBLE、摄像头捕获(DCMI PIO 程序)以及跳转至引导加载程序命令。

  • JPEG 图像解码——find_apriltags()lcd.display()tv.display() 及相关图像操作现在可以直接接受压缩的 JPEG 图像(解码为二进制/灰度/RGB565)。

  • urequests——HTTP 客户端(GET/POST/PUT/...)现在被冻结进 OpenMV 4 / 4 Plus / Portenta / Nicla,并附带一个 http_post.py 示例。

  • ble_advertising 辅助库,被冻结进 Nano RP2040 Connect。

  • 主机/调试——pyopenmv.reset_to_bl() 以及一个新的 USBDBG_SYS_RESET_TO_BL(0x0E)命令,用于复位进入引导加载程序;在 Arduino Nano 33 BLE Sense 上跳转至引导加载程序。

  • OV7670——新增 OV7670 摄像头传感器支持,可在 OpenMV 4 上选用。

其他变更与改进

  • RP2 UDP 套接字在未绑定使用时会自动绑定到一个临时端口;捆绑的 MicroPython 子模块已更新。

错误修复

网络:

  • 修复了 NINA WiFi 套接字的 accept/close/send/recv/bind 处理及操作超时问题,以及一个可能损坏 IDE 输出的 RP2 调试文本缓冲区竞态问题。

摄像头与系统:

  • 修复了 HM01B0 复位、OpenMV H7 上传感器扫描失败后摄像头 I2C 总线卡死、H7 ULPI 在 USB 断开时进入低功耗、H7 ADC 引脚生成,以及 Portenta 摄像头引脚分布 / 扩展板 SPI-CS 等问题。

硬件与开发板支持

  • Arduino Nano RP2040 Connect / Raspberry Pi Pico——WiFi、蓝牙、摄像头、更大的闪存文件系统、MSC 引导加载程序。

  • OV7670 摄像头传感器(OpenMV 4)。

  • Arduino Portenta H7——扩展接口 I2C4、额外的 PWM/时钟引脚、OV7725 / MT9V034 传感器。

重大 API 变更

v4.0.2 与 v4.1.0 之间面向用户可见的 API 变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

每项变更都标注了其影响:

  • minor——影响范围窄的 API;仅影响使用过它的脚本。

  • behavior——API 相同但结果不同;请重新检查已调优的脚本。

变更按影响程度依次分组。如果你只想移植代码,可直接跳到末尾的 迁移检查清单。每个提交哈希都链接到其在 GitHub 上的 diff。

NINA / RP2 WiFi API 重构 (minor)

NINA / RP2 WLAN 驱动经过重构,以匹配上游 MicroPython / CYW43 的 network 接口:新增 WLAN(interface) 构造函数(STA/AP 模式)、新的 active([bool]) 方法、作为 connect 别名的 config / start_apconnect()ssid 参数被重命名为 essid,新增 channel 关键字参数,且 nina.fw_version() 现在返回 (major, minor, patch) 元组而非原始字节。NINA 固件版本不匹配现在是一个非致命警告,而不再是 OSError

提交: eb2f98277e14470f680c40f4832

传感器错误现在抛出 RuntimeError (behavior)

传感器错误报告围绕一张统一的错误码表进行了标准化:摄像头故障(捕获超时、无效的 framesize/pixformat/window/framerate、帧缓冲区错误、JPEG 溢出、未检测到传感器等)现在会抛出一致且具描述性的消息,且若干之前抛出 ValueError 的情形现在改为抛出 RuntimeError(包括 sensor.reset())。对于这些情形捕获 ValueError 的代码必须改为捕获 RuntimeError

提交: 0491a6a88c8bf0af6f2fb226562

迁移检查清单

要干净地移植到 v4.1.0,通常的工作是:

  1. 将 NINA/RP2 WiFi 代码移植到标准的 network.WLAN 接口(WLAN(interface)active()essid=),并预期 nina.fw_version() 返回一个元组(WiFi API 变更)。

  2. 在摄像头 / sensor.reset() 错误处理中,将 except ValueError 改为 except RuntimeError传感器错误变更)。