ทดสอบ OTA บน Espressif ESP32

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

วิธีการต่อไปนี้ใช้ตัวอย่างแอปการจัดแสงจาก Matter SDK along with an M5Stack ESP32 development board.

สร้างสภาพแวดล้อม

ก่อนอื่นให้โคลน SDK Matter

ในตัวอย่างนี้ เราได้ตรวจสอบสัญญาผูกมัดขั้นต่ําที่รองรับสําหรับ Google Home 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 เพื่อตัดสินว่ารูปภาพ Dock ใดเหมาะกับบิลด์ของเรามากที่สุด

$ cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
            image: connectedhomeip/chip-build-esp32:0.5.99

เราเรียกใช้คอนเทนเนอร์จากอิมเมจแท่นชาร์จ ส่งผ่านแฟล็กเพื่อต่อเชื่อม 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 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

หากต้องการทําเช่นนั้น คุณต้องสร้างรูปภาพ

อันดับแรก ให้กําหนดค่าบิลด์โดยใช้ยูทิลิตี menuconfig จาก ESP IDF

cd examples/lighting-app/esp32
idf.py menuconfig

ในเมนูแบบอินเทอร์แอกทีฟ ให้กําหนดการตั้งค่าต่อไปนี้

  1. Component config --->

  2. CHIP Device Layer --->

  3. Device Identification Options --->

  4. ตั้งค่า Vendor ID เป็น VID ที่มอบหมายของ CSA

  5. ตั้งค่า Product ID เป็น PID ที่คุณตั้งค่าไว้ในการผสานรวม Matter ใน Google Home Developer Console .

เปิดใช้การแจ้งผู้ขอ OTA:

  1. Component config -->

  2. CHIP Core -->

  3. System options --->

  4. เปิดใช้แฟล็กผู้ขอ OTA [*] Enable OTA Requestor

  5. กด ESC 2 ครั้งเพื่อกลับไปที่เมนูระดับบนสุด

เปิดใช้แฟล็กการสร้างรูปภาพ OTA สําหรับ Matter ดังนี้

  1. Component config -->

  2. CHIP Device Layer --->

  3. Matter OTA Image --->

  4. [*] Generate OTA IMAGE

กําหนดหมายเลขเวอร์ชันดังนี้

  1. Application manager --->

  2. เลือก[*] Get the project version from Kconfig

  3. ตั้งค่า Project version (NEW) เป็น 1.0

  4. กด 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

ในเมนูโต้ตอบ ให้อัปเดตสิ่งต่อไปนี้

  1. Application manager --->
  2. เลือก[*] Get the project version from Kconfig
  3. ตั้งค่า Project version (NEW) เป็น 2.0
  4. กด 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

เนื่องจาก SDK มีการต่อเชื่อม Matter จากโฮสต์คอนเทนเนอร์ รูปภาพ 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

ตรวจสอบว่า Hub ออนไลน์อยู่ที่บ้าน

ค่าคอมมิชชันอุปกรณ์ด้วย Google Home app (GHA) using the QR code from the link that appears in the log file.

ปล่อยให้อุปกรณ์ทํางานแบบไม่ขาดตอนเป็นเวลาหลายนาทีหลังจากค่าคอมมิชชัน คุณควรสังเกตเอาต์พุตบันทึกที่เกี่ยวข้องกับผู้ขอ OTA, ดาวน์โหลดรูปภาพ 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 และในตัวเลือกเมนูแบบอินเทอร์แอกทีฟ

  1. Component config -->

  2. CHIP Device Layer --->

  3. Device Identification Options

  4. ตั้งค่า Version String เป็น v1.0

  5. ตั้งค่า Device Software Version Number เป็น 1

  6. กด 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) เมื่ออุปกรณ์ได้รับค่าคอมมิชชัน ให้ทําตามขั้นตอนต่อไปนี้

  1. กดการ์ดของอุปกรณ์ค้างไว้ที่ GHA หน้าจอหลัก
  2. แตะไอคอน ที่ด้านขวาบน
  3. แตะข้อมูลทางเทคนิค
  4. ตรวจสอบช่องเวอร์ชันซอฟต์แวร์

หน้าจอแอป Google Home แสดงช่องเวอร์ชันซอฟต์แวร์