13.3.1.2. Hei kamera

openmv.Camera-luokka on Python-aloituspiste kaikelle, mitä paketti voi tehdä. Jokainen muu tämän opetusohjelman sivu kutsuu siihen. Pienin hyödyllinen ohjelma yhdistää, lataa MicroPython-skriptin ja tulostaa kaiken, mitä skripti kirjoittaa kohteeseen 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. Muutama huomautus

stop() ennen exec() ei ole valinnainen. Ilman sitä mikä tahansa aiemmin käynnissä ollut skripti jatkaa kirjoittamista kohteeseen stdout, ja uusi exec taistelee sen kanssa stdin-kanavan hallinnasta.

exec() lataa skriptimerkkijonon kameran stdin-puskuriin ja suorittaa sen samassa MicroPython-tulkissa, jonka kanssa IDE keskustelee. Skripti tuo csi, image, ml ja muun kamerarajapinnan, jonka aiemmat luvut käsittelivät – ainoa ero on, että lähdekoodi saapuu USB:n kautta eikä kameran main.py-tiedostosta tai IDE:stä.

13.3.1.2.2. Skriptin pysäyttäminen

Kun isäntäohjelma haluaa keskeyttää käynnissä olevan skriptin, kutsu stop(). Skripti saa saman keskeytyksen, jonka IDE toimittaisi, ja poistuu seuraavalla mahdollisuudella. Kontekstinhallinnasta (with-lohkosta) poistuminen sulkee sarjaportin, mutta ei pysäytä skriptiä – kamera jatkaa viimeksi ladatun suorittamista, kunnes jokin keskeyttää sen.

13.3.1.2.3. Virheet ja poikkeukset

Kaikki, mikä menee pieleen protokollakerroksessa, nostaa openmv.OMVException-poikkeuksen tai jonkin sen aliluokista (TimeoutException, ChecksumException, SequenceException). with-lohkon kietominen rakenteeseen try / except OMVException on yksinkertaisin tapa tuoda esiin irronnut USB-kaapeli tai kamera, joka lakkasi vastaamasta.

Protokolla yrittää uudelleen sisäisesti ennen poikkeuksen nostamista; siihen mennessä, kun OMVException saavuttaa sovelluksen, uudelleenyritysbudjetti on käytetty ja yhteys on aidosti rikki. Oletukset (max_retry=3, timeout=1.0) toimivat kaikille – viritä ne rakentajassa vain, jos jokin tietty sovellus tarvitsee erilaista toimintaa.