13.3.1.2. مرحبًا أيتها الكاميرا

الصنف 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 ستُسلّمها ويخرج في أول فرصة. ومغادرة مدير السياق (كتلة with) تُغلق المنفذ التسلسلي لكنها لا توقف البرنامج النصي -- تستمر الكاميرا في تشغيل آخر ما حُمّل حتى يقاطعه شيء.

13.3.1.2.3. الأخطاء والاستثناءات

أي خطأ يحدث في طبقة البروتوكول يثير openmv.OMVException أو أحد أصنافه المشتقة (TimeoutException وChecksumException وSequenceException). تغليف كتلة with بـ try / except OMVException هو أبسط طريقة لإظهار كابل USB مفصول أو كاميرا توقفت عن الاستجابة.

يعيد البروتوكول المحاولة داخليًا قبل أن يثير الاستثناء؛ وبحلول وقت وصول OMVException إلى التطبيق، تكون ميزانية إعادة المحاولة قد نفدت وتكون الوصلة منقطعة فعلًا. القيم الافتراضية (max_retry=3 وtimeout=1.0) تعمل للجميع -- اضبطها في المُنشئ فقط إذا احتاج تطبيق معيّن إلى سلوك مختلف.