13.3.1.2. Hello cam

Třída openmv.Camera je vstupní bod v jazyce Python pro vše, co balíček umí. Každá další stránka v tomto tutoriálu do ní volá. Nejmenší užitečný program se připojí, nahraje skript MicroPython a vypíše vše, co skript zapíše na 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. Pár poznámek

stop() před exec() není volitelné. Bez toho jakýkoli dříve běžící skript pokračuje v zápisu na stdout a nový exec s ním bojuje o kontrolu nad kanálem stdin.

exec() nahraje řetězec skriptu do bufferu stdin kamery a spustí jej v tomtéž interpretu MicroPython, se kterým komunikuje IDE. Skript importuje csi, image, ml a zbytek povrchu kamery, který pokryly dřívější kapitoly – jediný rozdíl je, že zdroj přichází po USB namísto z main.py na kameře nebo z IDE.

13.3.1.2.2. Zastavení skriptu

Když chce hostitelský program přerušit běžící skript, zavolá stop(). Skript obdrží stejné přerušení, jaké by doručilo IDE, a ukončí se při nejbližší příležitosti. Opuštění kontextového manažeru (bloku with) zavře sériový port, ale skript nezastaví – kamera nadále běží to, co bylo naposledy načteno, dokud ji něco nepřeruší.

13.3.1.2.3. Chyby a výjimky

Cokoli, co se pokazí na protokolové vrstvě, vyvolá openmv.OMVException nebo jednu z jejích podtříd (TimeoutException, ChecksumException, SequenceException). Obalení bloku with do try / except OMVException je nejjednodušší způsob, jak odhalit odpojený USB kabel nebo kameru, která přestala odpovídat.

Protokol interně opakuje pokusy, než vyvolá výjimku; než se OMVException dostane k aplikaci, rozpočet pokusů je vyčerpán a linka je skutečně nefunkční. Výchozí hodnoty (max_retry=3, timeout=1.0) fungují pro každého – vyladěte je v konstruktoru pouze tehdy, pokud konkrétní aplikace potřebuje jiné chování.