13.3.1.2. Xin chào camera

Lớp openmv.Camera là điểm vào Python cho mọi thứ mà gói có thể làm. Mọi trang khác trong hướng dẫn này đều gọi vào nó. Chương trình hữu ích nhỏ nhất kết nối, tải lên một tập lệnh MicroPython và in bất cứ thứ gì tập lệnh ghi vào 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. Một vài lưu ý

stop() trước exec() là bắt buộc. Nếu không có nó, bất kỳ tập lệnh đang chạy trước đó nào vẫn tiếp tục ghi vào stdout, và exec mới sẽ tranh chấp quyền kiểm soát kênh stdin.

exec() tải lên chuỗi tập lệnh vào bộ đệm stdin của camera và chạy nó trong cùng bộ thông dịch MicroPython mà IDE sử dụng. Tập lệnh nhập csi, image, ml và phần còn lại của giao diện camera mà các chương trước đã đề cập -- điều duy nhất khác biệt là nguồn đến qua USB thay vì từ main.py trên camera hoặc IDE.

13.3.1.2.2. Dừng tập lệnh

Khi chương trình máy chủ muốn ngắt tập lệnh đang chạy, hãy gọi stop(). Tập lệnh nhận cùng ngắt mà IDE sẽ gửi và thoát ra ở cơ hội tiếp theo. Rời khỏi context manager (khối with) đóng cổng serial nhưng không dừng tập lệnh -- camera tiếp tục chạy bất cứ thứ gì được tải cuối cùng cho đến khi có gì đó ngắt nó.

13.3.1.2.3. Lỗi và ngoại lệ

Bất cứ điều gì sai ở lớp giao thức đều nâng lên một openmv.OMVException hoặc một trong các lớp con của nó (TimeoutException, ChecksumException, SequenceException). Bọc khối with trong try / except OMVException là cách đơn giản nhất để phát hiện một cáp USB bị ngắt kết nối hoặc camera không phản hồi.

Giao thức thử lại nội bộ trước khi nâng lên; vào lúc một OMVException đến ứng dụng, ngân sách thử lại đã hết và kết nối thực sự bị hỏng. Các giá trị mặc định (max_retry=3, timeout=1.0) hoạt động với mọi người -- chỉ điều chỉnh chúng ở constructor nếu một ứng dụng cụ thể cần hành vi khác.