v4.0.0

v4.0.0 — це основний реліз v3 → v4. Він вводить сучасний API буферизації багатьох кадрів sensor (подвійна / потрійна буферизація та відео-FIFO), зворотний виклик завершення кадру, модуль Bluetooth (стек NimBLE) з підтримкою Portenta, початковий драйвер камери MT9M114, розвантаження захоплення камери на MDMA, підтримку Bayer/JPEG у image.draw_image() та перехід на MicroPython 1.15. Застарілий потоковий режим видалено, а sensor.set_windowing() переопрацьовано — ознайомтеся з несумісними змінами нижче.

Основні можливості

  • Буферизація кількох кадрівsensor отримує подвійну буферизацію, потрійну буферизацію та режим відео-FIFO для вищих і рівномірніших частот кадрів.

  • Зворотний виклик завершення кадру — реєстрація зворотного виклику, що спрацьовує, коли новий кадр готовий, для неблокуючих конвеєрів захоплення.

  • Bluetooth — модуль bluetooth, побудований на стеку NimBLE, увімкнений на Arduino Portenta H7 (із прикладом BLE).

  • MT9M114 — початковий драйвер камерного датчика.

  • Швидше захоплення — розвантаження захоплення даних камери на MDMA; draw_image() тепер приймає джерела/цілі Bayer та JPEG.

  • MicroPython 1.15 — вбудований MicroPython оновлено з 1.13 до 1.15.

  • Несумісна зміна: застарілий потоковий режим видалено, а sensor.set_windowing() переопрацьовано — дивіться несумісні зміни.

Нові можливості

  • Багатобуферизація датчика — додано sensor.set_framebuffers() / sensor.get_framebuffers() та режими SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO, а також sensor.get_frame_available() для подвійного, потрійного захоплення та відео-FIFO.

  • Зворотний виклик завершення кадру — додано sensor.set_frame_callback(), щоб Python-зворотний виклик запускався після завершення кожного нового кадру.

  • Bluetooth — додано модуль bluetooth на основі стека NimBLE (підмодуль NimBLE, драйвер CYW-BT), увімкнений на Arduino Portenta H7 із прикладом BLE.

  • MT9M114 — додано початковий драйвер камерного датчика MT9M114.

  • draw_image — додано підтримку дебаєрування та копіювання JPEG, тому image.draw_image() приймає вихідні/цільові зображення Bayer та JPEG.

  • Розвантаження захоплення на MDMA — захоплення даних камери розвантажено на MDMA для вищої пропускної здатності.

  • Аргумент колірної палітри тепер можна вимкнути, передавши -1 (оскільки None зарезервовано як дійсний аргумент).

Інші зміни та покращення

  • Перехід на нову реалізацію програмного I2C; вирівнювання з upstream MicroPython; конфігурація ulab для кожної плати; базові вбудовані модулі увімкнено для OpenMV 2; чесніше блокування зчитування кадрового буфера; підтримку мьютексу розширено до Cortex-M0/M0+ з тайм-аутом блокування.

Виправлення помилок

Камера та обробка зображень:

  • Виправлено надійність ініціалізації FLIR Lepton на платі Pure Thermal, обробку буфера JPEG / призупинення в ImageIO, налаштування вертикального/горизонтального дзеркалювання HM01B0, очищення буфера JPEG при анулюванні зображення та прапорець cropped, що встановлювався при недійсному розмірі кадру.

Система та підключення:

  • Виправлено очищення команд USB та команду скидання до завантажувача, ініціалізацію мьютексу, джерело тактування UART, визначення кодової сторінки FatFS, обробку позасмугового ACK WINC1500, налагодження WiFi та USB PID Nano33; ізольовано виділені аналогові виводи.

Апаратне забезпечення та підтримка плат

  • Камерний датчик MT9M114 (початковий драйвер).

  • Arduino Portenta H7 — Bluetooth увімкнено (NimBLE) із прикладом BLE.

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — прапорець налагодження WiFi вимкнено там, де не підтримується; додано приклад blinky; виправлення USB PID.

Несумісні зміни API

Видимі для користувача несумісні зміни API між v3.9.4 та v4.0.0. Область: Python C-модулі в modules/ та бібліотеки Python у scripts/libraries/.

Кожна зміна позначена за впливом:

  • major — торкається більшості скриптів; майже напевно потрібне портування коду.

  • minor — вузький API; торкається лише скриптів, що його використовували.

  • behavior — той самий API, інші результати; перевірте налаштовані скрипти.

Зміни згруповано за впливом у відповідному порядку. Якщо ви хочете просто портувати код, перейдіть до контрольного списку міграції в кінці. Кожен хеш коміту посилається на його різницю на GitHub.

Потоковий режим видалено (major)

Застарілий потоковий режим датчика видалено на користь нового API буферизації багатьох кадрів. Код, що вмикав потоковий режим, необхідно перевести на sensor.set_framebuffers() з DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO та керувати захопленням через sensor.snapshot() / sensor.get_frame_available().

Коміти: a42f3a647

sensor.set_windowing() переопрацьовано (behavior)

sensor.set_windowing() зробили значно гнучкішим: тепер він приймає кілька форм аргументів (кортеж регіону, або ширина/висота по центру, або x, y, w, h) та визначає вікно відносно поточної роздільної здатності. Скрипти, що передавали аргументи вікна у старому фіксованому форматі, можуть вибирати інший регіон і мають бути перевірені.

Коміти: 3e9c43554

MicroPython 1.13 → 1.15 (behavior)

Вбудоване ядро MicroPython оновлено з 1.13 до 1.15 (через 1.14). Поведінка стандартної бібліотеки та мови відповідає upstream MicroPython 1.15; перевірте скрипти, що залежать від версійно-специфічної поведінки micropython / стандартних модулів.

Коміти: 364eea6c7, 26c5376b0

Аргумент update_jpeg_buffer ImageIO видалено (minor)

Оновлення буфера JPEG ImageIO переопрацьовано для виведення буфера з аргументу джерела зображення, а явний аргумент update_jpeg_buffer видалено. Скрипти, що передавали update_jpeg_buffer до ImageIO, мають видалити цей аргумент.

Коміти: 5c6937bd1

Контрольний список міграції

Для чистого портування на v4.0.0 типова робота полягає в:

  1. Замініть будь-яке використання видаленого потокового режиму на новий API багатобуферизації sensor.set_framebuffers() (потоковий режим видалено).

  2. Перевірте виклики sensor.set_windowing() відповідно до переопрацьованої, гнучкішої обробки аргументів (зміна вікна).

  3. Перевірте скрипти, що залежать від версійно-специфічної поведінки MicroPython, відповідно до MicroPython 1.15 (оновлення MicroPython).

  4. Видаліть аргумент update_jpeg_buffer з викликів ImageIO (зміна ImageIO).

Всі інші скрипти працюють без змін.