NXP

{0}

K32W

この例は、オン/オフ機能を備えた電球デバイスタイプとして機能します。この手順は NXP K32W 開発ボード(IOTZTB-DK006 開発キット)で検証されています。

初期設定を行う

  1. Python3 と次のパッケージがインストールされていることを確認します。このドキュメントの手順は Python 3.8 で検証されています。
  2. K32W061 MCUXpresso SDK 2.6.9 をダウンロードしてインストールします。
  3. SDK がビルドされたら、SDK パッケージをダウンロードして、ホーム ディレクトリに抽出します。環境変数 NXP_K32W0_SDK_ROOT を、SDK を解凍した場所に設定します。このコマンドを、使用しているシェルの .*rc ファイル(.zshrc など)に追加することもおすすめします。
    export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
  4. NXP/マイクロ リポジトリのクローンを作成して初期化します。

    git clone https://github.com/NXPmicro/matter.git
    cd matter
    git fetch origin v1.0-branch-nxp
    git checkout FETCH_HEAD
    git submodule update --init --recursive
    source ./scripts/activate.sh
    

  5. この例では、「Generic Switch Node」構成を使用します。ジャンパー JP4/JP7 が左端の位置にあることを確認します(LPC-JN UART0)。
    イメージ

  1. JLink をダウンロードしてインストールします。
  2. ボード上の USB ポートの横にあるブート ジャンパーで DFU が選択されていることを確認して、ボードをミニ USB ケーブルでパソコンに接続します。
    イメージ
  3. パソコンに LPCScrypt をダウンロードしてインストールします。
    1. macOS の場合、ダウンロードしたパッケージをダブルクリックしてインストールします。
    2. Linux の場合は、パッケージをダウンロードするフォルダ(
      chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
      ./lpcscrypt-2.1.2_57.x86_64.deb.bin
      )に移動します。
  4. LPCScrypt がインストールされたら、次のスクリプトを実行してボードを再プログラムします(<LPCScrypt_InstallDir> は LPCScrypt の実際のインストール パスに置き換えます)。
    <LPCScrypt_InstallDir>/scripts/program_JLINK
  5. 次のようなメッセージが表示されます。Space キーを押してプログラミングを開始します。完了したら、Enter キーを押して終了します。
    LPCScrypt - J-Link firmware programming script v2.1.2 Nov 2020.
    
    Connect an LPC-Link2 or LPCXpresso V2/V3 Board via USB then press Space.
    Booting LPCScrypt
    .
    LPCXpresso V2/V3 programmed with
    Firmware_JLink_LPCXpressoV2_20190404.bin
    -To use: remove DFU link and reboot the board
    
    Connect next board then press Space (or <return> to Quit)
  6. ボードを電源から外し、ブート ジャンパーを [NORMAL] に戻します。これで、イメージの書き込みに JLink を使用するようにボードが再構成されました。
    イメージ

イメージをビルドする

  1. リポジトリを準備します。
    source ./scripts/activate.sh
  2. 依存関係をインストールします。

    pip3 install pycrypto pycryptodome

  3. サンプル プロジェクト構成(CHIPProjectConfig.h)の VENDOR_ID を更新します。これは、Matter 仕様に基づく VID か、テスト目的で割り当てられた VID である必要があります。VENDOR_ID に指定する値は、Google Home Developer ConsoleMatter 統合を作成するときに使用する値と一致している必要があります。

grep VENDOR_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
 * CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID your-hex-VID
1. サンプル プロジェクト構成(CHIPProjectConfig.h)の PRODUCT_ID を確認します。PRODUCT_ID 値は例のデフォルトと同じままにすることも、必要に応じて変更することもできますが、現在の [前提条件に記載されているプロダクト ID の制限](/matter/get-started#product_id)に従う必要があります。また、「PRODUCT_ID」に指定する値は、Developer Console で [Matter 統合を作成](/matter/integration/create)するときに使用する値と **一致する必要があります**。
grep PRODUCT_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
 * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x4B4C
1. 照明アプリを作成します。 1. **OM15082 拡張ボードが K32W ボードに取り付けられている場合**、ビルド引数「chip_with_OM15082」を必ず「1」に設定します。
cd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root=\"${NXP_K32W0_SDK_ROOT}\" chip_with_OM15082=1 chip_with_ot_cli=0 is_debug=false chip_crypto=\"platform\" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
1. **OM15082 拡張ボードが接続されていない場合** は、`chip_with_OM15082` ビルド引数を省略します。
cd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root=\"${NXP_K32W0_SDK_ROOT}\" chip_with_ot_cli=0 is_debug=false chip_crypto=\"platform\" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
[Pigweed tokenizer](https://pigweed.dev/pw_tokenizer){:target="_blank" .external} は、文字列をハッシュ化するために pigweed のスクリプトを解析するための pigweed モジュールです。詳しくは、[こちら](https://github.com/project-chip/connectedhomeip/tree/v1.0-branch/examples/lighting-app/nxp/k32w/k32w0#pigweed-tokenizer){:target="_blank" .external} をご覧ください。 1. **MacOS ユーザーの場合**(MacOS で構築していない場合はこの手順をスキップ): テキスト エディタで `sign_images.sh` スクリプト(`$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh` にあります)を開き、次の変更を行います。 1. 以下の行をコメントアウトするか削除して、MacOS における「パッケージがインストールされていません」というエラーを解決します。
is_linux_package_installed "python3"
is_linux_package_installed "python3-pip"
1. file ユーティリティの引数を修正します("`-ib`" は "`-Ib`")。修正しないと、署名スクリプトは通知なく `.bin` ファイルの生成に失敗します。
MIME_SET="$(file -ib $FILENAME)"
次のように変更します。
MIME_SET="$(file -Ib $FILENAME)"
1. イメージに署名します。
chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/

ボードをフラッシュする

  1. ミニ USB ケーブルで接続されたボードで JLink コマンドラインを起動します。
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  2. JLink のコマンドラインで erase コマンドを入力し、ボード上の既存のイメージをワイプします。これは、以前にボードをフラッシュしたことがある場合に必要です。
    erase
    Without any give address range, Erase Chip will be executed
    Erasing device...
    J-Link: Flash download: Total time needed: 2.878s (Prepare: 0.051s, Compare: 0.000s, Erase: 2.789s, Program: 0.000s, Verify: 0.000s, Restore: 0.037s)
    Erasing done.
  3. 次に、loadbin コマンドを使用してイメージをフラッシュします。
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
  4. exit」と入力して JLink CLI を終了します。
  5. JLink を再起動します。
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  6. もう一度イメージをフラッシュします。今回は erase コマンドをスキップします。
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
  7. loadbin コマンドが完了したら、拡張ボードの [SW2] ボタンを押して出荷時設定へのリセットを実行し、メインボードの [SW4 RESET] ボタンを押してイメージの実行を開始します。

サンプルを検証する

  1. デバイスは、パソコンで USB シリアル デバイスとして表示される必要があります。/dev/ で検索できます。
    ls -la /dev/tty*
    python3 スクリプト detokenizer.py を使用してシリアル コンソールを開くことができます。これは、Pigweed トークン化ログをシリアルポートからデコードするスクリプトです。たとえば、デバイスが /dev/ttyACM0 にある場合:
    python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
  2. ボードを初期状態にリセットするには、[SW2] ボタンを押します。LED2LED3 がしばらくの間一緒に点滅します。シリアル コンソールに
    [Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel!
    [Info]Device will factory reset...
    [Info]Performing factory reset
    のようなメッセージが表示されます。
  3. 電球の状態(オン/オフ)を切り替えるには、SW3 ボタンをクリックします。LED D3 が切り替わるはずです。

コミッショニングの前提条件

NXP K32W 開発ボードをコミッショニングする前に、次の点に注意してください。

  1. デバイスが Google Home エコシステム内で検出されてコミッショニングされる前に、BLE のアドバタイジングを有効にする必要があります。広告を一時的に(Matter の仕様に従って 15 分間)有効にするには、[USERINTERFACE] ボタンを押します。
  2. 暗号ハードウェア アクセラレータ モジュールがない場合、K32 開発ボードは、Android モバイル デバイス側からフローがタイムアウトする前にコミッショニングを完了できない可能性があります。スマートフォンに接続されているパソコンから adb logcat を使用することで、タイムアウトが発生したことを確認できます。タイムアウトが発生すると、

    Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout
    のようなログメッセージが表示されます。

    adb の設定と使用の詳細については、トラブルシューティングをご覧ください。

次のステップ

Matter サンプルが正常にビルドされたら、デベロッパー プロジェクトを作成します。