13.3.1.2. Pozdrav kamero

Klasa openmv.Camera je Python ulazna točka za sve što paket može učiniti. Svaka druga stranica u ovom vodiču poziva nju. Najmanji koristan program povezuje se, prenosi MicroPython skriptu i ispisuje sve što skripta zapiš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. Nekoliko napomena

stop() prije exec() nije neobavezan. Bez njega, svaka prethodno pokrenuta skripta nastavlja pisati na stdout, a novi exec bori se s njom za kontrolu nad kanalom stdin.

exec() prenosi niz znakova skripte u međuspremnik stdin kamere i pokreće ga u istom MicroPython interpreteru s kojim IDE komunicira. Skripta uvozi csi, image, ml i ostatak površine kamere koju su pokrila ranija poglavlja – jedina je razlika to što izvorni kod stiže preko USB-a umjesto iz main.py na kameri ili iz IDE-a.

13.3.1.2.2. Zaustavljanje skripte

Kada program domaćina želi prekinuti skriptu koja se izvodi, pozovite stop(). Skripta prima isti prekid kakav bi isporučio IDE i izlazi pri prvoj prilici. Napuštanje upravitelja konteksta (with blok) zatvara serijski priključak, ali ne zaustavlja skriptu – kamera nastavlja izvoditi sve što je posljednje učitano dok je nešto ne prekine.

13.3.1.2.3. Pogreške i iznimke

Sve što pođe po zlu na sloju protokola podiže openmv.OMVException ili jednu od njezinih podklasa (TimeoutException, ChecksumException, SequenceException). Omatanje with bloka u try / except OMVException najjednostavniji je način da se izrazi odspojeni USB kabel ili kamera koja je prestala odgovarati.

Protokol interno ponavlja pokušaje prije nego što podigne iznimku; dok OMVException stigne do aplikacije, proračun ponovnih pokušaja je potrošen, a veza je stvarno prekinuta. Zadane vrijednosti (max_retry=3, timeout=1.0) rade za sve – podesite ih u konstruktoru samo ako određena aplikacija treba drugačije ponašanje.