v4.1.0

v4.1.0 brings full Arduino Nano RP2040 Connect / Raspberry Pi Pico support (WiFi, Bluetooth, camera capture, jump-to-bootloader), direct JPEG image decoding, a frozen urequests HTTP client, OV7670 sensor support, and standardized sensor error reporting. The WiFi API and sensor exceptions changed — read the breaking changes below.

Highlights

  • RP2 boards — Arduino Nano RP2040 Connect / Pico gain WiFi (NINA-W10), Bluetooth (NimBLE), camera/DCMI capture, and jump-to-bootloader.

  • JPEG decoding — image operations now accept compressed JPEG images directly.

  • urequests HTTP client frozen into the firmware.

  • OV7670 camera sensor support.

  • Breaking: the NINA/RP2 WiFi API was reworked and several sensor errors now raise RuntimeError — see the breaking changes.

New features

  • Arduino Nano RP2040 Connect / Raspberry Pi Pico — WiFi via the NINA-W10 network driver, Bluetooth/NimBLE, camera capture (DCMI PIO program), and a jump-to-bootloader command.

  • JPEG image decodingfind_apriltags(), lcd.display(), tv.display(), and related image operations now accept compressed JPEG images directly (decode to binary/grayscale/RGB565).

  • urequests — the HTTP client (GET/POST/PUT/…) is now frozen on the OpenMV 4 / 4 Plus / Portenta / Nicla, with an http_post.py example.

  • ble_advertising helper library, frozen on the Nano RP2040 Connect.

  • Host/debugpyopenmv.reset_to_bl() and a new USBDBG_SYS_RESET_TO_BL (0x0E) command to reset into the bootloader; jump-to-bootloader on the Arduino Nano 33 BLE Sense.

  • OV7670 — new OV7670 camera sensor support, selectable on OpenMV 4.

Other changes and improvements

  • RP2 UDP sockets auto-bind to an ephemeral port when used unbound; bundled MicroPython submodule updated.

Bug fixes

Networking:

  • Fixed NINA WiFi socket accept/close/send/recv/bind handling and operation timeouts, and an RP2 debug text-buffer race that could corrupt IDE output.

Camera and system:

  • Fixed the HM01B0 reset, the camera I2C bus getting stuck after a failed sensor scan on the OpenMV H7, H7 ULPI low-power entry on USB disconnect, H7 ADC pin generation, and the Portenta camera pinout / shield SPI-CS.

Hardware and board support

  • Arduino Nano RP2040 Connect / Raspberry Pi Pico — WiFi, Bluetooth, camera, larger flash filesystem, MSC bootloader.

  • OV7670 camera sensor (OpenMV 4).

  • Arduino Portenta H7 — breakout I2C4, extra PWM/clock pins, OV7725 / MT9V034 sensors.

Breaking API changes

User-visible API breaks between v4.0.2 and v4.1.0. Scope: Python C-modules in modules/ and Python libraries in scripts/libraries/.

Each change is tagged with its impact:

  • 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.

NINA / RP2 WiFi API reworked (minor)

The NINA / RP2 WLAN driver was reworked to match the upstream MicroPython / CYW43 network interface: a WLAN(interface) constructor (STA/AP mode), a new active([bool]) method, config / start_ap aliases of connect, the connect() ssid argument renamed to essid, a new channel keyword, and nina.fw_version() now returns a (major, minor, patch) tuple instead of raw bytes. A NINA firmware version mismatch is now a non-fatal warning instead of an OSError.

Commits: eb2f98277, e14470f68, 0c40f4832

Sensor errors now raise RuntimeError (behavior)

Sensor error reporting was standardized around a unified error-code table: camera failures (capture timeout, invalid framesize/pixformat/window/ framerate, framebuffer error, JPEG overflow, undetected sensor, …) now raise consistent, descriptive messages, and several conditions that previously raised ValueError now raise RuntimeError (including sensor.reset()). Code that caught ValueError for these cases must catch RuntimeError instead.

Commits: 0491a6a88, c8bf0af6f, 2fb226562

Migration checklist

For a clean port to v4.1.0 the typical work is:

  1. Port NINA/RP2 WiFi code to the standard network.WLAN interface (WLAN(interface), active(), essid=) and expect a tuple from nina.fw_version() (the WiFi API change).

  2. Change except ValueError to except RuntimeError around camera / sensor.reset() error handling (the sensor-error change).