v3.4.2#

v3.4.2 to duże wydanie. Wprowadza OpenMV Cam H7 Plus (SDRAM, ogromny bufor ramki do przechwytywania w wysokiej rozdzielczości), kamerę OV5640 5 MP, obsługę FDCAN, przepisany sterownik OV2640, Image.jpeg_encode_for_ide() oraz nowe biblioteki pid / modbus. Zmieniło się API ifconfig() WINC1500 oraz domyślne ustawienia find_apriltags() — zapoznaj się z opisem zmian łamiących kompatybilność poniżej.

Najważniejsze zmiany#

  • OpenMV Cam H7 Plus — nowa płytka ze sterownikiem SDRAM i buforem ramki o wielkości ~31 MB do przechwytywania w wysokiej rozdzielczości.

  • Sterownik kamery OV5640 5 MP z detekcją opartą na I2C.

  • Obsługa urządzenia peryferyjnego FDCAN, wraz z przykładem CAN.

  • Przepisanie OV2640 — wyprostowane obrazy, działające funkcje automatyczne, zrzut obrazu JPEG oraz nowy rozmiar ramki sensor.XGA.

  • IDE JPEGImage.jpeg_encode_for_ide() oraz automatyczne przesyłanie dużych plików JPEG do IDE.

  • Zmiana łamiąca kompatybilność: zmieniła się semantyka WLAN.ifconfig() WINC1500, MQTTClient.wait_msg() nie zgłasza już wyjątku przy pustym odbiorze, a find_apriltags() domyślnie używa łączności 4-kierunkowej — patrz zmiany łamiące kompatybilność.

Nowe funkcje#

  • WiFi — dodano WLAN.netinfo() (zwraca (rssi, security, ssid, mac, ip)) oraz konfigurację statycznego IP WINC1500 za pośrednictwem WLAN.ifconfig(), wraz z przykładem statycznego IP.

  • FDCAN — dodano obsługę urządzenia peryferyjnego FDCAN oraz przykład can.py.

  • IDE JPEG — dodano Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); duże pliki JPEG są automatycznie przesyłane do IDE, gdy bufor jest zbyt mały.

  • Biblioteki — dodano bibliotekę regulatora PID pid, bibliotekę slave RTU modbus (z przykładem 32-modbus) oraz klasę SSD1306_I2C dla wyświetlaczy OLED na I2C.

  • Przykłady — dodano subskrypcję MQTT (mqtt_sub.py, ze zmianą nazwy mqtt.py na mqtt_pub.py).

  • Sensor — dodano rozmiar ramki sensor.XGA (1024x768); print() / repr() na obrazie Bayer wypisuje teraz metadane JSON.

Pozostałe zmiany i ulepszenia#

  • Przepisano sterownik OV2640 (wyprostowane obrazy, działające funkcje automatyczne, akceptowany zrzut obrazu JPEG); włączono apriltagi w wysokiej rozdzielczości (znosi limit ROI <64K pikseli na płytkach o odpowiednich możliwościach); obniżono PCLK OV2640 z 72 MHz do 36 MHz.

Poprawki błędów#

Obrazowanie:

  • Naprawiono przepełnienie operacji binarnych poza końcem obrazu, precyzję printf/float w wyjściu find_apriltags() / find_datamatrices() / find_lines(), zniekształcony JSON w print() plam (blob), find_apriltags() na obrazach vflipped / hmirrored, błąd ROI find_lbp(), limit czasu kompresji JPEG dla dużych rozdzielczości oraz raportowanie statystyk pamięci fb_alloc.

Kamera i sensory:

  • Naprawiono utrzymanie pamięci podręcznej i wyrównanie bufora w trybie JPEG, maksymalny rozmiar transferu DCMI, konfigurację rejestrów i rozdzielczości OV2640, przywracanie stanu wyłączenia sensora przy resecie oraz jakość obrazu OV7725 (dodano filtr pasmowy dla każdej kamery).

Sieć i system:

  • Naprawiono błąd/hardfault socket.accept(), obsługę limitu czasu gniazda WINC1500 (limit czasu 0 jest teraz blokujący; gniazda nie są zamykane przy limicie czasu odbioru), tryb głębokiego uśpienia H7, RTC (aktualizacja z upstream oraz problemy EXTI / wakeup-timer / soft-reset H7) oraz IRQ licznika czasu (timer) pyb.Servo (Servo nie działało).

Sprzęt i obsługa płytek#

  • OpenMV Cam H7 Plus (OPENMV4R) — nowa płytka ze sterownikiem SDRAM umożliwiającym duży (~31 MB) bufor ramki.

  • OV5640 — nowy sterownik kamery 5 MP z detekcją opartą na I2C.

  • FDCAN — obsługa urządzenia peryferyjnego.

Zmiany API łamiące kompatybilność#

Widoczne dla użytkownika zmiany API łamiące kompatybilność między v3.4.1 a v3.4.2. Zakres: moduły C Pythona w modules/ oraz biblioteki Pythona w scripts/libraries/.

Każda zmiana jest oznaczona jej wpływem:

  • major — dotyczy większości skryptów korzystających z danej funkcji; 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; ponownie sprawdź 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 skrót commita prowadzi do jego diffu na GitHub.

Zmiana semantyki WLAN.ifconfig() WINC1500 (major)#

Na shieldzie WiFi WINC1500 WLAN.ifconfig() nie zwraca już starej 5-elementowej listy [rssi, security, ssid, mac, ip]. Teraz pobiera/ustawia krotkę (ip, subnet, gateway, dns) (i obsługuje konfigurację statycznego IP), zgodnie ze standardowym interfejsem network. Kod, który odczytywał informacje o połączeniu z ifconfig(), musi przejść na nową metodę WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commity: e685b484a

MQTTClient.wait_msg() zwraca None przy pustym odbiorze (minor)#

MQTTClient.wait_msg() z biblioteki mqtt zwraca teraz None przy pustym odbiorze zamiast zgłaszać OSError(-1). Kod, który przechwytywał OSError(-1), aby wykryć zamknięte/puste gniazdo, musi zamiast tego sprawdzać zwracaną wartość None.

Commity: 76239ea89

find_apriltags() domyślnie używa łączności 4-kierunkowej (behavior)#

image.find_apriltags() domyślnie używa teraz łączności krawędzi 4-kierunkowej (zamiast 8-kierunkowej) — szybciej, ale wykryte tagi mogą się nieznacznie różnić. Aby przywrócić poprzednią dokładność, zbuduj oprogramowanie układowe ze zdefiniowanym IMLIB_ENABLE_FINE_APRILTAGS.

Commity: c1d9bec2c

Lista kontrolna migracji#

Aby czysto przenieść kod do v3.4.2, typowa praca obejmuje:

  1. Zastąpienie odczytów informacji o połączeniu z WLAN.ifconfig() WINC1500 metodą WLAN.netinfo() (zmiana w ifconfig).

  2. Sprawdzanie zwracanej wartości None z MQTTClient.wait_msg() zamiast przechwytywania OSError(-1) (zmiana w wait_msg).

  3. Ponowne dostrojenie wykrywania AprilTag lub zbudowanie z IMLIB_ENABLE_FINE_APRILTAGS, jeśli potrzebujesz łączności 8-kierunkowej (zmiana w find_apriltags).

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