13.3.1.2. Hello cam¶
Kelas openmv.Camera adalah titik masuk Python untuk semua yang dapat dilakukan paket ini. Setiap halaman lain dalam tutorial ini memanggilnya. Program terkecil yang berguna terhubung, mengunggah skrip MicroPython, dan mencetak apa pun yang ditulis skrip ke 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. Beberapa catatan¶
stop() sebelum exec() tidak opsional. Tanpanya, skrip yang sebelumnya berjalan terus menulis ke stdout, dan exec baru bersaing dengannya untuk kontrol saluran stdin.
exec() mengunggah string skrip ke dalam buffer stdin kamera dan menjalankannya di interpreter MicroPython yang sama dengan yang digunakan IDE. Skrip mengimpor csi, image, ml, dan bagian permukaan kamera lainnya yang dibahas di bab-bab sebelumnya -- satu-satunya perbedaan adalah bahwa sumbernya tiba melalui USB, bukan dari main.py di kamera atau IDE.
13.3.1.2.2. Menghentikan skrip¶
Ketika program host ingin menginterupsi skrip yang sedang berjalan, panggil stop(). Skrip menerima interupsi yang sama yang akan dikirimkan oleh IDE dan keluar pada kesempatan berikutnya. Meninggalkan context manager (blok with) menutup port serial tetapi tidak menghentikan skrip -- kamera terus menjalankan apa pun yang terakhir dimuat hingga sesuatu menginterupsinya.
13.3.1.2.3. Kesalahan dan pengecualian¶
Apa pun yang salah di lapisan protokol memunculkan openmv.OMVException atau salah satu subclass-nya (TimeoutException, ChecksumException, SequenceException). Membungkus blok with dalam try / except OMVException adalah cara paling sederhana untuk menangani kabel USB yang terputus atau kamera yang berhenti merespons.
Protokol melakukan percobaan ulang secara internal sebelum memunculkan pengecualian; pada saat OMVException mencapai aplikasi, anggaran percobaan ulang telah habis dan tautan benar-benar rusak. Default (max_retry=3, timeout=1.0) berfungsi untuk semua orang -- setel ulang di konstruktor hanya jika aplikasi tertentu membutuhkan perilaku yang berbeda.