v4.0.0

v4.0.0 é a grande versão v3 → v4. Ela introduz a moderna API de buffering multi-quadro do sensor (buffering duplo / triplo e um FIFO de vídeo), um callback de quadro completo, um módulo Bluetooth (stack NimBLE) com suporte ao Portenta, o driver inicial da câmera MT9M114, captura de câmera descarregada via MDMA, suporte a Bayer/JPEG no image.draw_image() e um salto para o MicroPython 1.15. O modo de streaming legado foi removido e sensor.set_windowing() foi reformulado — leia as mudanças incompatíveis abaixo.

Destaques

  • Buffering multi-quadro — o sensor ganha buffering duplo, buffering triplo e um modo FIFO de vídeo para taxas de quadros mais altas e mais suaves.

  • Callback de quadro completo — registre um callback que dispara quando um novo quadro está pronto, para pipelines de captura não bloqueantes.

  • Bluetooth — um módulo bluetooth construído sobre a stack NimBLE, habilitado no Arduino Portenta H7 (com um exemplo BLE).

  • MT9M114 — driver inicial do sensor de câmera.

  • Captura mais rápida — descarregamento via MDMA para captura de dados da câmera; draw_image() agora aceita fontes/destinos Bayer e JPEG.

  • MicroPython 1.15 — o MicroPython incluído foi atualizado da 1.13 para a 1.15.

  • Incompatível: o modo de streaming legado foi removido e sensor.set_windowing() foi reformulado — veja as mudanças incompatíveis.

Novos recursos

  • Multi-buffering do sensor — adicionou sensor.set_framebuffers() / sensor.get_framebuffers() e os modos SINGLE_BUFFER / DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO, mais sensor.get_frame_available() para captura dupla, tripla e FIFO de vídeo.

  • Callback de quadro completo — adicionou sensor.set_frame_callback() para que um callback Python rode quando cada novo quadro termina.

  • Bluetooth — adicionou um módulo bluetooth baseado na stack NimBLE (submódulo NimBLE, driver CYW-BT), habilitado no Arduino Portenta H7 com um exemplo BLE.

  • MT9M114 — adicionou o driver inicial do sensor de câmera MT9M114.

  • draw_image — adicionou suporte a debayering e suporte a cópia JPEG para que image.draw_image() aceite imagens de origem/destino Bayer e JPEG.

  • Descarregamento de captura via MDMA — a captura de dados da câmera é descarregada para o MDMA para maior throughput.

  • Um argumento de paleta de cores agora pode ser desabilitado passando -1 (já que None é reservado como um argumento válido).

Outras mudanças e melhorias

  • Mudou para a nova implementação de I2C por software; alinhou com o upstream do MicroPython; configuração de ulab por placa; módulos integrados básicos habilitados no OpenMV 2; bloqueio de leitura do frame buffer mais justo; suporte a mutex estendido para Cortex-M0/M0+ com um timeout de lock.

Correções de bugs

Câmera e imagem:

  • Corrigiu a confiabilidade da inicialização do FLIR Lepton na placa Pure Thermal, o tratamento de buffer / pausa do JPEG do ImageIO, as configurações de vflip/hmirror do HM01B0, o flush do buffer JPEG quando uma imagem é invalidada e uma flag cropped que era definida quando o framesize era inválido.

Sistema e conectividade:

  • Corrigiu o esvaziamento do comando USB e o comando de reset para o bootloader, a inicialização do mutex, a fonte de clock do UART, o define de code-page do FatFS, o tratamento de ACK out-of-band do WINC1500, a depuração de WiFi e o USB PID do Nano33; isolou os pads analógicos dedicados.

Hardware e suporte a placas

  • Sensor de câmera MT9M114 (driver inicial).

  • Arduino Portenta H7 — Bluetooth habilitado (NimBLE) com um exemplo BLE.

  • Arduino Nano RP2040 Connect / Nano 33 BLE Sense — flag de depuração de WiFi desabilitada onde não suportada; exemplo blinky adicionado; correção do USB PID.

Mudanças incompatíveis na API

Quebras de API visíveis ao usuário entre a v3.9.4 e a v4.0.0. Escopo: C-modules Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada mudança é marcada com seu impacto:

  • major — afeta a maioria dos scripts; você quase certamente precisará portar o código.

  • minor — API restrita; afeta apenas os scripts que a usavam.

  • behavior — mesma API, resultados diferentes; verifique novamente os scripts ajustados.

As mudanças são agrupadas por impacto nessa ordem. Se você só quer portar seu código, vá direto para a lista de verificação de migração no final. Cada hash de commit aponta para seu diff no GitHub.

Modo de streaming removido (major)

O modo de streaming legado do sensor foi removido em favor da nova API de buffering multi-quadro. Código que habilitava o modo de streaming deve migrar para sensor.set_framebuffers() com DOUBLE_BUFFER / TRIPLE_BUFFER / VIDEO_FIFO e acionar a captura com sensor.snapshot() / sensor.get_frame_available() em vez disso.

Commits: a42f3a647

sensor.set_windowing() reformulado (behavior)

sensor.set_windowing() foi tornado muito mais flexível: agora aceita múltiplas formas de argumento (uma tupla de região, ou largura/altura centralizadas, ou x, y, w, h) e resolve a janela em relação à resolução atual. Scripts que passavam argumentos de janela no antigo formato fixo podem selecionar uma região diferente e devem ser reverificados.

Commits: 3e9c43554

MicroPython 1.13 → 1.15 (behavior)

O núcleo do MicroPython incluído foi atualizado da 1.13 para a 1.15 (via 1.14). O comportamento da biblioteca padrão e da linguagem segue o MicroPython 1.15 upstream; reverifique scripts que dependem de comportamento específico de versão do micropython / módulos padrão.

Commits: 364eea6c7, 26c5376b0

Argumento update_jpeg_buffer do ImageIO removido (minor)

A atualização do buffer JPEG do ImageIO foi reformulada para derivar o buffer do argumento de origem da imagem, e o argumento explícito update_jpeg_buffer foi removido. Scripts que passavam update_jpeg_buffer ao ImageIO devem descartar esse argumento.

Commits: 5c6937bd1

Lista de verificação de migração

Para uma portabilidade limpa para a v4.0.0, o trabalho típico é:

  1. Substituir qualquer uso do modo de streaming removido pela nova API de multi-buffering sensor.set_framebuffers() (modo de streaming removido).

  2. Reverificar as chamadas a sensor.set_windowing() em relação ao tratamento de argumentos reformulado e mais flexível (a mudança de janela).

  3. Revalidar scripts que dependem de comportamento específico de versão do MicroPython em relação ao MicroPython 1.15 (o salto do MicroPython).

  4. Descartar o argumento update_jpeg_buffer das chamadas do ImageIO (a mudança do ImageIO).

Todos os outros scripts rodam sem alterações.