בהוראות הבאות נעשה שימוש בדוגמה של אפליקציית התאורה מה-SDK של Matter, יחד עם לוח הפיתוח של M5Stack ESP32.
הגדרה של סביבת Build
קודם כול, משכפלים את ה-SDK של Matter.
בדוגמה הזו אנחנו בודקים את ההתחייבות המינימלית הנתמכת לגרסה 5 של Google Home ב-Matter:
$ mkdir otaprep
$ cd otaprep
git 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 Workflow כדי לקבוע איזו תמונת Docker הכי מתאימה ל-build שלנו:
$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: 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
עצירה והפעלה של קונטיינר Matter Docker
בכל פעם שמריצים פקודת 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
לחלופין, אפשר להתחיל סשן בסיס באמצעות:
user@host> docker exec -u 0 -it container_name /bin/bash
הפעלת ה-SDK
במאגר התגים, אנחנו מאתחלים את Matter ה-SDK ואת ה-ESP IDF:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
פיתוח ופלאש
המשימה הבאה היא ליצור את התמונה ולהדליק את ערכת הפיתוח כדי לקבל את עדכון הקושחה של OTA ב-Matter.
לשם כך עליך ליצור תמונה.
תחילה צריך להגדיר את ה-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
ל-PID שהגדרתם בשילוב של Matter ב-Google Home Developer Console.
מפעילים את הסימון של OTA Requestor:
Component config -->
CHIP Core -->
System options --->
הפעלת התכונה הניסיונית
[*] Enable OTA Requestor
של OTAמקישים פעמיים על ESC כדי לחזור לתפריט שברמה העליונה.
הפעלת התכונה הניסיונית Matter OTA ליצירת תמונה:
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
צריך לוודא שהרכזת מחוברת לאינטרנט בבית.
מקצים במכשיר את Google Home app (GHA) באמצעות קוד ה-QR מהקישור שמופיע בקובץ היומן.
אפשר למכשיר לפעול ללא הפרעה למשך מספר דקות לאחר העמלה.
צריך לשים לב לפלט היומן שקשור ל-OTA Requestor, להורדת תמונה ב-OTA ול-OTAImageProcessor
.
אחרי שמתקינים את התמונה, חשוב לשים לב ששעת ההידור של התמונה תואמת לזו של זו שהועלתה למסוף, והיא מאוחרת יותר משעת ההידור שדווחה בהפעלה הראשונה. ביצוע grep
עם התבנית הבאה במצב ביטוי רגולרי ב-screenlog.0
יכול להדגים את תהליך ה-OTA:
$ 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_flash
idf.py -p /dev/ttyUSB0 flash
חוזרים על השלבים של עמלה ל-Google Home ומעיינים ב-OTA לפי הצורך.
אימות העדכון של תוכנת ה-OTA
אפשר לבדוק את גרסת התוכנה של המכשיר באמצעות אפליקציית Google Home (GHA). אחרי שהמכשיר הוזמן, פועלים לפי ההליכים הבאים:
- צריך ללחוץ לחיצה ארוכה על משבצת המכשיר במסך הראשי של GHA
- מקישים על הסמל בפינה השמאלית העליונה
- מקישים על מידע טכני.
- בודקים את השדה גרסת תוכנה