ทดสอบ OTA ในนอร์ดิก

วิธีการต่อไปนี้ใช้ตัวอย่างแอปการจัดแสงจาก SDK ของ Matter ร่วมกับบอร์ดการพัฒนา Nordic nRF52840

การตั้งค่าสภาพแวดล้อม

วิธีการเหล่านี้อิงตามการติดตั้งเครื่องมือเชน nRF Connect ที่ใช้ Docker หากคุณไม่ต้องการใช้ Docker ให้ดูวิธีการติดตั้ง nRF เชื่อมต่อแบบเนทีฟในคอมพิวเตอร์โฮสต์ในเว็บไซต์นอร์ดิก

ลองใช้ Matter SDK

user@host> mkdir otaprep
user@host> cd otaprep
user@host> git clone https://github.com/project-chip/connectedhomeip.git
user@host> cd connectedhomeip/
user@host> git fetch origin v1.0-branch
user@host> git checkout FETCH_HEAD

โปรดตรวจสอบอิมเมจ Docker ที่ถูกต้องที่จะใช้ ใช้รูปภาพที่สร้างในการผสานรวม Matter SDK อย่างต่อเนื่อง

user@host> cat .github/workflows/examples-nrfconnect.yaml | grep chip-build
            image: connectedhomeip/chip-build-nrf-platform:0.5.99

เชื่อมต่อกระดานนอร์ดิกกับคอมพิวเตอร์ ตรวจสอบการนับจํานวน USB ของอินเทอร์เฟซแบบอนุกรม

ใน MacOS ให้ทําดังนี้

user@host> ls /dev/tty.usbmodem*
/dev/tty.usbmodem0123456789000

โดยใช้ Linux ดังนี้

user@host> ls /dev/tty*AC*
/dev/ttyACM0

หรือ

user@host> ls /dev/tty*USB*
/dev/ttyUSB0

เรียกใช้คอนเทนเนอร์โดยใช้ข้อมูลที่รวบรวมในคําสั่งก่อนหน้า ส่งผ่านแฟล็กเพื่อต่อเชื่อมโฟลเดอร์ SDK ของ Matter และอินเทอร์เฟซอนุกรม USB กับคอนเทนเนอร์

user@host> docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind connectedhomeip/chip-build-nrf-platform: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 และตัวแปรสภาพแวดล้อมสําหรับห่วงโซ่เครื่องมือ Nordic nRF52 การเริ่มต้น SDK Matter มักใช้เวลาหลายนาที

$ cd /workspace
$ git submodule update --init --recursive
$ source ./scripts/bootstrap.sh
$ source ./scripts/activate.sh
$ export ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyr
$ export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"
$ scripts/run_in_build_env.sh "python3 scripts/setup/nrfconnect/update_ncs.py --update --shallow"
$ source /opt/NordicSemiconductor/nrfconnect/zephyr/zephyr-env.sh

บิวด์และ Flash

กําหนดค่า VID และ PID สําหรับอุปกรณ์ ดังนี้

$ cd examples/lighting-app/nrfconnect
$ west build -b nrf52840dk_nrf52840 -t menuconfig

ในตัวเลือกเมนูแบบอินเทอร์แอกทีฟ ให้ทําดังนี้

  1. Modules --->

  2. connectedhomeip --->

  3. [*] Connected Home over IP protocol stack --->

  4. ป้อน Device vendor ID (VID) และ Device product ID (PID) ในรูปแบบเลขฐาน 10

  5. ตรวจสอบว่ามีการเลือกธง [*] Enable OTA requestor

  6. กด s เพื่อบันทึกการกําหนดค่า กด Enter เพื่อยืนยัน แล้วกด q เพื่อออกจาก menuconfig

ตั้งค่าใบรับรองการทดสอบ

ทําตามขั้นตอนในหัวข้อสร้างใบรับรองการทดสอบอุปกรณ์ Matter เพื่อสร้างใบรับรอง CD, DAC และ PAI

สร้างอุปกรณ์ของคุณ

$ west build -b nrf52840dk_nrf52840

แฟลชอุปกรณ์

ซึ่งทําในคอมพิวเตอร์โฮสต์ได้ ไม่ใช่ในคอนเทนเนอร์ Docker

หากยังไม่มีเครื่องมือบรรทัดคําสั่ง nRFConnect ให้ดาวน์โหลดและติดตั้ง

user@host> nrfjprog --program build/zephyr/merged.hex --chiperase -f NRF52

เปิดการเชื่อมต่อเทอร์มินัลกับอุปกรณ์ของคุณบนโฮสต์หรือบนคอนเทนเนอร์ ใช้เครื่องมือเทอร์มินัลที่คุณชื่นชอบ เช่น minicom หรือ GNU screen

user@host> minicom -c on -D /dev/ttyACM0 115200

user@host> screen /dev/ttyACM0 115200

สร้างและอัปโหลดรูปภาพ OTA

เมื่อคุณแฟลชอุปกรณ์แล้ว ให้เปลี่ยนการตั้งค่าบิวด์อีกครั้งเพื่อสร้างอิมเมจ OTA ที่มีเวอร์ชันซอฟต์แวร์อุปกรณ์ที่เพิ่มขึ้น

เปิดใช้งาน Zephyr menuconfig:

$ west build -b nrf52840dk_nrf52840 -t menuconfig

ในตัวเลือกเมนูแบบอินเทอร์แอกทีฟ ให้ทําดังนี้

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. เปลี่ยน Device Software Version เป็น 2

  5. เปลี่ยน Device Software Version String เป็น prerelease-2

  6. กด s เพื่อบันทึกการกําหนดค่า กด Enter เพื่อยืนยัน แล้วกด q เพื่อออกจาก menuconfig

สร้างไฟล์กลุ่ม OTA ของ Matter ใหม่ เอาต์พุตจะอยู่ใน build/zephyr/zephyr.bin

$ /workspace/src/app/ota_image_tool.py create -v hex_VID -p hex_PID -vn version_no -vs version_string path_to_binary -da digest_algorithm path_to_ota_file

ยืนยันคุณสมบัติของไฟล์กลุ่ม OTA ที่สร้างขึ้น Matter

/workspace/examples/lighting-app/nrfconnect# /workspace/src/app/ota_image_tool.py show firmware-ota-update-test.bin
Magic: 1beef11e
Total Size: 951784
Header Size: 72
Header TLV:
  [0] Vendor Id: XXXXX (0xXXXX)
  [1] Product Id: 32768 (0x8000)
  [2] Version: 2 (0x2)
  [3] Version String: prerelease-2
  [4] Payload Size: 951696 (0xe8590)
  [8] Digest Type: 1 (0x1)
  [9] Digest: 75f2e8b0c8e922b8bb3841504190bcdd83533e936a284c7254d29327d605c930

เนื่องจาก SDK ของ Matter ต่อเชื่อมจากโฮสต์คอนเทนเนอร์ของคุณ อิมเมจ OTA จึงพร้อมใช้งานในโฮสต์คอนเทนเนอร์ด้วย อัปโหลดรูปภาพ OTA ไปยัง Google Home Developer Console โดยทําตามวิธีการอัปโหลด OTA

มอบสิทธิ์ให้อุปกรณ์และสังเกตกระบวนการ OTA

เปิดการเชื่อมต่อเทอร์มินัลกับอุปกรณ์บนโฮสต์หรือคอนเทนเนอร์ ใช้เทอร์มินัลที่คุณชื่นชอบ เช่น minicom หรือ GNU screen:

$ minicom -c on -D /dev/ttyACM0 115200

กดปุ่มรีเซ็ตของอุปกรณ์เพื่อดูบันทึกเมื่อเปิดเครื่อง

ในเอาต์พุตของอุปกรณ์ คุณจะเห็น VID และ PID ที่คุณตั้งค่าไว้ รวมถึง URL สําหรับโค้ด QR สําหรับค่าคอมมิชชัน

I: nRF5 802154 radio initialized
I: 4 Sectors of 4096 bytes

(...)

I: 681 [SVR]Server Listening...
I: 684 [DL]Device Configuration:
I: 687 [DL]  Serial Number: 11223344556677889900
I: 692 [DL]  Vendor Id: XXXXX (0xXXXX)
I: 695 [DL]  Product Id: XXXXX (0xXXXX)
I: 699 [DL]  Hardware Version: 0
I: 702 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 708 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 714 [DL]  Manufacturing Date: (not set)
I: 718 [DL]  Device Type: 65535 (0xFFFF)
I: 723 [SVR]SetupQRCode: [MT:6FCJ142C00KA0648G00]
I: 727 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 733 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%000000000000000000000
I: 742 [SVR]Manual pairing code: [30900112302]
I: 747 [DL]CHIP task running
I: 752 [DL]CHIPoBLE advertising started
I: 757 [DL]NFC Tag emulation started

ตรวจสอบว่า Hub ออนไลน์อยู่และชาร์จอุปกรณ์ด้วย Google Home app (GHA) โดยใช้โค้ด QR จากลิงก์ที่พบในบันทึก

ปล่อยให้อุปกรณ์บันทึกกิจกรรมหลังค่าคอมมิชชัน

คุณควรเห็นข้อความต่อไปนี้ในบันทึกอุปกรณ์

/* Hub OTA provider identification */
I: 69642 [SWU]OTA Requestor received AnnounceOTAProvider
D: 69647 [SWU]  FabricIndex: 1
D: 69649 [SWU]  ProviderNodeID: 0x00000000XXXXXXXX
D: 69654 [SWU]  VendorID: 0x6006
D: 69657 [SWU]  AnnouncementReason: 0
D: 69660 [SWU]  Endpoint: 2
...
D: 69799 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262265 [SWU]QueryImageResponse:
D: 262268 [SWU]  status: 0
D: 262271 [SWU]  imageURI: bdx://00000000FC843D94/37f09fd6-0000-0000-0000-000000000000
D: 262278 [SWU]  softwareVersion: 2
D: 262281 [SWU]  softwareVersionString: 2
D: 262285 [SWU]  updateToken: 36
D: 262288 [SWU]  userConsentNeeded: 0
D: 262292 [SWU]Update available from version 0 to 2
...
D: 262372 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262409 [SWU]BDX::SendMessage

หลังจากใช้รูปภาพแล้ว อุปกรณ์จะรีบูต หลังจากรีบูต เวลาคอมไพล์ของรูปภาพควรตรงกับเวลาที่อัปโหลดใน Developer Console

ตรวจสอบการอัปเดตซอฟต์แวร์ OTA

ตรวจสอบเวอร์ชันซอฟต์แวร์ของอุปกรณ์ได้โดยใช้แอป Google Home (GHA) เมื่ออุปกรณ์ได้รับค่าคอมมิชชันแล้ว ให้ทําตามขั้นตอนต่อไปนี้

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

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