v4.0.0#

v4.0.0 to główne wydanie v3 → v4. Wprowadza nowoczesne API buforowania wielu ramek sensor (podwójne / potrójne buforowanie oraz wideo FIFO), wywołanie zwrotne zakończenia ramki, moduł Bluetooth (stos NimBLE) z obsługą Portenta, początkowy sterownik kamery MT9M114, przechwytywanie obrazu z odciążeniem MDMA, obsługę Bayer/JPEG w image.draw_image() oraz skok do MicroPython 1.15. Usunięto starszy tryb strumieniowania, a sensor.set_windowing() został przerobiony — przeczytaj poniższe przełomowe zmiany.

Najważniejsze zmiany#

  • Buforowanie wielu rameksensor zyskuje podwójne buforowanie, potrójne buforowanie oraz tryb wideo FIFO dla wyższej, płynniejszej liczby klatek.

  • Wywołanie zwrotne zakończenia ramki — zarejestruj wywołanie zwrotne uruchamiane, gdy nowa ramka jest gotowa, dla nieblokujących potoków przechwytywania.

  • Bluetooth — moduł bluetooth zbudowany na stosie NimBLE, włączony na Arduino Portenta H7 (z przykładem BLE).

  • MT9M114 — początkowy sterownik sensora kamery.

  • Szybsze przechwytywanie — odciążenie MDMA dla przechwytywania danych kamery; draw_image() akceptuje teraz źródła/cele Bayer i JPEG.

  • MicroPython 1.15 — dołączony MicroPython został zaktualizowany z 1.13 do 1.15.

  • Przełomowe: usunięto starszy tryb strumieniowania, a sensor.set_windowing() został przerobiony — zobacz przełomowe zmiany.

Nowe funkcje#

  • Wielobuforowanie sensora — dodano sensor.set_framebuffers() / sensor.get_framebuffers() oraz tryby SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO, a także sensor.get_frame_available() dla przechwytywania podwójnego, potrójnego i wideo FIFO.

  • Wywołanie zwrotne zakończenia ramki — dodano sensor.set_frame_callback(), dzięki czemu wywołanie zwrotne Pythona uruchamia się po zakończeniu każdej nowej ramki.

  • Bluetooth — dodano moduł bluetooth oparty na stosie NimBLE (submoduł NimBLE, sterownik CYW-BT), włączony na Arduino Portenta H7 wraz z przykładem BLE.

  • MT9M114 — dodano początkowy sterownik sensora kamery MT9M114.

  • draw_image — dodano obsługę debayerowania i kopiowania JPEG, dzięki czemu image.draw_image() akceptuje obrazy źródłowe/docelowe Bayer i JPEG.

  • Odciążenie przechwytywania MDMA — przechwytywanie danych kamery jest odciążane na MDMA dla wyższej przepustowości.

  • Argument palety kolorów można teraz wyłączyć, przekazując -1 (ponieważ None jest zarezerwowane jako prawidłowy argument).

Pozostałe zmiany i ulepszenia#

  • Przełączono na nową programową implementację I2C; zsynchronizowano z głównym repozytorium MicroPython; konfiguracja ulab per płytka; włączono podstawowe wbudowane moduły dla OpenMV 2; sprawiedliwsze blokowanie odczytu bufora ramki; obsługa muteksów rozszerzona na Cortex-M0/M0+ z limitem czasu blokady.

Poprawki błędów#

Kamera i obrazowanie:

  • Naprawiono niezawodność inicjalizacji FLIR Lepton na płytce Pure Thermal, obsługę bufora JPEG / pauzy ImageIO, ustawienia vflip/hmirror HM01B0, opróżnianie bufora JPEG przy unieważnieniu obrazu oraz flagę cropped, która była ustawiana, gdy framesize był nieprawidłowy.

System i łączność:

  • Naprawiono opróżnianie komend USB i komendę resetu do bootloadera, inicjalizację muteksów, źródło zegara UART, definicję strony kodowej FatFS, obsługę ACK poza pasmem WINC1500, debugowanie WiFi oraz USB PID Nano33; odizolowano dedykowane pady analogowe.

Sprzęt i obsługa płytek#

  • Sensor kamery MT9M114 (początkowy sterownik).

  • Arduino Portenta H7 — włączony Bluetooth (NimBLE) z przykładem BLE.

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — flaga debugowania WiFi wyłączona tam, gdzie nie jest obsługiwana; dodano przykład blinky; poprawka USB PID.

Przełomowe zmiany API#

Widoczne dla użytkownika zmiany API między v3.9.4 a v4.0.0. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona swoim wpływem:

  • major — dotyczy większości skryptów; niemal na pewno konieczne będzie przeniesienie kodu.

  • minor — wąskie API; dotyczy tylko skryptów, które z niego korzystały.

  • behavior — to samo API, inne wyniki; sprawdź ponownie dostrojone skrypty.

Zmiany są pogrupowane według wpływu w tej kolejności. Jeśli chcesz po prostu przenieść swój kod, przejdź do listy kontrolnej migracji na końcu. Każdy hash commita prowadzi do jego diffu na GitHubie.

Usunięto tryb strumieniowania (major)#

Starszy tryb strumieniowania sensora został usunięty na rzecz nowego API buforowania wielu ramek. Kod, który włączał tryb strumieniowania, musi przejść na sensor.set_framebuffers() z DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO i sterować przechwytywaniem za pomocą sensor.snapshot() / sensor.get_frame_available().

Commity: a42f3a647

sensor.set_windowing() przerobiony (behavior)#

sensor.set_windowing() został uczyniony znacznie bardziej elastycznym: akceptuje teraz wiele form argumentów (krotkę obszaru, lub wyśrodkowaną szerokość/wysokość, lub x, y, w, h) i rozwiązuje okno względem bieżącej rozdzielczości. Skrypty, które przekazywały argumenty okienkowania w starej, sztywnej formie, mogą wybrać inny obszar i powinny zostać ponownie sprawdzone.

Commity: 3e9c43554

MicroPython 1.13 → 1.15 (behavior)#

Dołączony rdzeń MicroPython został zaktualizowany z 1.13 do 1.15 (poprzez 1.14). Zachowanie biblioteki standardowej i języka jest zgodne z głównym MicroPython 1.15; sprawdź ponownie skrypty zależne od zachowania micropython / modułów standardowych specyficznego dla wersji.

Commity: 364eea6c7, 26c5376b0

Usunięto argument update_jpeg_buffer ImageIO (minor)#

Aktualizacja bufora JPEG ImageIO została przerobiona tak, aby wyprowadzać bufor z argumentu źródłowego obrazu, a jawny argument update_jpeg_buffer został usunięty. Skrypty, które przekazywały update_jpeg_buffer do ImageIO, muszą porzucić ten argument.

Commity: 5c6937bd1

Lista kontrolna migracji#

Aby czysto przenieść się na v4.0.0, typowa praca to:

  1. Zastąp wszelkie użycia usuniętego trybu strumieniowania nowym API wielobuforowania sensor.set_framebuffers() (usunięto tryb strumieniowania).

  2. Sprawdź ponownie wywołania sensor.set_windowing() względem przerobionej, bardziej elastycznej obsługi argumentów (zmiana okienkowania).

  3. Zweryfikuj ponownie skrypty zależne od zachowania MicroPython specyficznego dla wersji względem MicroPython 1.15 (aktualizacja MicroPython).

  4. Porzuć argument update_jpeg_buffer z wywołań ImageIO (zmiana ImageIO).

Wszystkie pozostałe skrypty działają bez zmian.