.. _changelog_v3_4_2: 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 :mod:`pid` / :mod:`modbus` libraries. The WINC1500 ``ifconfig()`` API and ``find_apriltags()`` defaults changed — read the breaking changes below. .. contents:: On this page :local: :depth: 1 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 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, 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 :mod:`pid` PID-controller library, a :mod:`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 :class:`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 :ref:`migration checklist ` at the end. Each commit hash links to its diff on GitHub. .. _v3_4_2_ifconfig: 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 :mod:`network` interface. Code that read connection info from ``ifconfig()`` must switch to the new ``WLAN.netinfo()`` method (``(rssi, security, ssid, mac, ip)``). *Commits:* `e685b484a `__ .. _v3_4_2_waitmsg: ``MQTTClient.wait_msg()`` returns ``None`` on empty recv *(minor)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The :mod:`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 `__ .. _v3_4_2_apriltags: ``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 `__ .. _v3_4_2_migration: Migration checklist ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For a clean port to v3.4.2 the typical work is: #. Replace WINC1500 ``WLAN.ifconfig()`` connection-info reads with ``WLAN.netinfo()`` (:ref:`the ifconfig change `). #. Check ``MQTTClient.wait_msg()`` for a ``None`` return instead of catching ``OSError(-1)`` (:ref:`the wait_msg change `). #. Re-tune AprilTag detection or build with ``IMLIB_ENABLE_FINE_APRILTAGS`` if you need 8-way connectivity (:ref:`the find_apriltags change `). All other scripts run unchanged.