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.