北欧で OTA をテストする

次の手順では、Matter SDK の照明アプリの例と Nordic nRF52840 開発ボードを使用します。

環境設定

以下の手順は、nRF Connect ツールチェーンの 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 と 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

ビルドとフラッシュ

デバイスの 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 Version2 に変更します。

  5. Device Software Version Stringprerelease-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 プロセスを観察します。

ホストまたはコンテナで、デバイスへのターミナル接続を開きます。minicom や GNU screen などのお好みのターミナルを使用します。

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

デバイスのリセットボタンを押すと、起動時のログが表示されます。

デバイスの出力に、設定した VID と PID のほか、構成 QR コードの 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

ハブがオンラインであることを確認して、ログに記載されているリンクの QR コードを使用して、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 アプリの画面