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.XGAframesize。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。库 —— 添加了
pidPID 控制器库、modbusRTU 从机库(附带 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
迁移清单¶
要干净地移植到 v3.4.2,通常需要做的工作是:
将 WINC1500
WLAN.ifconfig()的连接信息读取替换为WLAN.netinfo()(ifconfig 变更)。检查
MQTTClient.wait_msg()的None返回值而非捕获OSError(-1)(wait_msg 变更)。如果你需要 8 向连通,请重新调优 AprilTag 检测或在构建时定义
IMLIB_ENABLE_FINE_APRILTAGS(find_apriltags 变更)。
所有其他脚本无需改动即可运行。