13.3.1.2. Olá cam¶
A classe openmv.Camera é o ponto de entrada Python para tudo o que o pacote pode fazer. Todas as outras páginas deste tutorial chamam essa classe. O menor programa útil conecta, envia um script MicroPython e imprime o que quer que o script escreva em stdout
from openmv import Camera
script = """
import time
while True:
print('hello from the cam')
time.sleep(1)
"""
with Camera('/dev/ttyACM0') as cam:
cam.stop()
cam.exec(script)
while True:
if text := cam.read_stdout():
print(text, end='')
13.3.1.2.1. Algumas observações¶
stop() antes de exec() não é opcional. Sem ele, qualquer script em execução anterior continua escrevendo em stdout, e o novo exec disputa com ele o controle do canal stdin.
exec() envia a string do script para o buffer stdin da cam e o executa no mesmo interpretador MicroPython com que a IDE conversa. O script importa csi, image, ml e o restante da superfície da cam que os capítulos anteriores cobriram – a única diferença é que o código-fonte chega via USB em vez de vir do main.py na câmera ou da IDE.
13.3.1.2.2. Parando o script¶
Quando o programa do host quer interromper o script em execução, chame stop(). O script recebe a mesma interrupção que a IDE entregaria e sai na próxima oportunidade. Sair do gerenciador de contexto (o bloco with) fecha a porta serial, mas não para o script – a cam continua executando o que foi carregado por último até que algo o interrompa.
13.3.1.2.3. Erros e exceções¶
Qualquer coisa que dê errado na camada de protocolo dispara uma openmv.OMVException ou uma de suas subclasses (TimeoutException, ChecksumException, SequenceException). Envolver o bloco with em try / except OMVException é a maneira mais simples de expor um cabo USB desconectado ou uma cam que parou de responder.
O protocolo faz retentativas internamente antes de disparar a exceção; quando uma OMVException chega à aplicação, o orçamento de retentativas se esgotou e o enlace está genuinamente quebrado. Os padrões (max_retry=3, timeout=1.0) funcionam para todos – ajuste-os no construtor apenas se uma aplicação específica precisar de comportamento diferente.