ההוראות הבאות מתבססות על הדוגמה של אפליקציית התאורה מ-Matter SDK, יחד עם לוח פיתוח M5Stack ESP32.
הגדרת סביבת ה-build
קודם כל, משכפלים את ה-SDK של Matter.
בדוגמה הזו, אנחנו בודקים את ה-commit המינימלי שנתמך בגרסה 5 של Matter ל-Google Home:
mkdir otaprepcd otaprepgit clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git fetch origin v1.0-branch
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh
אחר כך אנחנו בודקים את הגרסה שבה נעשה שימוש בתהליך העבודה של ESP32 ב-GitHub, כדי לקבוע איזה קובץ אימג' של Docker הכי מתאים ל-build שלנו:
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99אנחנו מריצים קונטיינר מקובץ האימג' של Docker, ומעבירים דגלים כדי לטעון את ה-SDK של Matter בקונטיינר ולספק גישה למכשיר ESP32.
docker run --name container_name -it --user $(id -u):$(id -g)--mount source=$(pwd),target=/workspace,type=bind --device=/dev/ttyUSB0 connectedhomeip/chip-build-esp32:0.5.99 /bin/bashעצירה והפעלה של קונטיינר Docker של Matter
בכל פעם שמריצים פקודת docker run, נוצר קונטיינר חדש עם קובץ האימג' שצוין. כשעושים את זה, הנתונים הישנים שנשמרו במופע הקודם של מאגר התגים הולכים לאיבוד. לפעמים זה מה שאתם רוצים שיקרה, כי זה מאפשר לכם להתחיל עם התקנה חדשה. אבל בדוגמה הזו, סביר להניח שתרצו לשמור את העבודה ואת הגדרות הסביבה בין הסשנים.
user@host> docker stop container_name
כשתהיו מוכנים להפעיל שוב, הפעילו את הקונטיינר ופתחו חלון טרמינל:
user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash
אפשר לפתוח סשנים נוספים של טרמינל בקונטיינר באמצעות:
user@host> docker exec -it container_name /bin/bash
או להתחיל סשן ב-root באמצעות:
user@host> docker exec -u 0 -it container_name /bin/bash
אתחול ה-SDK
במאגר, אנחנו מאתחלים את ה-SDK של Matter ואת ESP IDF:
cd /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shבנייה וצריבה
המשימה הבאה היא ליצור את קובץ האימג' ולצרוב את ערכת הפיתוח כדי לקבל את עדכון הקושחה של Matter דרך האוויר (OTA).
כדי לעשות את זה, צריך ליצור תמונה.
קודם מגדירים את ה-build באמצעות הכלי menuconfig מ-ESP IDF.
cd examples/lighting-app/esp32
idf.py menuconfigבתפריט האינטראקטיבי, קובעים את ההגדרות הבאות:
Component config --->CHIP Device Layer --->Device Identification Options --->מגדירים את
Vendor IDלמזהה הספק (VID) שהוקצה על ידי Connectivity Standards Alliance (Alliance).מגדירים את
Product IDלמזהה השותף שהגדרתם בשילוב של Matter ב-Google Home Developer Console.
מפעילים את הדגל OTA Requestor:
Component config -->CHIP Core -->System options --->מפעילים את הדגל OTA Requestor
[*] Enable OTA Requestorלוחצים על ESC פעמיים כדי לחזור לתפריט הראשי.
מפעילים את הדגל ליצירת קובץ אימג' מ-OTA של Matter:
Component config -->CHIP Device Layer --->Matter OTA Image --->[*] Generate OTA IMAGE
מגדירים את מספר הגרסה:
Application manager --->בחירה באפשרות
[*] Get the project version from Kconfigהגדרת
Project version (NEW)לערך1.0לוחצים על s כדי לשמור את ההגדרות האישיות, לוחצים על Enter פעמיים ואז על q כדי לצאת מ-
menuconfig.
הגדרת אישורי בדיקה
פועלים לפי השלבים במאמר יצירת אישורי בדיקה למכשירי Matter כדי ליצור אישורי CD, DAC ו-PAI.
הרכבת המכשיר
עכשיו מריצים את ה-build וצורבים את המכשיר:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashיצירה והעלאה של קובץ האימג' מ-OTA
עכשיו משנים שוב את הגדרות ה-build כדי ליצור קובץ אימג' של OTA. משתמשים באותה תמונה, אבל עם מספר גרסה גבוה יותר.
מריצים את menuconfig.
idf.py menuconfigבתפריט האינטראקטיבי, מעדכנים את הפרטים הבאים:
Application manager --->- בחירה באפשרות
[*] Get the project version from Kconfig - הגדרת
Project version (NEW)לערך2.0 - מקישים על s כדי לשמור את ההגדרות האישיות, מקישים על Enter פעמיים ואז מקישים על q כדי לצאת מ-
menuconfig.
יוצרים את התמונה ומאחזרים אותה. בדוגמה מוצגים גם המיקום של קובץ האימג' ל-OTA וגם הפלט כשמנתחים באמצעות ota_image_tool.py.
cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.binהפלט אמור להיראות כך:
Magic: 1beef11e
Total Size: 1243360
Header Size: 64
Header TLV:
[0] Vendor Id: XXXXX (0x000)
[1] Product Id: XXXXX (0x000)
[2] Version: 2 (0x2)
[3] Version String: v2.0
[4] Payload Size: 1243280 (0x12f890)
[8] Digest Type: 1 (0x1)
[9] Digest: e367f4d71e2ccd554b9a399c864abbf2c039382ef1def1b986fb2f59a99923a8
מכיוון ש-SDK של Matter מותקן מהמארח של הקונטיינר, קובץ ה-OTA זמין במארח של הקונטיינר.
מעלים את קובץ האימג' מ-OTA אל Developer Console לפי ההוראות להעלאת קובץ אימג' מ-OTA.
הפעלה ב-Google Home וצפייה בעדכון דרך האוויר (OTA)
מוודאים שהמכשיר מחובר למכונה המארחת של Linux באמצעות USB. בדוגמה הבאה מוצג השימוש ב-GNU screen כדי לקרוא את קובצי היומן במכשיר:
screen -L /dev/ttyUSB0 115200הפלט מהמכשיר יוצג בטרמינל, ואותו פלט ייכתב לקובץ יומן המסך שנקרא screenlog.0.
אפשר לפתוח את הקובץ screenlog.0 בכלי לעריכת טקסט אחר או להציג אותו במעטפת אחרת באמצעות cat, tail, more או grep.
לוחצים על כפתור האיפוס האדום שבצד המכשיר כדי לראות את היומנים מההפעלה.
בפלט של המכשיר, אמורים להופיע ה-VID וה-PID שהגדרתם קודם, וגם כתובת URL לתמונה של קוד ה-QR שבאמצעותה תפעילו את המכשיר.
[0;32mI (2388) chip[DIS]: Advertise commission parameter vendorID=XXXXX productID=XXXX discriminator=3840/15 cm=1[0m
[0;32mI (1928) chip[SVR]: SetupQRCode: [MT:E59-000000000000000][0m
https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AE59-000000000000000
מוודאים שה-Hub מחובר לאינטרנט בבית.
מפעילים את המכשיר באמצעות Google Home app (GHA) וקוד ה-QR מהקישור שמופיע בקובץ היומן.
אחרי ההפעלה, נותנים למכשיר לפעול בלי הפרעה במשך כמה דקות.
אתם אמורים לראות פלט של יומן שקשור למבקש ה-OTA, להורדת קובץ האימג' של ה-OTA ול-OTAImageProcessor.
אחרי התקנת קובץ האימג', בודקים שמשך הזמן לקימפול של קובץ האימג' תואם לזה של קובץ האימג' שהועלה למסוף, ושהוא מאוחר יותר ממשך הזמן לקימפול שדווח בהפעלה הראשונה. כדי להמחיש את תהליך ה-OTA, אפשר להריץ את grep עם התבנית הבאה במצב ביטוי רגולרי ב-screenlog.0:
grep -E "(Compile time|OTA)" screenlog.0הפלט אמור להיראות כך:
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 06:21:59
I (135558) chip[SWU]: OTA Requestor received AnnounceOTAProvider
I (540658) chip[SWU]: OTA image downloaded to offset 0x1a0000
I (541348) OTAImageProcessor: Applying, Boot partition set offset:0x1a0000
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
אחרי ההפעלה הראשונית, אפשר לחזור על השלבים בקטע יצירה והעלאה של קובץ אימג' OTA בלי להעלות קובץ אימג' חדש.
הפעם, מגדירים את הגרסאות בחזרה לערך 1.
מריצים את menuconfig, ובאפשרויות התפריט האינטראקטיבי:
Component config -->CHIP Device Layer --->Device Identification Optionsמגדירים את
Version Stringלהיותv1.0.מגדירים את
Device Software Version Numberלהיות1.מקישים על s כדי לשמור את ההגדרות האישיות, ואז על q כדי לצאת מ-
menuconfig.
מסירים את המכשיר מהבית בGHA.
אם התמונה עדיין לא נוצרה, יוצרים אותה:
idf.py buildצריבה:
idf.py -p /dev/ttyUSB0 erase_flashidf.py -p /dev/ttyUSB0 flashחוזרים על השלבים בקטע הפעלה ב-Google Home וצפייה ב-OTA לפי הצורך.
אימות עדכון התוכנה ב-OTA
אפשר לבדוק את גרסת התוכנה של המכשיר באמצעות אפליקציית Google Home (GHA). אחרי שהמכשיר הופעל, פועלים לפי ההליכים הבאים:
- לוחצים לחיצה ארוכה על משבצת המכשיר במסך הראשי של GHA.
- לוחצים על הסמל בפינה השמאלית העליונה.
- לוחצים על מידע טכני.
- בודקים את השדה גרסת התוכנה.