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

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

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

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

ตรวจสอบ 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

เชื่อมต่อบอร์ดของ Nordic กับคอมพิวเตอร์ ตรวจสอบการแจกแจง 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

เรียกใช้คอนเทนเนอร์โดยใช้ข้อมูลที่รวบรวมไว้ในคำสั่งก่อนหน้า ส่ง แฟล็กเพื่อติดตั้งโฟลเดอร์ Matter SDK ของโฮสต์และอินเทอร์เฟซแบบอนุกรม 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 และ ตัวแปรสภาพแวดล้อมสำหรับ nRF52 Toolchain ของ Nordic การเริ่มต้น Matter SDK มักใช้เวลาหลายนาที

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

สร้างและแฟลช

กำหนดค่า 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 ที่มีเวอร์ชันซอฟต์แวร์ของอุปกรณ์เพิ่มขึ้น

เปิดใช้ menuconfig ของ Zephyr โดยทำดังนี้

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

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

จัดเตรียมอุปกรณ์และสังเกตกระบวนการ OTA

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

minicom -c on -D /dev/ttyACM0 115200

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

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

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

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

ปล่อยให้อุปกรณ์บันทึกกิจกรรมหลังจากจัดเตรียมแล้ว

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

/* 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 แสดงช่องเวอร์ชันซอฟต์แวร์