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.