วิธีการต่อไปนี้ใช้ตัวอย่าง แอปไฟส่องสว่าง จาก Matter SDK ร่วมกับบอร์ดพัฒนา M5Stack ESP32
การตั้งค่าสภาพแวดล้อมของบิลด์
ขั้นแรก ให้โคลน Matter SDK
ในตัวอย่างนี้ เราจะตรวจสอบคอมมิตที่รองรับขั้นต่ำสำหรับ Google Home's Matter Release 5
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 Workflow เพื่อกำหนดว่าอิมเมจ Docker ใดเหมาะกับบิลด์ของเรามากที่สุด
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1image: connectedhomeip/chip-build-esp32:0.5.99เราเรียกใช้คอนเทนเนอร์จากอิมเมจ Docker โดยส่งแฟล็กเพื่อติดตั้ง Matter SDK ในคอนเทนเนอร์และให้สิทธิ์เข้าถึง อุปกรณ์ 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 /workspacegit submodule update --init --recursivesource ./scripts/activate.shsource /opt/espressif/esp-idf/export.shสร้างและแฟลช
งานถัดไปคือการสร้างอิมเมจและแฟลชชุดพัฒนาเพื่อให้ได้รับ การอัปเดตเฟิร์มแวร์ OTA Matter
หากต้องการดำเนินการนี้ คุณต้องสร้างอิมเมจ
ขั้นแรก ให้กำหนดค่าบิลด์โดยใช้ยูทิลิตี 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 --->เปิดใช้แฟล็ก OTA Requestor
[*] Enable OTA Requestorกด ESC 2 ครั้งเพื่อกลับไปที่เมนูระดับบนสุด
เปิดใช้แฟล็กการสร้างอิมเมจ 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 2 ครั้ง แล้วกด q เพื่อออกจาก
menuconfig
ตั้งค่าใบรับรองการทดสอบ
ทำตามขั้นตอนใน หัวข้อสร้างใบรับรองการทดสอบอุปกรณ์ Matter เพื่อสร้าง ใบรับรอง CD, DAC และ PAI
สร้างอุปกรณ์
ตอนนี้ให้เรียกใช้บิลด์และแฟลชอุปกรณ์โดยทำดังนี้
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flashสร้างและอัปโหลดอิมเมจ OTA
ตอนนี้ให้เปลี่ยนการตั้งค่าบิลด์อีกครั้งเพื่อสร้างอิมเมจ OTA ใช้อิมเมจเดิม แต่เพิ่มหมายเลขเวอร์ชัน
วิ่ง menuconfig
idf.py menuconfigในเมนูแบบโต้ตอบ ให้อัปเดตสิ่งต่อไปนี้
Application manager --->- เลือก
[*] Get the project version from Kconfig - ตั้งค่า
Project version (NEW)เป็น2.0 - กด s เพื่อบันทึกการกำหนดค่า กด Enter 2 ครั้ง แล้วกด 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
เนื่องจาก Matter SDK ติดตั้งจากโฮสต์คอนเทนเนอร์ อิมเมจ OTA จึงพร้อมใช้งานในโฮสต์คอนเทนเนอร์
อัปโหลดอิมเมจ OTA ไปยัง Developer Console โดยทำตาม วิธีการอัปโหลด OTA
มอบหมายให้ Google Home และสังเกต OTA
ตรวจสอบว่าอุปกรณ์เชื่อมต่อกับเครื่อง Linux โฮสต์ด้วย USB ตัวอย่างต่อไปนี้แสดงการใช้ GNU screen เพื่ออ่านบันทึกของอุปกรณ์
screen -L /dev/ttyUSB0 115200ซึ่งจะแสดงเอาต์พุตจากอุปกรณ์ไปยังเทอร์มินัลและเขียนเอาต์พุตเดียวกันลงในไฟล์บันทึกหน้าจอเริ่มต้นที่ชื่อว่า screenlog.0
คุณสามารถเปิดไฟล์ screenlog.0 ในเครื่องมือแก้ไขข้อความอื่นหรือแสดงใน Shell อื่นด้วย cat, tail, more หรือ grep
กดปุ่มรีเซ็ตสีแดงที่ด้านข้างของอุปกรณ์เพื่อดูบันทึกจากการบูต
ในเอาต์พุตของอุปกรณ์ คุณควรเห็น VID และ PID ที่คุณตั้งค่าไว้ก่อนหน้านี้ รวมถึง URL ของรูปภาพคิวอาร์โค้ดที่จะใช้ในการมอบหมายอุปกรณ์
[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) โดยใช้คิวอาร์โค้ดจาก ลิงก์ที่ปรากฏในไฟล์บันทึก
ปล่อยให้อุปกรณ์ทำงานอย่างต่อเนื่องเป็นเวลาหลายนาทีหลังจากการมอบหมาย
คุณควรเห็นเอาต์พุตบันทึกที่เกี่ยวข้องกับ 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_flashidf.py -p /dev/ttyUSB0 flashทำตามขั้นตอนในส่วนมอบหมายให้ Google Home และสังเกต OTA ซ้ำตามที่จำเป็น
ตรวจสอบการอัปเดตซอฟต์แวร์ OTA
คุณตรวจสอบเวอร์ชันซอฟต์แวร์ของอุปกรณ์ได้โดยใช้แอป Google Home (GHA) เมื่อมอบหมายอุปกรณ์แล้ว ให้ทำตามขั้นตอนต่อไปนี้
- กดการ์ดของอุปกรณ์ค้างไว้ในหน้าจอหลักของ GHA
- แตะไอคอน ที่ด้านขวาบน
- แตะข้อมูลทางเทคนิค
- ตรวจสอบช่องเวอร์ชันซอฟต์แวร์