.. _changelog_v3_6_0: v3.6.0 ====== v3.6.0 brings full **OV5640 5 MP** camera support with new high-resolution framesizes (HD / FHD / QHD / QXGA / WQXGA), updates the core to **MicroPython 1.12**, heavily optimizes the software **JPEG encoder** and AprilTag / line detection, adds **UVC (USB video) on the OpenMV Cam H7 Plus**, and supports QSPI flash up to 32 MB. MicroPython behavior and ``get_histogram()`` changed — read the breaking changes below. .. contents:: On this page :local: :depth: 1 Highlights ---------- - **OV5640 5 MP** — full camera driver with new HD / FHD / QHD / QXGA / WQXGA / WQXGA2 framesizes. - **MicroPython 1.12** — the bundled core was updated. - **Faster pipeline** — heavily optimized software JPEG encoding, AprilTag detection, LSD line detection, ``histeq()``, and QR-code decoding. - **UVC on H7 Plus** — the OpenMV Cam H7 Plus can act as a USB video device. - **Breaking:** MicroPython behavior, ``image.get_histogram()`` normalization, and the OpenMV 3 JPEG/grayscale output changed — see the breaking changes. New features ------------ - **OV5640** — added full support for the OV5640 5 MP camera (external clock configuration in sensor init) and the new ``sensor.HD`` / ``FHD`` / ``QHD`` / ``QXGA`` / ``WQXGA`` / ``WQXGA2`` framesize constants. - **TIM4** — freed up so it is usable from MicroPython. - Added a DAC timed-write example (``dac_write_timed.py``) and renamed ``dac_control.py`` to ``dac_write.py``. Other changes and improvements ------------------------------ - Updated the bundled MicroPython to 1.12; heavily optimized the software JPEG encoder (VGA path, grayscale/binary paths, integer instead of floating-point math, optimized MCU capture), LSD ``find_line_segments()``, AprilTag detection, ``Image.histeq()``, and QR-code / RGB-to-gray conversion; added QSPI flash support for chips up to 32 MB; removed the obsolete CMSIS-CNN ``cnn.py`` example. Bug fixes --------- Camera and imaging: - Fixed JPEG encoding corruption at HQQQVGA, binary (1-bit) image → JPEG compression, a ``find_line_segments()`` regression (re-enabled the ``NOTDEF`` non-aligned check), and minor OV2640 driver issues. System and boot: - Fixed self-test / filesystem corruption (``selftest.py`` now runs before USB MSC is enabled, and USB MSC is enabled on a fatal error so the host can read the error log), the :class:`pyb.DAC` ``write_timed()``, the H7 :class:`machine.I2C` timings, F7 overdrive re-enable after stop mode, and the ``stop_mode.py`` ``rtc.wakeup()`` interval. Hardware and board support -------------------------- - **OV5640** — full 5 MP camera driver with high-resolution framesizes. - **OpenMV Cam H7 Plus** — UVC (USB video) support; the ``OPENMV4R`` board target was renamed ``OPENMV4P``. - **QSPI flash** — chips up to 32 MB are now supported. Breaking API changes -------------------- User-visible API breaks between v3.5.2 and v3.6.0. Scope: Python C-modules in ``modules/`` and Python libraries in ``scripts/libraries/``. All three breaking changes are *behavior* changes (same API, different results) — re-check affected scripts. Each commit hash links to its diff on GitHub. .. _v3_6_0_micropython: MicroPython updated to 1.12 *(behavior)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The bundled MicroPython core was updated to 1.12. Standard-library and language behavior follows upstream MicroPython 1.12; re-check scripts that depend on version-specific :mod:`micropython` / standard-module behavior. *Commits:* `eafd431ea `__ .. _v3_6_0_histogram: ``image.get_histogram()`` threshold normalization changed *(behavior)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``image.get_histogram()`` (and ``get_statistics()``) with color thresholds now normalizes by the number of thresholded pixels rather than the whole ROI, and uses floor instead of round for bin indexing. Histogram/statistics values for thresholded calls differ from previous releases — re-tune code that compared against absolute histogram values. *Commits:* `7cf0f8089 `__ .. _v3_6_0_omv3yuv: OpenMV 3 JPEG/grayscale output changed *(behavior)* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To save flash, the OpenMV 3 (M7) YUV lookup table was disabled, so JPEG and grayscale output pixel values are computed slightly differently on the OpenMV 3. Output is still valid but differs marginally from prior releases; re-check pixel-exact comparisons on the OpenMV 3. *Commits:* `0e4b46e41 `__ .. _v3_6_0_migration: Migration checklist ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Re-validate scripts that depend on version-specific MicroPython behavior against 1.12 (:ref:`the MicroPython bump `), re-tune code that compared against absolute ``get_histogram()`` / ``get_statistics()`` values when using color thresholds (:ref:`the histogram change `), and re-check pixel-exact comparisons on the OpenMV 3 (:ref:`the OpenMV 3 output change `). All other scripts run unchanged.