在北歐上測試 OTA

以下操作說明使用 燈具應用程式 Matter SDK 及 Nordic nRF52840 的範例 開發板

環境設定

這些操作說明是以以 Docker 為基礎的 nRF 互動交流 工具鍊。如果不想使用 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

將北歐遊戲板連接到電腦。請檢查 序列介面:

使用 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 和 Nordic nRF52 工具鍊的環境變數。 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

建構與 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. 輸入底數 10 的 Device vendor ID (VID) 和 Device product ID (PID) 整數格式。

  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

在主機上或 都會在 Docker 容器中執行使用你慣用的終端機工具,例如 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

建構新的 Matter OTA 套件檔案。系統會確定輸出結果 在「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

確認產生的 Matter OTA 組合屬性 檔案:

/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 映像檔上傳至 透過 OTA 上傳程序操作 Google Home Developer Console 操作說明

調試裝置,並觀察 OTA 程序。

在主機上或 都會在 Docker 容器中執行使用你常用的終端機,例如 minicom 或 GNU screen

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

按下裝置的重設按鈕,即可查看開機記錄。

裝置輸出內容中會顯示您設定的 VID 和 PID,以及 執行 QR code 的網址:

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)

在調校後,讓裝置記錄裝置活動。

您應該會在裝置記錄中看到下列文字:

/* 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 應用程式畫面顯示軟體版本欄位