14.5. Conclusão¶
Você percorreu o ciclo de vida de uma câmera que parte de um script de bancada funcional até um produto entregue:
Builds de firmware personalizadas – o ambiente de desenvolvimento, a construção da imagem de firmware a partir do código-fonte, sua gravação em uma câmera e o caminho de depuração desde o Cortex-Debug do VS Code até o
gdbrunnerde linha de comando quando algo está errado no lado do firmware.Entregando a aplicação – embutindo o código da aplicação no firmware via módulos congelados, embutindo recursos em uma imagem ROMFS e a ordem de busca que determina qual cópia de um arquivo o runtime realmente carrega na inicialização. A divisão que resulta disso:
boot.pypara a configuração de ambiente pré-REPL,main.pycomo ponto de entrada da aplicação,main.pycongelado para o ponto de entrada e o ROMFS para todo o resto.Robustez para produção – a biblioteca
loggingescrevendo em um caminho conhecido, ummachine.WDTalimentado uma vez por iteração do laço principal, umtry/exceptde nível superior que transforma falhas em eventos registrados em log em vez de reinicializações, higiene do sistema de arquivos que mantém as operações de arquivo rápidas à medida que a aplicação acumula registros ao longo de meses em campo e – quando o produto exige – proteção de leitura da flash.Material avançado – certificados TLS para câmeras que precisam se autenticar e criptografar o tráfego com serviços de rede.
Uma câmera entregue tem tudo isso em ordem: seu código de aplicação roda a partir da imagem de firmware, seu watchdog é alimentado uma vez por iteração do laço principal, seu log é gravado em um diretório datado no cartão SD e – quando o produto exige – sua flash foi travada contra leitura.
14.5.1. Para onde ir a partir daqui¶
Produção é o último capítulo do tutorial. A partir daqui, a documentação se divide em material de referência:
A referência da biblioteca é a visão alfabética do tipo “qual é o nome exato desta chamada” de cada módulo que a câmera expõe –
machine,logging,os,csi,image,mle os demais.As páginas de referência rápida por placa cobrem as especificidades de cada câmera da linha de produtos OpenMV – pinagens, barramentos montáveis, IDs de placa, disponibilidade de periféricos e as pequenas diferenças que importam quando a aplicação precisa rodar em uma peça específica.
As páginas de referência de sensores e as páginas de referência de shields cobrem os sensores de imagem individuais e os shields complementares que uma câmera pode carregar – as especificações por peça, pinagens e notas de que a aplicação precisa ao escolher sensores e shields para uma build.
A referência da linguagem MicroPython cobre a própria linguagem – diferenças de sintaxe em relação ao CPython, as especificidades de implementação que importam quando um script transita entre as duas e a referência do assembler em linha para o raro caso em que o Python é lento demais.
O tutorial é o caminho de “tenho uma câmera nova em mãos” até “entreguei um produto”. A partir daqui, a câmera é uma peça de um sistema maior pelo qual a aplicação é responsável, e o trabalho passa a ser da própria aplicação.