nRF52840でIKEA TRÅDFRIを制御する
nRF52840は、NordicのSDKを使うとZigbeeも扱うことができます。nRF52840を使った無線モジュールとSDK内のCLIデモアプリを組み合わせることで、IKEA TRÅDFRIを制御できるようになりました。
とりあえず制御できるようにするには
nRF52840の準備
nRF52840モジュールは、スイッチサイエンスで販売しているMS88SF2を使いました。写真のように、J-LINKが出す5Vを直結すると、モジュール内部で適宜降圧するのでとても便利です。
- nrf5sdkforthreadv41/components/boards/pca10056.h のUART入出力ピンを、モジュールで利用できるピンに変更する。どれを使うのかよくわからなかったので、UARTは全部同じピン番号に変更しました。
- J-LINKとMS88SF2を適切に接続する。UARTは前項で設定したピンに合わせます。
- nrf5sdkforthreadv41/examples/zigbee/experimental/cli/cli_agent_router/pca10056/blank/ses/zigbee_cli_agent_router_pca10056.emProject を、SEGGER Embedded Studioで開く。
- UARTのピン番号が変更になっているので、再度ビルドしてMS88SF2に書き込む。
- シリアルコンソールで > が表示されており、エンターキーでCLIが動くことを確認する。
TRÅDFRIを制御する
今のところ下記の手順で制御できるようになりました。手間がかかるので、もっと簡単なやり方はあるのかもしれません。
- Nordicのドキュメント内、Using CLI to control lighting devicesに従って、match_descまでコマンドを入力する。
- match_desc実行中に、TRÅDFRIの電球側を初期化する。
- タイミングが合うとsrc_addrが出力される。この値を使ってieee_addrのコマンドを実行する。
- 16桁の文字列を使ってドキュメント内の「Interacting with clusters」のコマンドを実行すると、それぞれ対応した動作をさせることができます。
おわりに
- 16桁のアドレスは固定っぽいのだけど、src_addrの4桁は登録のたびに異なっている。理由・意味はまだわかっていません。
- 最初からいきなり16桁のアドレスを呼び出しても動きません。src_addrのあたりはペアリングのような動作なのかもしれない。
- 1台登録したあとに追加しようともう1回match_descを実行しても、追加分が出てこなかった。何が問題なのかはわかっていません。電波が届かなかった等もあるかもしれないので、原因の切り分けは大変です。
- オン・オフは個別にアドレス指定することがわかったので、Homebridge等と組み合わせれば部屋ごと・用途ごとのような細かい制御ができると期待しています。
- micro:bit v2を使った場合、うまく動きませんでした。明確な原因を探ってはいませんが、32kHzが載ってないので内蔵クロックを使ったのが良くないのかなと思っています。