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.