v3.4.2#

v3.4.2 é uma versão grande. Ela introduz a OpenMV Cam H7 Plus (SDRAM, framebuffer enorme para captura em alta resolução), a câmera OV5640 5 MP, suporte a FDCAN, um driver OV2640 reescrito, Image.jpeg_encode_for_ide() e novas bibliotecas pid / modbus. A API ifconfig() do WINC1500 e os padrões de find_apriltags() mudaram — leia as mudanças incompatíveis abaixo.

Destaques#

  • OpenMV Cam H7 Plus — nova placa com um driver SDRAM e um framebuffer de ~31 MB para captura em alta resolução.

  • Driver da câmera OV5640 5 MP com detecção via I2C.

  • Suporte ao periférico FDCAN, com um exemplo de CAN.

  • Reescrita do OV2640 — imagens na orientação correta, funções automáticas funcionando, snapshot JPEG e um novo framesize sensor.XGA.

  • JPEG da IDEImage.jpeg_encode_for_ide() e transmissão automática de JPEGs grandes para a IDE.

  • Incompatível: a semântica de WLAN.ifconfig() do WINC1500 mudou, MQTTClient.wait_msg() não lança mais exceção em recv vazio e find_apriltags() passa a usar conectividade de 4 vias por padrão — veja as mudanças incompatíveis.

Novos recursos#

  • WiFi — adicionado WLAN.netinfo() (retorna (rssi, security, ssid, mac, ip)) e configuração de IP estático do WINC1500 via WLAN.ifconfig(), com um exemplo de IP estático.

  • FDCAN — adicionado suporte ao periférico FDCAN e um exemplo can.py.

  • JPEG da IDE — adicionados Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); JPEGs grandes são transmitidos automaticamente para a IDE quando o buffer é pequeno demais.

  • Bibliotecas — adicionados uma biblioteca de controlador PID pid, uma biblioteca de escravo RTU modbus (com um exemplo 32-modbus) e uma classe SSD1306_I2C para displays OLED I2C.

  • Exemplos — adicionado subscribe MQTT (mqtt_sub.py, com mqtt.py renomeado para mqtt_pub.py).

  • Sensor — adicionado o framesize sensor.XGA (1024x768); print() / repr() em uma imagem Bayer agora gera metadados JSON.

Outras mudanças e melhorias#

  • Reescrito o driver OV2640 (imagens na orientação correta, funções automáticas funcionando, snapshot JPEG aceito); habilitados apriltags em alta resolução (remove o limite de ROI de <64K pixels em placas capazes); reduzido o PCLK do OV2640 de 72 MHz para 36 MHz.

Correções de bugs#

Imagem:

  • Corrigidos um estouro além do fim da imagem em operações binárias, a precisão de printf/float na saída de find_apriltags() / find_datamatrices() / find_lines(), JSON malformado no print() de blob, find_apriltags() em imagens com vflip / hmirror, o bug de ROI em find_lbp(), o timeout de compressão JPEG para resoluções grandes e o relatório de estatísticas de memória do fb_alloc.

Câmera e sensores:

  • Corrigidos a manutenção de cache e o alinhamento de buffer no modo JPEG, o tamanho máximo de transferência DCMI, a configuração de registradores e as resoluções do OV2640, a restauração do estado de shutdown do sensor no reset e a qualidade de imagem do OV7725 (adicionado um filtro de banding por câmera).

Rede e sistema:

  • Corrigidos o hardfault/bug em socket.accept(), o tratamento de timeout de socket do WINC1500 (timeout 0 agora é bloqueante; sockets não são fechados em timeout de recv), o deep-sleep do H7, o RTC (atualização upstream e problemas de EXTI / wakeup-timer / soft-reset do H7) e o IRQ do timer de pyb.Servo (o Servo não estava funcional).

Hardware e suporte a placas#

  • OpenMV Cam H7 Plus (OPENMV4R) — nova placa com um driver SDRAM que habilita um framebuffer grande (~31 MB).

  • OV5640 — novo driver de câmera de 5 MP com detecção via I2C.

  • FDCAN — suporte ao periférico.

Mudanças incompatíveis na API#

Quebras de API visíveis ao usuário entre v3.4.1 e v3.4.2. 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 que usavam o recurso; você precisará portar o código.

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

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

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

Semântica de WLAN.ifconfig() do WINC1500 mudou (major)#

No shield WiFi WINC1500, WLAN.ifconfig() não retorna mais a antiga lista de 5 elementos [rssi, security, ssid, mac, ip]. Agora ele obtém/define uma tupla (ip, subnet, gateway, dns) (e suporta configuração de IP estático), conforme a interface padrão network. Código que lia informações de conexão de ifconfig() deve mudar para o novo método WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

MQTTClient.wait_msg() retorna None em recv vazio (minor)#

O MQTTClient.wait_msg() da biblioteca mqtt agora retorna None em um recebimento vazio, em vez de lançar OSError(-1). Código que capturava OSError(-1) para detectar um socket fechado/vazio deve verificar um retorno None em vez disso.

Commits: 76239ea89

find_apriltags() usa conectividade de 4 vias por padrão (behavior)#

image.find_apriltags() agora usa, por padrão, conectividade de borda de 4 vias (em vez de 8 vias) — mais rápido, mas as tags detectadas podem diferir ligeiramente. Para restaurar a precisão anterior, compile o firmware com IMLIB_ENABLE_FINE_APRILTAGS definido.

Commits: c1d9bec2c

Lista de verificação de migração#

Para um port limpo para a v3.4.2, o trabalho típico é:

  1. Substituir as leituras de informação de conexão de WLAN.ifconfig() do WINC1500 por WLAN.netinfo() (a mudança no ifconfig).

  2. Verificar um retorno None em MQTTClient.wait_msg() em vez de capturar OSError(-1) (a mudança no wait_msg).

  3. Reajustar a detecção de AprilTag ou compilar com IMLIB_ENABLE_FINE_APRILTAGS se você precisar de conectividade de 8 vias (a mudança no find_apriltags).

Todos os outros scripts rodam sem alterações.