13.3.1.2. Hello cam¶
คลาส openmv.Camera คือจุดเข้าของ Python สำหรับทุกสิ่งที่แพ็กเกจสามารถทำได้ ทุกหน้าอื่นในบทเรียนนี้เรียกใช้มัน โปรแกรมที่เล็กที่สุดที่ใช้งานได้จริงเชื่อมต่อ อัปโหลดสคริปต์ MicroPython และพิมพ์ทุกสิ่งที่สคริปต์เขียนไปยัง 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. หมายเหตุสองสามข้อ¶
stop() ก่อน exec() ไม่ใช่ตัวเลือก หากไม่มี สคริปต์ที่รันอยู่ก่อนหน้านี้จะยังคงเขียนไปยัง stdout และ exec ใหม่จะต่อสู้เพื่อควบคุมช่องสัญญาณ stdin
exec() อัปโหลดสตริงสคริปต์เข้าไปในบัฟเฟอร์ stdin ของกล้องและรันในตัวแปลภาษา MicroPython เดิมที่ IDE พูดคุยด้วย สคริปต์นำเข้า csi, image, ml และส่วนที่เหลือของพื้นผิวกล้องที่บทก่อนหน้าครอบคลุม -- สิ่งเดียวที่แตกต่างคือซอร์สมาถึงผ่าน USB แทนจาก main.py บนกล้องหรือ IDE
13.3.1.2.2. การหยุดสคริปต์¶
เมื่อโปรแกรมโฮสต์ต้องการขัดจังหวะสคริปต์ที่รันอยู่ ให้เรียก stop() สคริปต์รับอินเทอร์รัปต์เดิมที่ IDE จะส่งและออกจากโปรแกรมในโอกาสถัดไป การออกจาก context manager (บล็อก with) ปิดพอร์ตซีเรียลแต่ ไม่ หยุดสคริปต์ -- กล้องยังคงรันสิ่งที่โหลดล่าสุดจนกว่าจะมีบางอย่างขัดจังหวะ
13.3.1.2.3. ข้อผิดพลาดและข้อยกเว้น¶
ทุกสิ่งที่ผิดพลาดในชั้นโปรโตคอลจะยก openmv.OMVException หรือ subclass หนึ่งของมัน (TimeoutException, ChecksumException, SequenceException) การห่อบล็อก with ใน try / except OMVException เป็นวิธีที่ง่ายที่สุดในการแสดงสาย USB ที่ถอดแล้วหรือกล้องที่หยุดตอบสนอง
โปรโตคอลลองใหม่ภายในก่อนที่จะยก; เมื่อ OMVException ถึงแอปพลิเคชัน งบประมาณการลองใหม่หมดแล้วและลิงก์ขาดจริงๆ ค่าเริ่มต้น (max_retry=3, timeout=1.0) ทำงานได้กับทุกคน -- ปรับแต่งที่ constructor เฉพาะหากแอปพลิเคชันเฉพาะต้องการพฤติกรรมที่แตกต่าง