v3.4.2

v3.4.2 es una versión grande. Introduce la OpenMV Cam H7 Plus (SDRAM, framebuffer enorme para captura de alta resolución), la cámara OV5640 de 5 MP, compatibilidad con FDCAN, un controlador OV2640 reescrito, Image.jpeg_encode_for_ide() y nuevas bibliotecas pid / modbus. La API ifconfig() del WINC1500 y los valores predeterminados de find_apriltags() cambiaron — lee los cambios incompatibles más abajo.

Aspectos destacados

  • OpenMV Cam H7 Plus — nueva placa con un controlador SDRAM y un framebuffer de ~31 MB para captura de alta resolución.

  • Controlador de cámara OV5640 de 5 MP con detección basada en I2C.

  • Compatibilidad con el periférico FDCAN, con un ejemplo de CAN.

  • Reescritura del OV2640 — imágenes en posición vertical, funciones automáticas operativas, captura JPEG y un nuevo tamaño de fotograma sensor.XGA.

  • JPEG del IDEImage.jpeg_encode_for_ide() y transmisión automática de JPEG grandes al IDE.

  • Incompatible: la semántica de WLAN.ifconfig() del WINC1500 cambió, MQTTClient.wait_msg() ya no lanza una excepción ante una recepción vacía y find_apriltags() usa por defecto conectividad de 4 direcciones — consulta los cambios incompatibles.

Nuevas características

  • WiFi — se añadieron WLAN.netinfo() (devuelve (rssi, security, ssid, mac, ip)) y la configuración de IP estática del WINC1500 mediante WLAN.ifconfig(), con un ejemplo de IP estática.

  • FDCAN — se añadió compatibilidad con el periférico FDCAN y un ejemplo can.py.

  • JPEG del IDE — se añadieron Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); los JPEG grandes se transmiten automáticamente al IDE cuando el búfer es demasiado pequeño.

  • Bibliotecas — se añadieron una biblioteca de controlador PID pid, una biblioteca de esclavo RTU modbus (con un ejemplo 32-modbus) y una clase SSD1306_I2C para pantallas OLED por I2C.

  • Ejemplos — se añadió la suscripción MQTT (mqtt_sub.py, con mqtt.py renombrado a mqtt_pub.py).

  • Sensor — se añadió el tamaño de fotograma sensor.XGA (1024x768); print() / repr() en una imagen Bayer ahora emite metadatos JSON.

Otros cambios y mejoras

  • Se reescribió el controlador OV2640 (imágenes en posición vertical, funciones automáticas operativas, captura JPEG aceptada); se habilitaron los apriltags de alta resolución (elimina el límite de ROI de <64K píxeles en las placas capaces); se redujo el PCLK del OV2640 de 72 MHz a 36 MHz.

Corrección de errores

Imagen:

  • Se corrigió un desbordamiento de operaciones binarias más allá del final de la imagen, la precisión de printf/float en la salida de find_apriltags() / find_datamatrices() / find_lines(), JSON malformado en print() de blob, find_apriltags() en imágenes con vflip / hmirror, el error de ROI de find_lbp(), el tiempo de espera de compresión JPEG para resoluciones grandes y el informe de estadísticas de memoria de fb_alloc.

Cámara y sensores:

  • Se corrigió el mantenimiento de caché en modo JPEG y la alineación del búfer, el tamaño máximo de transferencia DCMI, la configuración de registros y las resoluciones del OV2640, la restauración del estado de apagado del sensor al reiniciar y la calidad de imagen del OV7725 (se añadió un filtro de bandeo por cámara).

Redes y sistema:

  • Se corrigió el hardfault/error de socket.accept(), el manejo del tiempo de espera de sockets del WINC1500 (el tiempo de espera 0 ahora es bloqueante; los sockets no se cierran ante un tiempo de espera de recepción), el sueño profundo del H7, el RTC (actualización del upstream y problemas de EXTI / temporizador de despertado / reinicio por software del H7) y la IRQ del temporizador de pyb.Servo (el Servo no funcionaba).

Hardware y compatibilidad de placas

  • OpenMV Cam H7 Plus (OPENMV4R) — nueva placa con un controlador SDRAM que habilita un framebuffer grande (~31 MB).

  • OV5640 — nuevo controlador de cámara de 5 MP con detección basada en I2C.

  • FDCAN — compatibilidad con el periférico.

Cambios incompatibles en la API

Rupturas de la API visibles para el usuario entre v3.4.1 y v3.4.2. Alcance: módulos C de Python en modules/ y bibliotecas de Python en scripts/libraries/.

Cada cambio está etiquetado con su impacto:

  • mayor — afecta a la mayoría de los scripts que usaban la característica; tendrás que adaptar el código.

  • menor — API reducida; solo afecta a los scripts que la usaban.

  • comportamiento — misma API, resultados distintos; vuelve a revisar los scripts ajustados.

Los cambios se agrupan por impacto en ese orden. Si solo quieres adaptar tu código, salta a la lista de comprobación de migración al final. Cada hash de commit enlaza con su diff en GitHub.

La semántica de WLAN.ifconfig() del WINC1500 cambió (mayor)

En el WiFi shield WINC1500, WLAN.ifconfig() ya no devuelve la antigua lista de 5 elementos [rssi, security, ssid, mac, ip]. Ahora obtiene/establece una tupla (ip, subnet, gateway, dns) (y admite la configuración de IP estática), coincidiendo con la interfaz estándar de network. El código que leía información de conexión desde ifconfig() debe cambiar al nuevo método WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

MQTTClient.wait_msg() devuelve None ante una recepción vacía (menor)

MQTTClient.wait_msg() de la biblioteca mqtt ahora devuelve None ante una recepción vacía en lugar de lanzar OSError(-1). El código que capturaba OSError(-1) para detectar un socket cerrado/vacío debe comprobar un valor de retorno None en su lugar.

Commits: 76239ea89

find_apriltags() usa por defecto conectividad de 4 direcciones (comportamiento)

image.find_apriltags() ahora usa por defecto conectividad de bordes de 4 direcciones (en lugar de 8 direcciones) — más rápido, pero las etiquetas detectadas pueden diferir ligeramente. Para restaurar la precisión anterior, compila el firmware con IMLIB_ENABLE_FINE_APRILTAGS definido.

Commits: c1d9bec2c

Lista de comprobación de migración

Para una adaptación limpia a v3.4.2, el trabajo habitual es:

  1. Reemplaza las lecturas de información de conexión de WLAN.ifconfig() del WINC1500 por WLAN.netinfo() (el cambio de ifconfig).

  2. Comprueba si MQTTClient.wait_msg() devuelve None en lugar de capturar OSError(-1) (el cambio de wait_msg).

  3. Vuelve a ajustar la detección de AprilTag o compila con IMLIB_ENABLE_FINE_APRILTAGS si necesitas conectividad de 8 direcciones (el cambio de find_apriltags).

Todos los demás scripts se ejecutan sin cambios.