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.