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 gdbrunner de 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.py para a configuração de ambiente pré-REPL, main.py como ponto de entrada da aplicação, main.py congelado para o ponto de entrada e o ROMFS para todo o resto.

  • Robustez para produção – a biblioteca logging escrevendo em um caminho conhecido, um machine.WDT alimentado uma vez por iteração do laço principal, um try / except de 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, ml e 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.