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.XGA framesize.

  • IDE JPEGImage.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, and find_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 via WLAN.ifconfig(), with a static-IP example.

  • FDCAN — added FDCAN peripheral support and a can.py example.

  • 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 pid PID-controller library, a modbus RTU slave library (with a 32-modbus example), and an SSD1306_I2C class for I2C OLED displays.

  • Examples — added MQTT subscribe (mqtt_sub.py, with mqtt.py renamed to mqtt_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 blob print(), find_apriltags() on vflipped / hmirrored images, the find_lbp() ROI bug, the JPEG compression timeout for large resolutions, and fb_alloc memory-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 the pyb.Servo timer 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

find_apriltags() defaults to 4-way connectivity (behavior)

image.find_apriltags() now defaults to 4-way (instead of 8-way) edge connectivity — faster, but detected tags may differ slightly. To restore the prior accuracy, build the firmware with IMLIB_ENABLE_FINE_APRILTAGS defined.

Commits: c1d9bec2c

Migration checklist

For a clean port to v3.4.2 the typical work is:

  1. Replace WINC1500 WLAN.ifconfig() connection-info reads with WLAN.netinfo() (the ifconfig change).

  2. Check MQTTClient.wait_msg() for a None return instead of catching OSError(-1) (the wait_msg change).

  3. Re-tune AprilTag detection or build with IMLIB_ENABLE_FINE_APRILTAGS if you need 8-way connectivity (the find_apriltags change).

All other scripts run unchanged.