K32W
この例は、オン/オフ機能を備えた電球デバイスタイプとして機能します。 手順は、NXP K32W 開発ボード(IOTZTB-DK006 開発キット)で検証されました。
初期設定
- Python3 とこれらのパッケージがインストールされていることを確認します。このドキュメントの手順は Python 3.8 で検証しました。
- K32W061 MCUXpresso SDK 2.6.9 をダウンロードしてインストールします。
- SDK がビルドされたら、SDK パッケージをダウンロードして、ホーム ディレクトリに展開します。環境変数
NXP_K32W0_SDK_ROOT
を SDK を抽出した場所に設定します。このコマンドを、使用しているシェルの.*rc
ファイル(.zshrc
など)に追加することもおすすめします。export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
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
この例では、「Generic Switch Node」構成を使用します。ジャンパー JP4/JP7 を左端(LPC-JN UART0)に置いてください。
JLink のボードを再構成する
- パソコンに JLink をダウンロードしてインストールします。
- ボードで、USB ポートの横にある BOOT ジャンパーで DFU が選択されていて、ミニ USB ケーブルでボードをパソコンに接続します。
- LPCScrypt をパソコンにダウンロードしてインストールします。
- macOS の場合は、ダウンロードしたパッケージをダブルクリックしてインストールします。
- Linux の場合は、パッケージをダウンロードするフォルダに移動します。
chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
./lpcscrypt-2.1.2_57.x86_64.deb.bin
- LPCScrypt をインストールしたら、このスクリプトを実行してボードを再プログラムします(
<LPCScrypt_InstallDir>
は LPCScrypt の実際のインストール パスに置き換えます)。<LPCScrypt_InstallDir>/scripts/program_JLINK
- 次のようなメッセージが表示されます。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)
- ボードを電源から外し、BOOT ジャンパーを [NORMAL] に戻します。これで、JLink を使用してイメージをフラッシュするようにボードが再構成されました。
イメージをビルドする
- リポジトリを準備します。
source ./scripts/activate.sh
- 依存関係をインストールします。
pip3 install pycrypto pycryptodome
- サンプル プロジェクト構成(
CHIPProjectConfig.h
)のVENDOR_ID
を更新します。これは、CSA の Matter specification, or a VID allocated for testing purposes. The value you provide forVENDOR_ID
must match the one you use when creating the Matter integration in the Google Home Developer Console.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
に従って VID になります - サンプル プロジェクト構成(
CHIPProjectConfig.h
)でPRODUCT_ID
を確認します。PRODUCT_ID
値は、例のデフォルトと同じにすることも、必要に応じて変更することもできます。ただし、前提条件前提条件に記載されているプロダクト ID の制限事項に従う必要があります。また、PRODUCT_ID
に指定する値は、Developer Console で Matter 統合を作成するときに使用する値と一致している必要があります。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
- ライティング アプリを作成します。
- 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
- OM15082 拡張ボードが接続されていない場合は、
chip_with_OM15082
ビルド引数を省略します。
Pigweed tokenizer は、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
chip_pw_tokenizer_logging
をtrue
に設定することで、文字列をハッシュ化することでログに必要なフラッシュを大幅に削減できるピグウィード モジュールです。ハッシュ化されたスクリプトの解析には、detokenizer スクリプトが必要です。詳しくは、こちらをご覧ください。
- OM15082 拡張ボードが K32W ボードに接続されている場合は、
macOS の場合(MacOS でビルドしていない場合は、この手順をスキップしてください):
テキスト エディタで
sign_images.sh
スクリプト($NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
にあります)を開き、次の変更を行います。- macOS の「パッケージがインストールされていません」というエラーを解決するには、次の行をコメントアウトするか削除します。
is_linux_package_installed "python3" is_linux_package_installed "python3-pip"
file
ユーティリティへの引数を修正します(「-ib
」は「-Ib
」にしてください)。そうしないと、署名スクリプトは通知なく.bin
ファイルを生成します。MIME_SET="$(file -ib $FILENAME)"
次のように変更します。MIME_SET="$(file -Ib $FILENAME)"
- macOS の「パッケージがインストールされていません」というエラーを解決するには、次の行をコメントアウトするか削除します。
イメージに署名します。
chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/
ボードをフラッシュする
- ミニ USB ケーブルで接続したボードで JLink コマンドラインを起動します。
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- 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. - 次に、
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. - 「
exit
」と入力して JLink CLI を終了します。 - JLink を再起動します。
JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
- 画像を再度フラッシュします(今回は
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. loadbin
コマンドが完了したら、拡張ボードの SW2 ボタンを押して出荷時設定へのリセットを行い、メインボードの SW4 RESET ボタンを押してイメージの実行を開始します。
サンプルを検証する
- デバイスは、USB シリアル デバイスとしてパソコンに提示されます。
/dev/
で確認できます。
python3 スクリプト detokenizer.py を使用してシリアル コンソールを開くことができます。このスクリプトは、シリアルポートから Pigweed トークン化ログをデコードするスクリプトです。たとえば、デバイスがls -la /dev/tty*
/dev/ttyACM0
にある場合:python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
- ボードを出荷時設定にリセットするには、SW2 ボタンを押します。LED2 と LED3 が一時的に点滅します。シリアル コンソールに次のようなメッセージが表示されます。
[Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel! [Info]Device will factory reset... [Info]Performing factory reset
- 電球の状態(オン/オフ)を切り替えるには、SW3 ボタンをクリックします。LED の D3 がオンになります。
コミッショニングの前提条件
NXP K32W 開発ボードに依頼する前に、次の点に注意してください。
- BLE アドバタイズは、Google Home エコシステム内でデバイスを検出してコミッションする前に有効にする必要があります。広告を一時的に有効にする(Matter 仕様に従って 15 分間)場合は、USERINTERFACE ボタンを押します。
暗号ハードウェア アクセラレータ モジュールを使用しない場合、K32 開発ボードは、Android mobile device side. You can identify that a timeout occurred by using
adb logcat
from a computer attached to your phone. When a timeout occurs, you will see a log message like:Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout
からのフローがタイムアウトするまでコミッションを完了できない場合があります。adb
の設定と使用の詳細については、トラブルシューティングをご覧ください。
次のステップ
Matter サンプルが正常にビルドされたら、デベロッパー プロジェクトを作成します。