ההוראות הבאות כוללות את אפליקציית תאורה דוגמה מ-SDK Matter יחד עם M5Stack ESP32 ולוחות פיתוח.
הגדרה של סביבת build
קודם כול, משכפלים את ה-SDK של Matter.
בדוגמה הזו אנחנו בודקים את הערך המינימלי הנתמך של התחייבות Matter גרסה 5:
$ 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 כדי איזו תמונת 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
בקונטיינר, אנחנו מאתחלים את ה-SDK של Matter ואת ה-ESP IDF:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
יצירה ו-Flash
המשימה הבאה היא ליצור את התמונה ולהריץ את ערכת הפיתוח כדי לקבל עדכון הקושחה של 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':
Component config -->
CHIP Core -->
System options --->
הפעלת הסימון של 'מגיש הבקשה OTA'
[*] Enable OTA Requestor
מקישים פעמיים על 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 ו-Flash של המכשיר:
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
עם
בדפוס הבא במצב ביטוי רגולרי (regex) ב-screenlog.0
אפשר לראות את ה-OTA
process:
$ 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
- מקישים על הסמל בצד שמאל למעלה
- מקישים על מידע טכני.
- בודקים את השדה גרסת תוכנה.