v4.0.0

v4.0.0 はメジャーな v3 → v4 リリースです。最新のマルチフレーム sensor バッファリング API(ダブル / トリプルバッファリングとビデオ FIFO)、フレーム完了コールバック、Portenta をサポートする Bluetooth モジュール(NimBLE スタック)、初の MT9M114 カメラドライバ、MDMA オフロードによるカメラキャプチャ、image.draw_image() での Bayer/JPEG サポート、そして MicroPython 1.15 への移行を導入しています。レガシーのストリーミングモードは削除され、sensor.set_windowing() は再設計されました — 以下の互換性を破壊する変更をお読みください。

ハイライト

  • マルチフレームバッファリングsensor にダブルバッファリング、トリプルバッファリング、ビデオ FIFO モードが追加され、より高く滑らかなフレームレートを実現します。

  • フレーム完了コールバック — 新しいフレームの準備が整ったときに発火するコールバックを登録でき、ノンブロッキングなキャプチャパイプラインを実現します。

  • Bluetooth — NimBLE スタック上に構築された bluetooth モジュール。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 モード、さらにダブル、トリプル、ビデオ FIFO キャプチャ向けの sensor.get_frame_available() を追加しました。

  • フレーム完了コールバック — 新しいフレームが完了するたびに Python のコールバックが実行されるよう sensor.set_frame_callback() を追加しました。

  • Bluetooth — NimBLE スタック(NimBLE サブモジュール、CYW-BT ドライバ)を基盤とする bluetooth モジュールを追加し、Arduino Portenta H7 で BLE の例とともに有効化しました。

  • MT9M114 — 初の MT9M114 カメラセンサードライバを追加しました。

  • draw_image — デベイヤーサポートと JPEG コピーサポートを追加し、image.draw_image() が Bayer および JPEG のソース/デスティネーション画像を受け付けるようにしました。

  • MDMA キャプチャオフロード — カメラデータキャプチャを MDMA にオフロードしてスループットを向上させました。

  • -1 を渡すことでカラーパレット引数を無効化できるようになりました(None は有効な引数として予約されているため)。

その他の変更と改善

  • 新しいソフトウェア I2C 実装に切り替え、MicroPython 上流と整合させ、ボードごとの ulab 構成を導入し、OpenMV 2 で基本的な組み込みモジュールを有効化し、フレームバッファ読み出しのロックをより公平にし、ロックタイムアウト付きの mutex サポートを Cortex-M0/M0+ に拡張しました。

バグ修正

カメラとイメージング:

  • Pure Thermal ボードでの FLIR Lepton 初期化の信頼性、ImageIO の JPEG バッファ / 一時停止処理、HM01B0 の vflip/hmirror 設定、画像が無効化されたときの JPEG バッファフラッシュ、およびフレームサイズが無効なときに設定されていた cropped フラグを修正しました。

システムと接続性:

  • USB コマンドのドレインとブートローダーへのリセットコマンド、mutex の初期化、UART クロックソース、FatFS のコードページ定義、WINC1500 のアウトオブバンド ACK 処理、WiFi デバッグ、および Nano33 の USB PID を修正し、専用のアナログパッドを分離しました。

ハードウェアとボードのサポート

  • MT9M114 カメラセンサー(初のドライバ)。

  • Arduino Portenta H7 — Bluetooth を有効化(NimBLE)し、BLE の例を追加。

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — サポートされていない箇所で WiFi デバッグフラグを無効化。blinky の例を追加。USB PID の修正。

互換性を破壊する API 変更

v3.9.4 と v4.0.0 の間でユーザーに見える API の互換性破壊。範囲: modules/ 内の Python C モジュールおよび scripts/libraries/ 内の Python ライブラリ。

各変更にはその影響度がタグ付けされています:

  • major — ほとんどのスクリプトに影響します。ほぼ確実にコードの移植が必要になります。

  • minor — 狭い範囲の API。それを使用したスクリプトにのみ影響します。

  • behavior — API は同じですが結果が異なります。調整済みのスクリプトを再確認してください。

変更はその順序で影響度別にグループ化されています。コードを移植したいだけなら、末尾の 移行チェックリスト に進んでください。各コミットハッシュは GitHub 上の diff にリンクしています。

ストリーミングモードの削除 (major)

レガシーのセンサーストリーミングモードは、新しいマルチフレームバッファリング API に置き換わって削除されました。ストリーミングモードを有効にしていたコードは、DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO を指定した sensor.set_framebuffers() に切り替え、代わりに 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.14 を経て)1.15 に更新されました。標準ライブラリと言語の動作は上流の MicroPython 1.15 に従います。バージョン固有の micropython / 標準モジュールの動作に依存するスクリプトを再確認してください。

コミット: 364eea6c7, 26c5376b0

ImageIO の update_jpeg_buffer 引数の削除 (minor)

ImageIO の JPEG バッファ更新は、画像ソース引数からバッファを導出するよう再設計され、明示的な update_jpeg_buffer 引数は削除されました。ImageIO に update_jpeg_buffer を渡していたスクリプトは、その引数を削除する必要があります。

コミット: 5c6937bd1

移行チェックリスト

v4.0.0 へのクリーンな移植のための一般的な作業は次のとおりです:

  1. 削除されたストリーミングモードの使用箇所を、新しい sensor.set_framebuffers() マルチバッファリング API に置き換えます(ストリーミングモードの削除)。

  2. sensor.set_windowing() の呼び出しを、再設計されたより柔軟な引数処理に対して再確認します(ウィンドウの変更)。

  3. バージョン固有の MicroPython の動作に依存するスクリプトを MicroPython 1.15 に対して再検証します(MicroPython のバージョンアップ)。

  4. ImageIO の呼び出しから update_jpeg_buffer 引数を削除します(ImageIO の変更)。

その他のすべてのスクリプトはそのまま動作します。