以下操作說明使用 Matter SDK 中的照明應用程式範例,以及 Nordic nRF52840 開發板。
環境設定
這些操作說明是以 Docker 為基礎安裝 nRF Connect 工具鏈為前提。如果您不想使用 Docker,請參閱 Nordic 網站上的說明,瞭解如何在主機電腦上原生安裝 nRF Connect。
查看 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
在容器中,初始化 Nordic nRF52 工具鏈的 Matter SDK 和環境變數。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
在互動式選單選項中:
Modules --->
connectedhomeip --->
[*] Connected Home over IP protocol stack --->
請以 10 進制整數格式輸入
Device vendor ID
(VID) 和Device product ID
(PID)。確認已選取
[*] Enable OTA requestor
標記。按下 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
在互動式選單選項中:
Modules -->
connectedhomeip -->
Connected Home over IP protocol stack -->
將
Device Software Version
變更為2
。將
Device Software Version String
變更為prerelease-2
。按下 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 程序。
在主機或容器上開啟與裝置的終端機連線。使用您慣用的終端機,例如 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 已連上網路,並使用記錄中連結的 QR code,透過 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) 檢查裝置軟體版本。裝置調試完成後,請按照下列程序操作:
- 長按 GHA 主畫面上的裝置圖塊
- 輕觸右上方的 圖示
- 輕觸「技術資訊」。
- 查看「軟體版本」欄位