v4.5.0

v4.5.0 — крупный выпуск. Старый модуль lcd заменён единым модулем display с отдельными бэкендами SPI / параллельным / DSI / TV, добавлена плата Arduino Giga, а также появилась волна функций для дисплеев, сенсорного ввода и управления датчиками. Есть несколько несовместимых изменений — прочитайте их ниже.

Основное

  • Новый модуль display — заменяет lcd едиными бэкендами SPIDisplay / RGBDisplay / DSIDisplay / TVDisplay.

  • Поддержка платы Arduino Giga.

  • Новое оборудование для дисплеев и сенсорного ввода — дисплеи DSI на STM32 H7, TFP410 DVI/HDMI, HDMI/DVI CEC, RGB-панели ST7701 и ёмкостный сенсорный ввод GT911 / FT5X06.

  • Новые средства управления датчиком — калибровка уровня чёрного, ночной режим и sensor.disable_delays(); гораздо более быстрое транспонирование (~5x) и морфология (~2.5x).

  • Несовместимо: lcddisplay, lcd_touchft5x06, переименованы выводы LED — см. несовместимые изменения.

Новые возможности

  • Бэкенды дисплеевDisplayData (чтение DDC/EDID), сериализатор DVI/HDMI TFP410, поддержка дисплеев MIPI-DSI на STM32 H7, драйвер HDMI/DVI cec и библиотека display на Python со вспомогательной функцией инициализации RGB-панели ST7701.

  • Сенсорный ввод — новый драйвер 5-точечного ёмкостного сенсорного ввода GT911 (read_points() / read_id() / reset()).

  • Расширение machine — замораживаемая библиотека machine со вспомогательным классом machine.LED и новым методом machine.LED.value([v]).

  • Средства управления датчикомsensor.set_auto_blc(enable, regs=None) / sensor.get_blc_regs() (калибровка уровня чёрного), IOCTL_SET_NIGHT_MODE / IOCTL_GET_NIGHT_MODE (OV7725/OV5640), hmirror/vflip для OV7670 и sensor.disable_delays() для пропуска задержек установления параметров камеры ради более быстрой перенастройки.

  • i.MX RTsensor.set_xclk_frequency() теперь принимает любую частоту (привязываясь к ближайшему допустимому делителю CSI), а модули SPI lcd / tv / fir были включены на RT1060.

Прочие изменения и улучшения

  • Гораздо более быстрые операции с изображениями — транспонирование изображения работает примерно в 5 раз быстрее, а image.morph() — примерно в 2,5 раза быстрее.

  • Опрос шины камеры теперь сканирует и проверяет несколько адресов устройств, поддерживая платы с несколькими устройствами на шине.

Исправления ошибок

Камера и датчики:

  • Исправлена точность расчёта усиления на многих датчиках (HM01B0, HM0360, MT9M114, MT9V0xx, OV2640, OV5640, OV7690, OV7725, OV9650, PAJ6100), экспозиция / биннинг столбцов MT9V0xx, экспозиция OV5640 и оконное кадрирование VGA для OV7670.

  • STM32 теперь отбрасывает повреждённые кадры транспонирования вместо возврата некорректных изображений.

Обработка изображений:

  • Исправлено целочисленное переполнение, затрагивающее операции с изображениями / FIR / ToF / LCD / TV, недопустимые инструкции с плавающей запятой vcvtm/vcvtp на Cortex-M4 (fast_floorf/fast_ceilf), ошибка масштабирования на месте в преобразовании image.to_*() и повреждение кеша рисования DMA2D.

Дисплей и система:

  • Исправлены тайминги и портретный режим дисплея DSI, listen() в micro_speech на Nicla Vision / Portenta H7, пользовательский переключатель STM32 (pyb.Switch) и поддержка шины I2C4.

Оборудование и поддержка плат

  • Arduino Giga — новая плата с именованными отображениями выводов Arduino и полным набором примеров.

  • OpenMV RT1060 — включены модули SPI LCD, TV и тепловизора FIR.

  • Arduino Nano 33 BLE Sense — выводы LED.

Несовместимые изменения API

Видимые пользователю несовместимые изменения API между v4.4.3 и v4.5.0. Область: C-модули Python в modules/ и библиотеки Python в scripts/libraries/.

Каждое изменение помечено степенью влияния:

  • major — большинство использовавших это скриптов потребуют правок.

  • minor — узкий API; затрагивает только использовавшие его скрипты.

  • behavior — тот же API, но другие результаты; перепроверьте настроенные скрипты.

Изменения сгруппированы по влиянию именно в этом порядке. Если вы просто хотите перенести свой код, перейдите к контрольному списку миграции в конце. Каждый хеш коммита ведёт на его diff на GitHub.

Модуль lcd заменён на display (major)

Старый модуль lcd был удалён и заменён единым модулем display, разделённым на бэкенды SPIDisplay (SPI LCD-шилд), RGBDisplay / параллельный, DSIDisplay (MIPI-DSI) и TVDisplay с общим API. Скрипты должны перейти с import lcd на модуль display и создавать соответствующий объект бэкенда.

Коммиты: 227824aac, 6c6336829

Модуль сенсорного ввода, выводы LED и встроенные драйверы (minor)

Универсальный модуль lcd_touch был заменён выделенным модулем драйвера ёмкостного сенсорного ввода FT5X06. Имена выводов LED были переименованы для единообразия на всех платах (скрипты, ссылающиеся на старые имена выводов LED, должны быть обновлены). Встроенные драйверы IMU/датчиков hts221 / lps22h / lsm6dsox / lsm9ds1 были заменены версиями из upstream micropython-lib, чьи API немного отличаются (встроенные примеры были обновлены соответственно).

Коммиты: 86ad6dcdb, 9344c3b74, 2b5b7963b

Неподдерживаемые средства управления датчиком теперь выдают предупреждение (behavior)

sensor.set_auto_gain(), set_auto_exposure(), set_auto_whitebal() и set_auto_blc() теперь выводят предупреждение вместо вызова RuntimeError, когда активный датчик не поддерживает данное управление, так что один и тот же скрипт может работать на датчиках с разными возможностями. Код, полагавшийся на перехват исключения, должен быть обновлён.

Коммит: dbf4996f2

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

Для чистого переноса на v4.5.0 типичная работа такова:

  1. Замените использование import lcd новым модулем display и соответствующим бэкендом (изменение модуля display).

  2. Перейдите с lcd_touch на FT5X06, обновите все старые имена выводов LED и перепроверьте API драйверов IMU из upstream (изменения сенсорного ввода/выводов/драйверов).

  3. Замените try/except RuntimeError вокруг неподдерживаемых средств управления датчиком проверками возможностей (изменение управления датчиком).