v3.4.2

v3.4.2 is een grote release. Deze introduceert de OpenMV Cam H7 Plus (SDRAM, enorme framebuffer voor opname op hoge resolutie), de OV5640 5 MP-camera, FDCAN-ondersteuning, een herschreven OV2640-driver, Image.jpeg_encode_for_ide() en nieuwe pid- / modbus-bibliotheken. De WINC1500 ifconfig()-API en de standaardwaarden van find_apriltags() zijn gewijzigd — lees de breaking changes hieronder.

Hoogtepunten

  • OpenMV Cam H7 Plus — nieuw bord met een SDRAM-driver en een framebuffer van ~31 MB voor opname op hoge resolutie.

  • OV5640 5 MP-cameradriver met I2C-gebaseerde detectie.

  • FDCAN-randapparaatondersteuning, met een CAN-voorbeeld.

  • OV2640-herschrijving — rechtopstaande afbeeldingen, werkende automatische functies, JPEG-momentopname en een nieuwe sensor.XGA-framesize.

  • IDE-JPEGImage.jpeg_encode_for_ide() en automatische overdracht van grote JPEG’s naar de IDE.

  • Breaking: de semantiek van WINC1500 WLAN.ifconfig() is gewijzigd, MQTTClient.wait_msg() werpt niet langer een uitzondering bij een lege recv, en find_apriltags() gebruikt standaard 4-weg-connectiviteit — zie de breaking changes.

Nieuwe functies

  • WiFiWLAN.netinfo() toegevoegd (retourneert (rssi, security, ssid, mac, ip)) en WINC1500 statische-IP-configuratie via WLAN.ifconfig(), met een statische-IP-voorbeeld.

  • FDCAN — FDCAN-randapparaatondersteuning en een can.py-voorbeeld toegevoegd.

  • IDE-JPEGImage.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide() toegevoegd; grote JPEG’s worden automatisch naar de IDE overgedragen wanneer de buffer te klein is.

  • Bibliotheken — een pid PID-regelaarbibliotheek, een modbus RTU-slavebibliotheek (met een 32-modbus-voorbeeld) en een SSD1306_I2C-klasse voor I2C OLED-displays toegevoegd.

  • Voorbeelden — MQTT subscribe toegevoegd (mqtt_sub.py, met mqtt.py hernoemd naar mqtt_pub.py).

  • Sensor — de sensor.XGA (1024x768)-framesize toegevoegd; print() / repr() op een Bayer-afbeelding levert nu JSON-metadata op.

Overige wijzigingen en verbeteringen

  • De OV2640-driver herschreven (rechtopstaande afbeeldingen, werkende automatische functies, JPEG-momentopname geaccepteerd); apriltags op hoge resolutie ingeschakeld (heft de ROI-limiet van <64K-pixels op geschikte borden op); de OV2640 PCLK verlaagd van 72 MHz naar 36 MHz.

Bugfixes

Beeldverwerking:

  • Een overflow voorbij het einde van de afbeelding bij binaire bewerkingen verholpen, de printf/float-precisie in de uitvoer van find_apriltags() / find_datamatrices() / find_lines(), misvormde JSON in blob-print(), find_apriltags() op vflipped / hmirrored afbeeldingen, de find_lbp() ROI-bug, de JPEG-compressietimeout voor grote resoluties en de geheugenstatistiekrapportage van fb_alloc.

Camera en sensoren:

  • Het cache-onderhoud en de bufferuitlijning in JPEG-modus verholpen, de maximale DCMI-overdrachtsgrootte, de OV2640-registerconfiguratie en -resoluties, het herstellen van de sensor-uitschakelstatus bij reset, en de beeldkwaliteit van de OV7725 (een banding-filter per camera toegevoegd).

Netwerken en systeem:

  • De hardfault/bug in socket.accept() verholpen, de afhandeling van WINC1500-sockettimeouts (timeout 0 blokkeert nu; sockets worden niet gesloten bij een recv-timeout), H7 deep-sleep, de RTC (upstream-update en H7 EXTI- / wakeup-timer- / soft-reset-problemen) en de timer-IRQ van pyb.Servo (Servo was niet functioneel).

Hardware- en bordondersteuning

  • OpenMV Cam H7 Plus (OPENMV4R) — nieuw bord met een SDRAM-driver die een grote framebuffer (~31 MB) mogelijk maakt.

  • OV5640 — nieuwe 5 MP-cameradriver met I2C-gebaseerde detectie.

  • FDCAN — randapparaatondersteuning.

Breaking API-wijzigingen

Voor de gebruiker zichtbare API-wijzigingen tussen v3.4.1 en v3.4.2. Reikwijdte: Python C-modules in modules/ en Python-bibliotheken in scripts/libraries/.

Elke wijziging is getagd met de impact ervan:

  • major — treft de meeste scripts die de functie gebruikten; je zult code moeten porten.

  • minor — beperkte API; treft alleen scripts die deze gebruikten.

  • behavior — dezelfde API, andere resultaten; controleer afgestemde scripts opnieuw.

Wijzigingen zijn in die volgorde gegroepeerd per impact. Als je alleen je code wilt porten, ga dan naar de migratiechecklist aan het einde. Elke commit-hash linkt naar de bijbehorende diff op GitHub.

Semantiek van WINC1500 WLAN.ifconfig() gewijzigd (major)

Op het WINC1500 WiFi-shield retourneert WLAN.ifconfig() niet langer de oude 5-elementenlijst [rssi, security, ssid, mac, ip]. Het haalt/zet nu een (ip, subnet, gateway, dns)-tuple op (en ondersteunt statische-IP-configuratie), overeenkomstig de standaard network-interface. Code die verbindingsinformatie uit ifconfig() las, moet overschakelen naar de nieuwe methode WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

MQTTClient.wait_msg() retourneert None bij een lege recv (minor)

MQTTClient.wait_msg() van de mqtt-bibliotheek retourneert nu None bij een lege ontvangst in plaats van een OSError(-1) te werpen. Code die OSError(-1) opving om een gesloten/lege socket te detecteren, moet in plaats daarvan controleren op een None-retourwaarde.

Commits: 76239ea89

find_apriltags() gebruikt standaard 4-weg-connectiviteit (behavior)

image.find_apriltags() gebruikt nu standaard 4-weg- (in plaats van 8-weg-) randconnectiviteit — sneller, maar gedetecteerde tags kunnen iets afwijken. Om de eerdere nauwkeurigheid te herstellen, bouw je de firmware met IMLIB_ENABLE_FINE_APRILTAGS gedefinieerd.

Commits: c1d9bec2c

Migratiechecklist

Voor een schone port naar v3.4.2 is het gebruikelijke werk:

  1. Vervang het uitlezen van verbindingsinformatie via WINC1500 WLAN.ifconfig() door WLAN.netinfo() (de ifconfig-wijziging).

  2. Controleer MQTTClient.wait_msg() op een None-retourwaarde in plaats van OSError(-1) op te vangen (de wait_msg-wijziging).

  3. Stem de AprilTag-detectie opnieuw af of bouw met IMLIB_ENABLE_FINE_APRILTAGS als je 8-weg-connectiviteit nodig hebt (de find_apriltags-wijziging).

Alle overige scripts draaien ongewijzigd.