13.3.1.2. Hej kamera¶
openmv.Camera-klassen är Python-ingången till allt paketet kan göra. Varje annan sida i den här handledningen anropar in i den. Det minsta användbara programmet ansluter, laddar upp ett MicroPython-skript och skriver ut vad än skriptet skriver till 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. Några anmärkningar¶
stop() före exec() är inte valfritt. Utan det fortsätter alla tidigare körande skript att skriva till stdout, och den nya exec slåss med det om kontrollen över stdin-kanalen.
exec() laddar upp skriptsträngen till kamerans stdin-buffert och kör den i samma MicroPython-interpreter som IDE:t pratar med. Skriptet importerar csi, image, ml och resten av den kamerayta som de tidigare kapitlen täckte – det enda som är annorlunda är att källan anländer över USB i stället för från main.py på kameran eller från IDE:t.
13.3.1.2.2. Stoppa skriptet¶
När värdprogrammet vill avbryta det körande skriptet, anropa stop(). Skriptet tar emot samma avbrott som IDE:t skulle leverera och avslutas vid första lägliga tillfälle. Att lämna kontexthanteraren (with-blocket) stänger serieporten men stoppar inte skriptet – kameran fortsätter köra vad som senast laddades tills något avbryter det.
13.3.1.2.3. Fel och undantag¶
Allt som går fel i protokolllagret utlöser ett openmv.OMVException eller en av dess subklasser (TimeoutException, ChecksumException, SequenceException). Att linda in with-blocket i try / except OMVException är det enklaste sättet att fånga en frånkopplad USB-kabel eller en kamera som slutat svara.
Protokollet gör om försöket internt innan ett undantag utlöses; vid den tidpunkt då ett OMVException når applikationen är återförsöksbudgeten slut och länken är verkligen bruten. Standardvärdena (max_retry=3, timeout=1.0) fungerar för alla – justera dem i konstruktorn endast om en specifik applikation behöver ett annat beteende.