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 IDE —
Image.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 efind_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 viaWLAN.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 RTUmodbus(com um exemplo 32-modbus) e uma classeSSD1306_I2Cpara displays OLED I2C.Exemplos — adicionado subscribe MQTT (
mqtt_sub.py, commqtt.pyrenomeado paramqtt_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 noprint()de blob,find_apriltags()em imagens com vflip / hmirror, o bug de ROI emfind_lbp(), o timeout de compressão JPEG para resoluções grandes e o relatório de estatísticas de memória dofb_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 depyb.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
Lista de verificação de migração¶
Para um port limpo para a v3.4.2, o trabalho típico é:
Substituir as leituras de informação de conexão de
WLAN.ifconfig()do WINC1500 porWLAN.netinfo()(a mudança no ifconfig).Verificar um retorno
NoneemMQTTClient.wait_msg()em vez de capturarOSError(-1)(a mudança no wait_msg).Reajustar a detecção de AprilTag ou compilar com
IMLIB_ENABLE_FINE_APRILTAGSse você precisar de conectividade de 8 vias (a mudança no find_apriltags).
Todos os outros scripts rodam sem alterações.