v3.4.2

v3.4.2 ist ein großes Release. Es führt die OpenMV Cam H7 Plus (SDRAM, riesiger Framebuffer für hochauflösende Aufnahmen), die OV5640 5 MP-Kamera, FDCAN-Unterstützung, einen neu geschriebenen OV2640-Treiber, Image.jpeg_encode_for_ide() sowie neue pid- / modbus-Bibliotheken ein. Die WINC1500-ifconfig()-API und die Standardwerte von find_apriltags() haben sich geändert — lesen Sie die nachfolgenden Breaking Changes.

Highlights

  • OpenMV Cam H7 Plus — neues Board mit einem SDRAM-Treiber und einem ~31 MB großen Framebuffer für hochauflösende Aufnahmen.

  • OV5640 5 MP-Kameratreiber mit I2C-basierter Erkennung.

  • FDCAN-Peripherie-Unterstützung, mit einem CAN-Beispiel.

  • OV2640-Neufassung — aufrechte Bilder, funktionierende Auto-Funktionen, JPEG-Schnappschuss und eine neue sensor.XGA-Framesize.

  • IDE-JPEGImage.jpeg_encode_for_ide() und automatische Übertragung großer JPEGs an die IDE.

  • Breaking: Die Semantik von WINC1500 WLAN.ifconfig() hat sich geändert, MQTTClient.wait_msg() löst bei leerem Empfang keine Ausnahme mehr aus und find_apriltags() verwendet standardmäßig 4-Wege-Konnektivität — siehe die Breaking Changes.

Neue Funktionen

  • WiFiWLAN.netinfo() (gibt (rssi, security, ssid, mac, ip) zurück) und WINC1500-Static-IP-Konfiguration über WLAN.ifconfig() hinzugefügt, mit einem Static-IP-Beispiel.

  • FDCAN — FDCAN-Peripherie-Unterstützung und ein can.py-Beispiel hinzugefügt.

  • IDE-JPEGImage.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide() hinzugefügt; große JPEGs werden automatisch an die IDE übertragen, wenn der Puffer zu klein ist.

  • Bibliotheken — eine pid-PID-Reglerbibliothek, eine modbus-RTU-Slave-Bibliothek (mit einem 32-modbus-Beispiel) und eine SSD1306_I2C-Klasse für I2C-OLED-Displays hinzugefügt.

  • Beispiele — MQTT-Subscribe (mqtt_sub.py, wobei mqtt.py in mqtt_pub.py umbenannt wurde) hinzugefügt.

  • Sensor — die sensor.XGA-Framesize (1024x768) hinzugefügt; print() / repr() auf einem Bayer-Bild gibt nun JSON-Metadaten aus.

Weitere Änderungen und Verbesserungen

  • Den OV2640-Treiber neu geschrieben (aufrechte Bilder, funktionierende Auto-Funktionen, JPEG-Schnappschuss akzeptiert); hochauflösende AprilTags aktiviert (hebt die ROI-Begrenzung von <64K Pixeln auf leistungsfähigen Boards auf); den OV2640-PCLK von 72 MHz auf 36 MHz gesenkt.

Fehlerbehebungen

Bildverarbeitung:

  • Behoben: ein Binär-Ops-Überlauf über das Bildende hinaus, die printf/Float-Präzision in der Ausgabe von find_apriltags() / find_datamatrices() / find_lines(), fehlerhaftes JSON in print() von Blobs, find_apriltags() auf vflip-/hmirror-Bildern, der find_lbp()-ROI-Bug, der JPEG-Kompressions-Timeout bei großen Auflösungen und das fb_alloc-Speicherstatistik-Reporting.

Kamera und Sensoren:

  • Behoben: JPEG-Modus-Cache-Wartung und Pufferausrichtung, die maximale DCMI-Transfergröße, OV2640-Register-Konfiguration und -Auflösungen, das Wiederherstellen des Sensor-Shutdown-Zustands beim Reset und die Bildqualität des OV7725 (ein kamerabezogener Banding-Filter hinzugefügt).

Netzwerk und System:

  • Behoben: ein socket.accept()-Hardfault/-Bug, die WINC1500-Socket-Timeout-Behandlung (Timeout 0 ist jetzt blockierend; Sockets werden bei Recv-Timeout nicht geschlossen), der H7-Deep-Sleep, die RTC (Upstream-Update sowie H7-EXTI- / Wakeup-Timer- / Soft-Reset-Probleme) und der Timer-IRQ von pyb.Servo (Servo war funktionslos).

Hardware- und Board-Unterstützung

  • OpenMV Cam H7 Plus (OPENMV4R) — neues Board mit einem SDRAM-Treiber, der einen großen (~31 MB) Framebuffer ermöglicht.

  • OV5640 — neuer 5-MP-Kameratreiber mit I2C-basierter Erkennung.

  • FDCAN — Peripherie-Unterstützung.

Breaking-API-Änderungen

Für Benutzer sichtbare API-Brüche zwischen v3.4.1 und v3.4.2. Umfang: Python-C-Module in modules/ und Python-Bibliotheken in scripts/libraries/.

Jede Änderung ist mit ihrer Auswirkung gekennzeichnet:

  • major — betrifft die meisten Skripte, die die Funktion verwendet haben; Sie müssen Ihren Code anpassen.

  • minor — eingeschränkte API; betrifft nur Skripte, die sie verwendet haben.

  • behavior — gleiche API, andere Ergebnisse; überprüfen Sie abgestimmte Skripte erneut.

Die Änderungen sind in dieser Reihenfolge nach Auswirkung gruppiert. Wenn Sie nur Ihren Code portieren möchten, springen Sie zur Migrations-Checkliste am Ende. Jeder Commit-Hash verlinkt auf seinen Diff auf GitHub.

Semantik von WINC1500 WLAN.ifconfig() geändert (major)

Auf dem WINC1500-WiFi-Shield gibt WLAN.ifconfig() nicht mehr die alte 5-elementige Liste [rssi, security, ssid, mac, ip] zurück. Es liest/setzt nun ein (ip, subnet, gateway, dns)-Tupel (und unterstützt Static-IP-Konfiguration), passend zur standardmäßigen network-Schnittstelle. Code, der Verbindungsinformationen aus ifconfig() gelesen hat, muss auf die neue Methode WLAN.netinfo() ((rssi, security, ssid, mac, ip)) umstellen.

Commits: e685b484a

MQTTClient.wait_msg() gibt bei leerem Empfang None zurück (minor)

MQTTClient.wait_msg() der mqtt-Bibliothek gibt nun bei einem leeren Empfang None zurück, statt OSError(-1) auszulösen. Code, der OSError(-1) abgefangen hat, um einen geschlossenen/leeren Socket zu erkennen, muss stattdessen auf einen None-Rückgabewert prüfen.

Commits: 76239ea89

find_apriltags() verwendet standardmäßig 4-Wege-Konnektivität (behavior)

image.find_apriltags() verwendet nun standardmäßig 4-Wege- (statt 8-Wege-) Kantenkonnektivität — schneller, aber erkannte Tags können leicht abweichen. Um die vorherige Genauigkeit wiederherzustellen, kompilieren Sie die Firmware mit definiertem IMLIB_ENABLE_FINE_APRILTAGS.

Commits: c1d9bec2c

Migrations-Checkliste

Für eine saubere Portierung auf v3.4.2 fällt typischerweise folgende Arbeit an:

  1. Ersetzen Sie Verbindungsinfo-Lesevorgänge von WINC1500 WLAN.ifconfig() durch WLAN.netinfo() (die ifconfig-Änderung).

  2. Prüfen Sie MQTTClient.wait_msg() auf einen None-Rückgabewert, statt OSError(-1) abzufangen (die wait_msg-Änderung).

  3. Stimmen Sie die AprilTag-Erkennung neu ab oder kompilieren Sie mit IMLIB_ENABLE_FINE_APRILTAGS, wenn Sie 8-Wege-Konnektivität benötigen (die find_apriltags-Änderung).

Alle anderen Skripte laufen unverändert.