v3.4.2

v3.4.2 è una grande release. Introduce l”OpenMV Cam H7 Plus (SDRAM, frame buffer enorme per la cattura ad alta risoluzione), la camera OV5640 da 5 MP, il supporto FDCAN, un driver OV2640 riscritto, Image.jpeg_encode_for_ide() e nuove librerie pid / modbus. L’API ifconfig() del WINC1500 e i valori di default di find_apriltags() sono cambiati — leggi le modifiche incompatibili più sotto.

In evidenza

  • OpenMV Cam H7 Plus — nuova scheda con un driver SDRAM e un frame buffer da circa 31 MB per la cattura ad alta risoluzione.

  • Driver per la camera OV5640 da 5 MP con rilevamento via I2C.

  • Supporto alla periferica FDCAN, con un esempio CAN.

  • Riscrittura dell’OV2640 — immagini dritte, funzioni automatiche funzionanti, snapshot JPEG e una nuova framesize sensor.XGA.

  • JPEG per l’IDEImage.jpeg_encode_for_ide() e trasmissione automatica all’IDE dei JPEG di grandi dimensioni.

  • Incompatibile: la semantica di WLAN.ifconfig() del WINC1500 è cambiata, MQTTClient.wait_msg() non solleva più eccezioni su una ricezione vuota e find_apriltags() usa di default la connettività a 4 direzioni — vedi le modifiche incompatibili.

Nuove funzionalità

  • WiFi — aggiunti WLAN.netinfo() (restituisce (rssi, security, ssid, mac, ip)) e la configurazione a IP statico del WINC1500 tramite WLAN.ifconfig(), con un esempio a IP statico.

  • FDCAN — aggiunto il supporto alla periferica FDCAN e un esempio can.py.

  • JPEG per l’IDE — aggiunti Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); i JPEG di grandi dimensioni vengono trasmessi automaticamente all’IDE quando il buffer è troppo piccolo.

  • Librerie — aggiunti una libreria controller PID pid, una libreria slave RTU modbus (con un esempio 32-modbus) e una classe SSD1306_I2C per display OLED I2C.

  • Esempi — aggiunto MQTT subscribe (mqtt_sub.py, con mqtt.py rinominato in mqtt_pub.py).

  • Sensore — aggiunta la framesize sensor.XGA (1024x768); print() / repr() su un’immagine Bayer ora produce metadati JSON.

Altre modifiche e miglioramenti

  • Riscritto il driver OV2640 (immagini dritte, funzioni automatiche funzionanti, snapshot JPEG accettato); abilitati gli apriltag ad alta risoluzione (elimina il limite della ROI <64K pixel sulle schede capaci); abbassato il PCLK dell’OV2640 da 72 MHz a 36 MHz.

Correzioni di bug

Imaging:

  • Corretti un overflow oltre la fine dell’immagine nelle operazioni binarie, la precisione printf/float nell’output di find_apriltags() / find_datamatrices() / find_lines(), il JSON malformato nel print() dei blob, find_apriltags() su immagini vflipped / hmirrored, il bug della ROI in find_lbp(), il timeout di compressione JPEG per le risoluzioni elevate e il reporting delle statistiche di memoria di fb_alloc.

Camera e sensori:

  • Corretti la manutenzione della cache e l’allineamento del buffer in modalità JPEG, la dimensione massima del trasferimento DCMI, la configurazione dei registri e le risoluzioni dell’OV2640, il ripristino dello stato di shutdown del sensore al reset e la qualità dell’immagine dell’OV7725 (aggiunto un filtro anti-banding per camera).

Networking e sistema:

  • Corretti l’hardfault/bug di socket.accept(), la gestione del timeout dei socket del WINC1500 (il timeout 0 ora è bloccante; i socket non vengono chiusi sul timeout di recv), il deep-sleep dell’H7, la RTC (aggiornamento upstream e problemi di EXTI / wakeup-timer / soft-reset dell’H7) e l’IRQ del timer di pyb.Servo (Servo era non funzionante).

Hardware e supporto schede

  • OpenMV Cam H7 Plus (OPENMV4R) — nuova scheda con un driver SDRAM che abilita un frame buffer grande (~31 MB).

  • OV5640 — nuovo driver per camera da 5 MP con rilevamento via I2C.

  • FDCAN — supporto alla periferica.

Modifiche incompatibili dell’API

Modifiche incompatibili dell’API visibili all’utente tra v3.4.1 e v3.4.2. Ambito: moduli C Python in modules/ e librerie Python in scripts/libraries/.

Ogni modifica è contrassegnata dal suo impatto:

  • major — riguarda la maggior parte degli script che usavano la funzionalità; sarà necessario adattare il codice.

  • minor — API ristretta; riguarda solo gli script che la usavano.

  • behavior — stessa API, risultati diversi; ricontrolla gli script ottimizzati.

Le modifiche sono raggruppate per impatto in quell’ordine. Se vuoi solo adattare il tuo codice, vai direttamente alla checklist di migrazione in fondo. Ogni hash di commit rimanda al relativo diff su GitHub.

La semantica di WLAN.ifconfig() del WINC1500 è cambiata (major)

Sul WiFi shield WINC1500, WLAN.ifconfig() non restituisce più la vecchia lista a 5 elementi [rssi, security, ssid, mac, ip]. Ora legge/imposta una tupla (ip, subnet, gateway, dns) (e supporta la configurazione a IP statico), in linea con l’interfaccia network standard. Il codice che leggeva le informazioni di connessione da ifconfig() deve passare al nuovo metodo WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commit: e685b484a

MQTTClient.wait_msg() restituisce None su una ricezione vuota (minor)

MQTTClient.wait_msg() della libreria mqtt ora restituisce None su una ricezione vuota invece di sollevare OSError(-1). Il codice che catturava OSError(-1) per rilevare un socket chiuso/vuoto deve invece controllare un valore di ritorno None.

Commit: 76239ea89

find_apriltags() usa di default la connettività a 4 direzioni (behavior)

image.find_apriltags() ora usa di default la connettività dei bordi a 4 direzioni (invece di 8) — più veloce, ma i tag rilevati possono differire leggermente. Per ripristinare l’accuratezza precedente, compila il firmware con IMLIB_ENABLE_FINE_APRILTAGS definito.

Commit: c1d9bec2c

Checklist di migrazione

Per un porting pulito a v3.4.2 il lavoro tipico è:

  1. Sostituire le letture delle informazioni di connessione da WLAN.ifconfig() del WINC1500 con WLAN.netinfo() (la modifica di ifconfig).

  2. Controllare MQTTClient.wait_msg() per un ritorno None invece di catturare OSError(-1) (la modifica di wait_msg).

  3. Ri-ottimizzare il rilevamento degli AprilTag o compilare con IMLIB_ENABLE_FINE_APRILTAGS se ti serve la connettività a 8 direzioni (la modifica di find_apriltags).

Tutti gli altri script funzionano senza modifiche.