12. פרוטוקול מארח#

כל מצלמת OpenMV מגיעה עם מחסנית פרוטוקול שחושפת את המצלמה כאוסף של ערוצי נתונים בעלי שם לתוכנית מארחת. התוכנית המארחת יכולה להיות סקריפט Python במחשב הנייד של המפתח, ממשק גרפי שולחני, מצלמה אחרת בקצה השני של UART, או שירות הרץ בתחנת עבודה הצופה בצי של מצלמות. למצלמה לא אכפת מאיזה – אותו מסגור, אותו מנגנון אמינות, אותה הפשטת ערוץ עובדים עבור כולם.

זו התשובה לשתי שאלות שעולות באופן תמידי ברגע שפרויקט מצלמה עוזב את ה-IDE:

  • ”כיצד אני מקבל תצוגה חיה של מה שהמצלמה רואה לתוך ממשק גרפי מותאם אישית במחשב הנייד שלי?“

  • ”כיצד אני מאפשר למפעיל לשנות סף או לבחור אזור עניין בזמן ריצה, מבלי לכתוב מחדש את הקושחה?“

מודול ה-protocol בצד המצלמה וחבילת openmv-python בצד המארח עונים על שתי השאלות, על ידי כך שהם מאפשרים למחלקת Python במצלמה לחשוף ערוץ שמחלקת Python במארח יכולה לקרוא ממנו, לכתוב אליו, ולהגיב לאירועים בו, הכל דרך חיבור USB או טורי יחיד.

A host PC connects to a cam over USB; the cam exposes three channels -- a frame channel for image data, a config channel for control values, and the built-in stdout channel for prints -- and the host script reads or writes each.

הפרק מלמד את שני הצדדים. הקוד בצד המצלמה מראה כיצד לרשום ערוצים ולהזין אותם; הקוד בצד המארח מראה כיצד להתחבר, לרשום את הערוצים, למשוך נתונים, ולדחוף פקודות בחזרה. כלים אמיתיים המגיעים בתיקיית openmv-projects/tools/ משתמשים בדיוק בדפוסים המוצגים כאן.

לעתים קרובות, עם זאת, אין צורך בקוד מארח כלל. OpenMV IDE הוא בעצמו מארח: רשום protocol.CBORChannel של קריאות ופקדים בעלי שם ותצוגת Channels של ה-IDE מציגה אותם בזמן אמת כתוויות, מתגים, מחוונים, גרפים ומפות עומק, ושולחת את שינויי המפעיל בחזרה לסקריפט. ווידג’טים וטלמטריה עם CBORChannel הוא אותו נתיב מהיר; שאר הפרק הוא מה שהוא בנוי עליו, למקרה שפרויקט זקוק למארח משלו.