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.
urequestsHTTP 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
networkdriver, Bluetooth/NimBLE, camera capture (DCMI PIO program), and a jump-to-bootloader command.JPEG image decoding —
find_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 anhttp_post.pyexample.ble_advertisinghelper library, frozen on the Nano RP2040 Connect.Host/debug —
pyopenmv.reset_to_bl()and a newUSBDBG_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.
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.
Migration checklist¶
For a clean port to v4.1.0 the typical work is:
Port NINA/RP2 WiFi code to the standard
network.WLANinterface (WLAN(interface),active(),essid=) and expect a tuple fromnina.fw_version()(the WiFi API change).Change
except ValueErrortoexcept RuntimeErroraround camera /sensor.reset()error handling (the sensor-error change).