v3.4.2

v3.4.2 是一个重大版本。它引入了 OpenMV Cam H7 Plus(SDRAM,用于高分辨率采集的巨大帧缓冲区)、OV5640 500 万像素 摄像头、FDCAN 支持、重写的 OV2640 驱动、Image.jpeg_encode_for_ide() 以及新的 pid / modbus 库。WINC1500 的 ifconfig() API 和 find_apriltags() 默认值发生了变化——请阅读下方的重大变更。

亮点

  • OpenMV Cam H7 Plus —— 新板卡,带有 SDRAM 驱动和约 31 MB 帧缓冲区,用于高分辨率采集。

  • 带 I2C 检测的 OV5640 500 万像素 摄像头驱动。

  • FDCAN 外设支持,附带 CAN 示例。

  • OV2640 重写 —— 正立图像、可正常工作的自动功能、JPEG 快照,以及新的 sensor.XGA framesize。

  • IDE JPEG —— Image.jpeg_encode_for_ide() 以及大型 JPEG 自动传输到 IDE。

  • 重大变更: WINC1500 WLAN.ifconfig() 语义发生变化,MQTTClient.wait_msg() 在空接收时不再抛出异常,find_apriltags() 默认采用 4 向连通——参见重大变更。

新功能

  • WiFi —— 添加了 WLAN.netinfo()(返回 (rssi, security, ssid, mac, ip))以及通过 WLAN.ifconfig() 进行 WINC1500 静态 IP 配置,附带静态 IP 示例。

  • FDCAN —— 添加了 FDCAN 外设支持和一个 can.py 示例。

  • IDE JPEG —— 添加了 Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide();当缓冲区太小时,大型 JPEG 会自动传输到 IDE。

  • —— 添加了 pid PID 控制器库、modbus RTU 从机库(附带 32-modbus 示例),以及用于 I2C OLED 显示的 SSD1306_I2C 类。

  • 示例 —— 添加了 MQTT 订阅(mqtt_sub.py,并将 mqtt.py 重命名为 mqtt_pub.py)。

  • 传感器 —— 添加了 sensor.XGA(1024x768)framesize;现在对 Bayer 图像调用 print() / repr() 会输出 JSON 元数据。

其他变更和改进

  • 重写了 OV2640 驱动(正立图像、可正常工作的自动功能、接受 JPEG 快照);启用了高分辨率 apriltags(在支持的板卡上解除了 <64K 像素的 ROI 限制);将 OV2640 PCLK 从 72 MHz 降至 36 MHz。

错误修复

成像:

  • 修复了二值运算越过图像末尾的溢出,find_apriltags() / find_datamatrices() / find_lines() 输出中的 printf/浮点精度,色块 print() 中格式错误的 JSON,对 vflip / hmirror 图像调用 find_apriltags()find_lbp() 的 ROI 错误,大分辨率下的 JPEG 压缩超时,以及 fb_alloc 内存统计报告。

摄像头和传感器:

  • 修复了 JPEG 模式的缓存维护和缓冲区对齐、最大 DCMI 传输大小、OV2640 寄存器配置和分辨率、复位时恢复传感器关断状态,以及 OV7725 图像质量(添加了逐摄像头的带状滤波器)。

网络和系统:

  • 修复了 socket.accept() 硬故障/错误、WINC1500 套接字超时处理(超时 0 现在为阻塞;接收超时时不再关闭套接字)、H7 深度睡眠、RTC(上游更新以及 H7 EXTI / 唤醒定时器 / 软复位问题),以及 pyb.Servo 定时器 IRQ(Servo 此前无法工作)。

硬件和板卡支持

  • OpenMV Cam H7 Plus(OPENMV4R) —— 新板卡,带有 SDRAM 驱动,可启用大型(约 31 MB)帧缓冲区。

  • OV5640 —— 带 I2C 检测的全新 500 万像素摄像头驱动。

  • FDCAN —— 外设支持。

重大 API 变更

v3.4.1 与 v3.4.2 之间面向用户的 API 变更。范围:modules/ 中的 Python C 模块和 scripts/libraries/ 中的 Python 库。

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

  • major —— 影响大多数使用该功能的脚本;你需要移植代码。

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

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

变更按影响程度依此顺序分组。如果你只是想移植代码,请跳到末尾的 迁移清单。每个提交哈希都链接到其在 GitHub 上的差异。

WINC1500 WLAN.ifconfig() 语义变更 (major)

在 WINC1500 WiFi shield 上,WLAN.ifconfig() 不再返回旧的 5 元素列表 [rssi, security, ssid, mac, ip]。它现在获取/设置一个 (ip, subnet, gateway, dns) 元组(并支持静态 IP 配置),与标准的 network 接口一致。从 ifconfig() 读取连接信息的代码必须改用新的 WLAN.netinfo() 方法((rssi, security, ssid, mac, ip))。

提交: e685b484a

MQTTClient.wait_msg() 在空接收时返回 None (minor)

mqtt 库的 MQTTClient.wait_msg() 现在在空接收时返回 None 而不再抛出 OSError(-1)。捕获 OSError(-1) 以检测已关闭/空套接字的代码必须改为检查 None 返回值。

提交: 76239ea89

find_apriltags() 默认采用 4 向连通 (behavior)

image.find_apriltags() 现在默认采用 4 向(而非 8 向)边缘连通——速度更快,但检测到的标签可能略有不同。要恢复之前的精度,请在构建固件时定义 IMLIB_ENABLE_FINE_APRILTAGS

提交: c1d9bec2c

迁移清单

要干净地移植到 v3.4.2,通常需要做的工作是:

  1. 将 WINC1500 WLAN.ifconfig() 的连接信息读取替换为 WLAN.netinfo()ifconfig 变更)。

  2. 检查 MQTTClient.wait_msg()None 返回值而非捕获 OSError(-1)wait_msg 变更)。

  3. 如果你需要 8 向连通,请重新调优 AprilTag 检测或在构建时定义 IMLIB_ENABLE_FINE_APRILTAGSfind_apriltags 变更)。

所有其他脚本无需改动即可运行。