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. 몇 가지 참고 사항

exec() 이전의 stop()은 선택 사항이 아닙니다. 이것이 없으면 이전에 실행 중이던 스크립트가 계속 stdout에 쓰고, 새 execstdin 채널의 제어권을 두고 그것과 경쟁합니다.

exec()는 스크립트 문자열을 카메라의 stdin 버퍼로 업로드하고, IDE가 통신하는 것과 동일한 MicroPython 인터프리터에서 실행합니다. 스크립트는 csi, image, ml 및 앞 장에서 다룬 나머지 카메라 기능을 임포트합니다 – 유일한 차이점은 소스가 카메라의 main.py나 IDE에서가 아니라 USB를 통해 도착한다는 것입니다.

13.3.1.2.2. 스크립트 중지하기

호스트 프로그램이 실행 중인 스크립트를 중단하고자 할 때는 stop()을 호출합니다. 스크립트는 IDE가 전달하는 것과 동일한 인터럽트를 받아 다음 기회에 종료됩니다. 컨텍스트 관리자(with 블록)를 벗어나면 시리얼 포트가 닫히지만 스크립트는 중지되지 않습니다 – 카메라는 무언가가 인터럽트할 때까지 마지막으로 로드된 것을 계속 실행합니다.

13.3.1.2.3. 오류와 예외

프로토콜 계층에서 잘못되는 모든 것은 openmv.OMVException 또는 그 하위 클래스(TimeoutException, ChecksumException, SequenceException) 중 하나를 발생시킵니다. with 블록을 try / except OMVException으로 감싸는 것이 분리된 USB 케이블이나 응답을 멈춘 카메라를 드러내는 가장 간단한 방법입니다.

프로토콜은 예외를 발생시키기 전에 내부적으로 재시도합니다. OMVException이 애플리케이션에 도달할 때쯤이면 재시도 한도가 소진되고 링크가 진짜로 끊긴 것입니다. 기본값(max_retry=3, timeout=1.0)은 모두에게 적합하며, 특정 애플리케이션에 다른 동작이 필요할 때만 생성자에서 조정하세요.