14.5. Conclusão

Percorreu o ciclo de vida de uma câmara desde um script de bancada funcional até um produto enviado:

  • Compilações de firmware personalizadas – o ambiente de desenvolvimento, compilar a imagem de firmware a partir da fonte, instalá-la numa câmara, e o caminho de depuração do VS Code Cortex-Debug para o gdbrunner de linha de comandos quando algo está errado no lado do firmware.

  • Enviar a aplicação – incorporar o código da aplicação no firmware através de módulos congelados, incorporar recursos numa imagem ROMFS, e a ordem de pesquisa que determina qual cópia de um ficheiro o runtime carrega no arranque. A divisão que resulta: boot.py para configuração do ambiente pré-REPL, main.py como ponto de entrada da aplicação, main.py congelado para a entrada e ROMFS para todo o resto.

  • Reforçar para produção – a biblioteca logging escrita num caminho conhecido, um machine.WDT alimentado uma vez por iteração do ciclo principal, um try / except de nível superior que transforma falhas em eventos registados em vez de reinicializações, higiene do sistema de ficheiros que mantém as operações de ficheiros rápidas à medida que a aplicação acumula registos ao longo de meses no campo, e – quando o produto o exige – proteção contra leitura do flash.

  • Material avançado – certificados TLS para câmaras que precisam de autenticar e encriptar tráfego com serviços de rede.

Uma câmara enviada tem tudo isto em vigor: o código da aplicação corre a partir da imagem de firmware, o watchdog é alimentado uma vez por iteração do ciclo principal, o registo aterra num diretório com data no cartão SD, e – quando o produto o exige – o flash foi bloqueado 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 divide-se em material de referência:

  • O referência da biblioteca é a vista alfabética «qual é o nome exato desta chamada» de todos os módulos que a câmara expõe – machine, logging, os, csi, image, ml, e o resto.

  • As páginas de referência rápida por placa cobrem as especificações de cada câmara na linha de produtos OpenMV – pinouts, barramentos montáveis, IDs de placa, disponibilidade de periféricos, e as pequenas diferenças que importam quando a aplicação tem de funcionar numa peça específica.

  • As páginas de referência de sensores e páginas de referência de shields cobrem os sensores de imagem individuais e shields de expansão que uma câmara pode ter – as especificações por peça, pinouts e notas que a aplicação precisa ao escolher sensores e shields para uma compilação.

  • 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 abrange os dois, e a referência do montador inline para o caso raro em que o Python é demasiado lento.

O tutorial é o caminho de «tenho uma nova câmara em mãos» para «enviei um produto». A partir daqui a câmara é uma peça de um sistema maior do qual a aplicação é responsável, e o trabalho é o da própria aplicação.