v3.4.2¶
v3.4.2 is a big release. It introduces the OpenMV Cam H7 Plus (SDRAM, huge
framebuffer for high-resolution capture), the OV5640 5 MP camera, FDCAN
support, a rewritten OV2640 driver, Image.jpeg_encode_for_ide(), and new
pid / modbus libraries. The WINC1500 ifconfig() API and
find_apriltags() defaults changed — read the breaking changes below.
Highlights¶
OpenMV Cam H7 Plus — new board with an SDRAM driver and a ~31 MB framebuffer for high-resolution capture.
OV5640 5 MP camera driver with I2C-based detection.
FDCAN peripheral support, with a CAN example.
OV2640 rewrite — upright images, working auto functions, JPEG snapshot, and a new
sensor.XGAframesize.IDE JPEG —
Image.jpeg_encode_for_ide()and auto-transmit of large JPEGs to the IDE.Breaking: WINC1500
WLAN.ifconfig()semantics changed,MQTTClient.wait_msg()no longer raises on empty recv, andfind_apriltags()defaults to 4-way connectivity — see the breaking changes.
New features¶
WiFi — added
WLAN.netinfo()(returns(rssi, security, ssid, mac, ip)) and WINC1500 static-IP configuration viaWLAN.ifconfig(), with a static-IP example.FDCAN — added FDCAN peripheral support and a
can.pyexample.IDE JPEG — added
Image.jpeg_encode_for_ide()/Image.jpeg_encoded_for_ide(); large JPEGs auto-transmit to the IDE when the buffer is too small.Libraries — added a
pidPID-controller library, amodbusRTU slave library (with a 32-modbus example), and anSSD1306_I2Cclass for I2C OLED displays.Examples — added MQTT subscribe (
mqtt_sub.py, withmqtt.pyrenamed tomqtt_pub.py).Sensor — added the
sensor.XGA(1024x768) framesize;print()/repr()on a Bayer image now outputs JSON metadata.
Other changes and improvements¶
Rewrote the OV2640 driver (upright images, working auto functions, JPEG snapshot accepted); enabled high-resolution apriltags (lifts the <64K-pixel ROI limit on capable boards); lowered the OV2640 PCLK from 72 MHz to 36 MHz.
Bug fixes¶
Imaging:
Fixed a binary-ops past-end-of-image overflow, printf/float precision in
find_apriltags()/find_datamatrices()/find_lines()output, malformed JSON in blobprint(),find_apriltags()on vflipped / hmirrored images, thefind_lbp()ROI bug, the JPEG compression timeout for large resolutions, andfb_allocmemory-stats reporting.
Camera and sensors:
Fixed JPEG-mode cache maintenance and buffer alignment, the max DCMI transfer size, OV2640 register config and resolutions, restoring the sensor shutdown state on reset, and OV7725 image quality (added a per-camera banding filter).
Networking and system:
Fixed
socket.accept()hardfault/bug, WINC1500 socket timeout handling (timeout 0 is now blocking; sockets are not closed on recv timeout), H7 deep-sleep, the RTC (upstream update and H7 EXTI / wakeup-timer / soft-reset issues), and thepyb.Servotimer IRQ (Servo was non-functional).
Hardware and board support¶
OpenMV Cam H7 Plus (OPENMV4R) — new board with an SDRAM driver enabling a large (~31 MB) framebuffer.
OV5640 — new 5 MP camera driver with I2C-based detection.
FDCAN — peripheral support.
Breaking API changes¶
User-visible API breaks between v3.4.1 and v3.4.2. Scope: Python C-modules in
modules/ and Python libraries in scripts/libraries/.
Each change is tagged with its impact:
major — affects most scripts that used the feature; you will need to port code.
minor — narrow API; only affects scripts that used it.
behavior — same API, different results; re-check tuned scripts.
Changes are grouped by impact in that order. If you just want to port your code, jump to the migration checklist at the end. Each commit hash links to its diff on GitHub.
WINC1500 WLAN.ifconfig() semantics changed (major)¶
On the WINC1500 WiFi shield, WLAN.ifconfig() no longer returns the old
5-element list [rssi, security, ssid, mac, ip]. It now gets/sets an
(ip, subnet, gateway, dns) tuple (and supports static-IP configuration),
matching the standard network interface. Code that read connection info
from ifconfig() must switch to the new WLAN.netinfo() method
((rssi, security, ssid, mac, ip)).
Commits: e685b484a
MQTTClient.wait_msg() returns None on empty recv (minor)¶
The mqtt library’s MQTTClient.wait_msg() now returns None on an
empty receive instead of raising OSError(-1). Code that caught
OSError(-1) to detect a closed/empty socket must check for a None
return value instead.
Commits: 76239ea89
Migration checklist¶
For a clean port to v3.4.2 the typical work is:
Replace WINC1500
WLAN.ifconfig()connection-info reads withWLAN.netinfo()(the ifconfig change).Check
MQTTClient.wait_msg()for aNonereturn instead of catchingOSError(-1)(the wait_msg change).Re-tune AprilTag detection or build with
IMLIB_ENABLE_FINE_APRILTAGSif you need 8-way connectivity (the find_apriltags change).
All other scripts run unchanged.