v3.4.2

v3.4.2 — крупный выпуск. Он представляет OpenMV Cam H7 Plus (SDRAM, огромный буфер кадра для захвата высокого разрешения), камеру OV5640 на 5 МП, поддержку FDCAN, переписанный драйвер OV2640, Image.jpeg_encode_for_ide(), а также новые библиотеки pid / modbus. API ifconfig() для WINC1500 и значения по умолчанию find_apriltags() изменились — читайте о ломающих изменениях ниже.

Основные моменты

  • OpenMV Cam H7 Plus — новая плата с драйвером SDRAM и буфером кадра объёмом ~31 МБ для захвата высокого разрешения.

  • Драйвер камеры OV5640 на 5 МП с обнаружением по I2C.

  • Поддержка периферии FDCAN с примером CAN.

  • Переписан OV2640 — изображения без переворота, работающие автофункции, JPEG-снимки и новый размер кадра sensor.XGA.

  • JPEG для IDEImage.jpeg_encode_for_ide() и автоматическая передача больших JPEG в IDE.

  • Ломающее изменение: изменилась семантика WLAN.ifconfig() для WINC1500, MQTTClient.wait_msg() больше не вызывает исключение при пустом приёме, а find_apriltags() по умолчанию использует 4-связность — см. раздел о ломающих изменениях.

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

  • WiFi — добавлены WLAN.netinfo() (возвращает (rssi, security, ssid, mac, ip)) и настройка статического IP для WINC1500 через WLAN.ifconfig(), с примером статического IP.

  • FDCAN — добавлены поддержка периферии FDCAN и пример can.py.

  • JPEG для IDE — добавлены Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); большие JPEG автоматически передаются в IDE, когда буфер слишком мал.

  • Библиотеки — добавлены библиотека ПИД-регулятора pid, библиотека slave-устройства RTU modbus (с примером 32-modbus) и класс SSD1306_I2C для OLED-дисплеев по I2C.

  • Примеры — добавлен MQTT subscribe (mqtt_sub.py, при этом mqtt.py переименован в mqtt_pub.py).

  • Датчик — добавлен размер кадра sensor.XGA (1024x768); print() / repr() для изображения Bayer теперь выводят метаданные JSON.

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

  • Переписан драйвер OV2640 (изображения без переворота, работающие автофункции, приём JPEG-снимков); включены apriltags высокого разрешения (снимает ограничение ROI <64K пикселей на способных платах); снижена частота PCLK OV2640 с 72 МГц до 36 МГц.

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

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

  • Исправлены переполнение за концом изображения в бинарных операциях, точность printf/float в выводе find_apriltags() / find_datamatrices() / find_lines(), некорректный JSON в print() блоба, find_apriltags() на изображениях с vflip / hmirror, ошибка ROI в find_lbp(), тайм-аут сжатия JPEG для больших разрешений, а также отчёт о статистике памяти в fb_alloc.

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

  • Исправлены обслуживание кэша и выравнивание буфера в режиме JPEG, максимальный размер передачи DCMI, конфигурация регистров и разрешения OV2640, восстановление состояния выключения датчика при сбросе, а также качество изображения OV7725 (добавлен фильтр полос для каждой камеры).

Сеть и система:

  • Исправлены хардфолт/ошибка в socket.accept(), обработка тайм-аута сокета WINC1500 (тайм-аут 0 теперь блокирующий; сокеты не закрываются при тайм-ауте приёма), глубокий сон H7, RTC (обновление из upstream и проблемы H7 EXTI / таймера пробуждения / программного сброса), а также прерывание таймера pyb.Servo (Servo был неработоспособен).

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

  • OpenMV Cam H7 Plus (OPENMV4R) — новая плата с драйвером SDRAM, обеспечивающим большой (~31 МБ) буфер кадра.

  • OV5640 — новый драйвер камеры на 5 МП с обнаружением по I2C.

  • FDCAN — поддержка периферии.

Ломающие изменения API

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

Каждое изменение помечено уровнем воздействия:

  • major — затрагивает большинство скриптов, использующих эту функцию; вам потребуется адаптировать код.

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

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

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

Изменилась семантика WLAN.ifconfig() для WINC1500 (major)

На WiFi shield с WINC1500 WLAN.ifconfig() больше не возвращает старый список из 5 элементов [rssi, security, ssid, mac, ip]. Теперь он получает/устанавливает кортеж (ip, subnet, gateway, dns) (и поддерживает настройку статического IP), соответствуя стандартному интерфейсу network. Код, читавший информацию о соединении из ifconfig(), должен перейти на новый метод WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Коммиты: e685b484a

MQTTClient.wait_msg() возвращает None при пустом приёме (minor)

MQTTClient.wait_msg() из библиотеки mqtt теперь возвращает None при пустом приёме вместо вызова OSError(-1). Код, перехватывавший OSError(-1) для обнаружения закрытого/пустого сокета, должен вместо этого проверять возвращаемое значение None.

Коммиты: 76239ea89

find_apriltags() по умолчанию использует 4-связность (behavior)

image.find_apriltags() теперь по умолчанию использует 4-связность границ (вместо 8-связности) — быстрее, но обнаруженные теги могут немного отличаться. Чтобы восстановить прежнюю точность, соберите прошивку с определённым IMLIB_ENABLE_FINE_APRILTAGS.

Коммиты: c1d9bec2c

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

Для чистого перехода на v3.4.2 типичный объём работ таков:

  1. Замените чтение информации о соединении через WLAN.ifconfig() на WINC1500 на WLAN.netinfo() (изменение ifconfig).

  2. Проверяйте MQTTClient.wait_msg() на возврат None вместо перехвата OSError(-1) (изменение wait_msg).

  3. Перенастройте обнаружение AprilTag или соберите прошивку с IMLIB_ENABLE_FINE_APRILTAGS, если вам нужна 8-связность (изменение find_apriltags).

Все остальные скрипты работают без изменений.