v3.4.2

A v3.4.2 é uma versão grande. Introduz a OpenMV Cam H7 Plus (SDRAM, buffer de fotograma enorme para captura de alta resolução), a câmara OV5640 5 MP, suporte a FDCAN, um controlador OV2640 reescrito, Image.jpeg_encode_for_ide(), e novas bibliotecas pid / modbus. A API ifconfig() do WINC1500 e os valores predefinidos de find_apriltags() foram alterados — leia as alterações incompatíveis abaixo.

Destaques

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

  • Câmara OV5640 5 MP com detecção baseada em I2C.

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

  • Reescrita do OV2640 — imagens orientadas correctamente, funções automáticas funcionais, captura JPEG e um novo tamanho de fotograma sensor.XGA.

  • IDE JPEGImage.jpeg_encode_for_ide() e transmissão automática de JPEGs de grande dimensão para o IDE.

  • Incompatível: a semântica de WLAN.ifconfig() do WINC1500 foi alterada, MQTTClient.wait_msg() já não lança excepção em recv vazio, e find_apriltags() usa por omissão conectividade de 4 direcções — consulte as alterações incompatíveis.

Novas funcionalidades

  • WiFi — adicionado WLAN.netinfo() (devolve (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.

  • IDE JPEG — adicionados Image.jpeg_encode_for_ide() / Image.jpeg_encoded_for_ide(); JPEGs de grande dimensão são transmitidos automaticamente para o IDE quando o buffer é demasiado pequeno.

  • Bibliotecas — adicionada uma biblioteca controladora PID pid, uma biblioteca de escravo RTU modbus (com um exemplo 32-modbus) e uma classe SSD1306_I2C para ecrãs OLED I2C.

  • Exemplos — adicionada subscrição MQTT (mqtt_sub.py, com mqtt.py renomeado para mqtt_pub.py).

  • Sensor — adicionado o tamanho de fotograma sensor.XGA (1024x768); print() / repr() numa imagem Bayer produz agora metadados JSON.

Outras alterações e melhorias

  • Reescrito o controlador OV2640 (imagens orientadas correctamente, funções automáticas funcionais, captura JPEG aceite); activadas as apriltags de alta resolução (remove o limite ROI de <64K pixels nas placas com capacidade para isso); reduzido o PCLK do OV2640 de 72 MHz para 36 MHz.

Correcções de erros

Imagem:

  • Corrigido um overflow de operações binárias além do fim da imagem, precisão de printf/float no output de find_apriltags() / find_datamatrices() / find_lines(), JSON malformado em blob print(), find_apriltags() em imagens com vflip / hmirror, o erro ROI de 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âmara e sensores:

  • Corrigida 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 registos e resoluções do OV2640, o restauro do estado de desligamento do sensor no reset, e a qualidade de imagem do OV7725 (adicionado um filtro de banda por câmara).

Rede e sistema:

  • Corrigido hardfault/erro em socket.accept(), o tratamento de timeout de socket do WINC1500 (timeout 0 passa a ser bloqueante; os sockets não são fechados no timeout de recv), o modo de suspensão profunda do H7, o RTC (actualização upstream e problemas EXTI / temporizador de activação / reset por software do H7), e o IRQ do temporizador pyb.Servo (o Servo não estava a funcionar).

Hardware e suporte de placas

  • OpenMV Cam H7 Plus (OPENMV4R) — nova placa com um controlador SDRAM que permite um buffer de fotograma de grande dimensão (~31 MB).

  • OV5640 — novo controlador de câmara 5 MP com detecção baseada em I2C.

  • FDCAN — suporte ao periférico.

Alterações de API incompatíveis

Alterações de API visíveis pelo utilizador entre a v3.4.1 e a v3.4.2. Âmbito: módulos C Python em modules/ e bibliotecas Python em scripts/libraries/.

Cada alteração está marcada com o seu impacto:

  • major — afecta a maioria dos scripts que utilizavam a funcionalidade; será necessário portar o código.

  • minor — API restrita; afecta apenas os scripts que a utilizavam.

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

As alterações estão agrupadas por impacto nessa ordem. Se apenas pretende portar o seu código, avance para a lista de verificação de migração no final. Cada hash de commit contém uma ligação para o respectivo diff no GitHub.

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

No shield WiFi WINC1500, WLAN.ifconfig() já não devolve a antiga lista de 5 elementos [rssi, security, ssid, mac, ip]. Obtém/define agora um tuplo (ip, subnet, gateway, dns) (e suporta configuração de IP estático), em conformidade com a interface network padrão. O código que lia informação de ligação a partir de ifconfig() deve passar a usar o novo método WLAN.netinfo() ((rssi, security, ssid, mac, ip)).

Commits: e685b484a

MQTTClient.wait_msg() devolve None em recv vazio (minor)

O MQTTClient.wait_msg() da biblioteca mqtt devolve agora None num receive vazio em vez de lançar OSError(-1). O código que capturava OSError(-1) para detectar um socket fechado/vazio deve verificar um valor de retorno None.

Commits: 76239ea89

find_apriltags() usa por omissão conectividade de 4 direcções (behavior)

image.find_apriltags() usa agora por omissão conectividade de aresta de 4 direcções (em vez de 8) — 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 uma portabilidade limpa para a v3.4.2, o trabalho típico é:

  1. Substituir as leituras de informação de ligação WLAN.ifconfig() do WINC1500 por WLAN.netinfo() (a alteração do ifconfig).

  2. Verificar um retorno None em MQTTClient.wait_msg() em vez de capturar OSError(-1) (a alteração do wait_msg).

  3. Reajustar a detecção de AprilTag ou compilar com IMLIB_ENABLE_FINE_APRILTAGS se precisar de conectividade de 8 direcções (a alteração do find_apriltags).

Todos os outros scripts funcionam sem modificações.