13.3.1.2. Merhaba kamera

openmv.Camera sınıfı, paketin yapabildiği her şey için Python giriş noktasıdır. Bu öğreticideki diğer her sayfa ona çağrı yapar. En küçük kullanışlı program bağlanır, bir MicroPython betiği yükler ve betiğin stdout çıkışına yazdığı her şeyi yazdırır:

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. Birkaç not

exec() öncesinde stop() isteğe bağlı değildir. Bu olmadan, daha önce çalışan herhangi bir betik stdout çıkışına yazmaya devam eder ve yeni exec, stdin kanalının denetimi için onunla mücadele eder.

exec(), betik dizesini kameranın stdin arabelleğine yükler ve onu IDE’nin konuştuğu aynı MicroPython yorumlayıcısında çalıştırır. Betik, daha önceki bölümlerin ele aldığı csi, image, ml ve kamera yüzeyinin geri kalanını içe aktarır; tek farklı şey, kaynağın kameradaki main.py dosyasından ya da IDE’den değil, USB üzerinden gelmesidir.

13.3.1.2.2. Betiği durdurma

Ana makine programı çalışan betiği kesmek istediğinde stop() çağırın. Betik, IDE’nin ileteceği kesmenin aynısını alır ve ilk fırsatta çıkar. Bağlam yöneticisinden (with bloğu) ayrılmak seri bağlantı noktasını kapatır ancak betiği durdurmaz; bir şey onu kesene kadar kamera son yüklenen ne ise onu çalıştırmaya devam eder.

13.3.1.2.3. Hatalar ve istisnalar

Protokol katmanında ters giden herhangi bir şey bir openmv.OMVException veya onun alt sınıflarından birini (TimeoutException, ChecksumException, SequenceException) çıkarır. with bloğunu try / except OMVException ile sarmalamak, bağlantısı kesilmiş bir USB kablosunu veya yanıt vermeyi bırakmış bir kamerayı yüzeye çıkarmanın en basit yoludur.

Protokol, çıkarmadan önce dahili olarak yeniden dener; bir OMVException uygulamaya ulaştığında, yeniden deneme bütçesi tükenmiştir ve bağlantı gerçekten bozulmuştur. Varsayılanlar (max_retry=3, timeout=1.0) herkes için çalışır; bunları yalnızca belirli bir uygulamanın farklı davranışa ihtiyacı varsa kurucuda ayarlayın.