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).Несовместимо:
lcd→display,lcd_touch→ft5x06, переименованы выводы LED — см. несовместимые изменения.
Новые возможности¶
Бэкенды дисплеев —
DisplayData(чтение DDC/EDID), сериализатор DVI/HDMITFP410, поддержка дисплеев MIPI-DSI на STM32 H7, драйвер HDMI/DVIcecи библиотека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 RT —
sensor.set_xclk_frequency()теперь принимает любую частоту (привязываясь к ближайшему допустимому делителю CSI), а модули SPIlcd/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 и создавать соответствующий объект бэкенда.
Модуль сенсорного ввода, выводы LED и встроенные драйверы (minor)¶
Универсальный модуль lcd_touch был заменён выделенным модулем драйвера ёмкостного сенсорного ввода FT5X06. Имена выводов LED были переименованы для единообразия на всех платах (скрипты, ссылающиеся на старые имена выводов LED, должны быть обновлены). Встроенные драйверы IMU/датчиков hts221 / lps22h / lsm6dsox / lsm9ds1 были заменены версиями из upstream micropython-lib, чьи API немного отличаются (встроенные примеры были обновлены соответственно).
Неподдерживаемые средства управления датчиком теперь выдают предупреждение (behavior)¶
sensor.set_auto_gain(), set_auto_exposure(), set_auto_whitebal() и set_auto_blc() теперь выводят предупреждение вместо вызова RuntimeError, когда активный датчик не поддерживает данное управление, так что один и тот же скрипт может работать на датчиках с разными возможностями. Код, полагавшийся на перехват исключения, должен быть обновлён.
Коммит: dbf4996f2
Контрольный список миграции¶
Для чистого переноса на v4.5.0 типичная работа такова:
Замените использование
import lcdновым модулемdisplayи соответствующим бэкендом (изменение модуля display).Перейдите с
lcd_touchнаFT5X06, обновите все старые имена выводов LED и перепроверьте API драйверов IMU из upstream (изменения сенсорного ввода/выводов/драйверов).Замените
try/except RuntimeErrorвокруг неподдерживаемых средств управления датчиком проверками возможностей (изменение управления датчиком).