.. _changelog_v4_1_0: 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. .. contents:: On this page :local: :depth: 1 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 :mod:`network` driver, 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 an ``http_post.py`` example. - ``ble_advertising`` helper library, frozen on the Nano RP2040 Connect. - **Host/debug** — ``pyopenmv.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 :ref:`migration checklist ` at the end. Each commit hash links to its diff on GitHub. .. _v4_1_0_wifi: NINA / RP2 WiFi API reworked *(minor)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The NINA / RP2 WLAN driver was reworked to match the upstream MicroPython / CYW43 :mod:`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 `__ .. _v4_1_0_errors: 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 :func:`sensor.reset`). Code that caught ``ValueError`` for these cases must catch ``RuntimeError`` instead. *Commits:* `0491a6a88 `__, `c8bf0af6f `__, `2fb226562 `__ .. _v4_1_0_migration: Migration checklist ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For a clean port to v4.1.0 the typical work is: #. Port NINA/RP2 WiFi code to the standard :class:`network.WLAN` interface (``WLAN(interface)``, ``active()``, ``essid=``) and expect a tuple from ``nina.fw_version()`` (:ref:`the WiFi API change `). #. Change ``except ValueError`` to ``except RuntimeError`` around camera / :func:`sensor.reset` error handling (:ref:`the sensor-error change `).