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 JPEG —
Image.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, afind_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średnictwemWLAN.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 RTUmodbus(z przykładem 32-modbus) oraz klasęSSD1306_I2Cdla wyświetlaczy OLED na I2C.Przykłady — dodano subskrypcję MQTT (
mqtt_sub.py, ze zmianą nazwymqtt.pynamqtt_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 wprint()plam (blob),find_apriltags()na obrazach vflipped / hmirrored, błąd ROIfind_lbp(), limit czasu kompresji JPEG dla dużych rozdzielczości oraz raportowanie statystyk pamięcifb_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
Lista kontrolna migracji#
Aby czysto przenieść kod do v3.4.2, typowa praca obejmuje:
Zastąpienie odczytów informacji o połączeniu z
WLAN.ifconfig()WINC1500 metodąWLAN.netinfo()(zmiana w ifconfig).Sprawdzanie zwracanej wartości
NonezMQTTClient.wait_msg()zamiast przechwytywaniaOSError(-1)(zmiana w wait_msg).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.