1. はじめに
Google の OpenThread(OT)は、Thread のオープンソース実装です。Google は、オープン スレッドをリリースして、Google Nest 製品で使用されるネットワーキング テクノロジーをデベロッパーがより広く利用できるようにし、スマートホームの建物や商業ビル向けの製品開発を加速させました。狭いプラットフォーム抽象化レイヤと小さなメモリ フットプリントを備えた OpenThread は、ポータビリティに優れています。システム オン チップ(SoC)とネットワーク コプロセッサ(NCP)の両方の設計に対応しています。
Thread 仕様は、家庭用および商業用建物のアプリケーション向けの、信頼性が高く、安全で、低電力のワイヤレス デバイス間通信プロトコルです。
Silicon Labs は OpenThread を拡張して Silicon Labs ハードウェアと連携できるようにしました。このソースコードは GitHub で入手可能です。Simplicity Studio 5(SSv5)と一緒にインストールされるソフトウェア開発キット(SDK)としても利用可能です。この SDK には、GitHub ソースコードの完全なテスト済みスナップショットが含まれています。GitHub バージョンよりも幅広い種類のハードウェアをサポートしており、GitHub では入手できないドキュメントやサンプル アプリケーションが含まれています。
このガイドでは、Silicon Labs OpenThread SDK と Simplicity Studio 5 を使用して OpenThread アプリケーションの開発を開始する方法について説明します。以下の画像は、ボード(BRD)と、Codelab で使用されている OT ボーダー ルーター(OTBR)および 2 つの Thread デバイスに設定されたハードウェアを示しています。
学習内容
- Silicon Labs Simplicity Studio IDE を使用して OpenThread プロジェクトを作成する方法。
- OpenThread CLI バイナリをビルドして Silicon Labs のラジオボードに書き込む方法。
- Docker を使用して Raspberry Pi 3B+ を OpenThread ボーダー ルーター(OTBR)として設定する方法。
- OTBR で Thread ネットワークを作成する方法。
- Thread ネットワークへのデバイスの帯域外でのコミッショニング。
- ping コマンドを使用してノード間の Thread 通信を検証する方法
2. 前提条件
ハードウェア:
- 3 個の EFR32MGxx 無線ボード - これらのデバイスは自由に組み合わせて使用できます。この Codelab では、RD4166A を RCP として使用し、2 つの BRD4168A をフルスレッド デバイスとして使用します。
- EFR32MG12(BRD4161A、BRD4166A、BRD4170A、BRD4304A)
- EFR32MG13(BRD4168A)
- EFR32MG21(BRD4180A、BRD4180B)
- BRD4001A: ラジオ ボードをホストする、ワイヤレス スターター メインボード(WSTK)。BRD4166A を除き、すべてのラジオボードにスターター メインボードが必要です。メインボードに接続または給電するためのミニ USB ケーブルまたは BRD4166A 用マイクロ USB ケーブル。
- Raspberry Pi 3B 以降(Raspbian Stretch Lite OS イメージまたは Raspbian Stretch with Desktop を含む)。イーサネット経由でインターネットに接続します。OT ボーダー ルーターとして構成します。
- 2 つ以上の USB ポートとインターネット接続を備えた、Windows、Linux、Mac のホストシステムハードウェアと OS の要件については、SSv5 をご覧ください。
- Raspberry Pi をインターネットに接続するためのイーサネット ケーブルが 1 本以上必要です。WSTK は IP 経由のデバッグとフラッシュもサポートしているため、必要に応じて、イーサネット スイッチを介して WSTK とホストシステムを接続するために追加のイーサネット ケーブルを使用できます。
ソフトウェア:
- Simplicity Studio v5 が、Windows、Linux、Mac のホスト システムにインストールされ、アップデートされる。
- GNU ARM ツールチェーン
- Gecko SDK Suite 3.2.0 以降と Silicon Labs OpenThread SDK。
3. ハードウェアのセットアップ
この Codelab は、
- 左に示すように、EFR32MG12 BRD4166A Thunderboard Sense 2。
- 右に示すように、2 つの EFR32MG13 BRD4168A。
- macOS Catalina 10.15.7 に Simplicity Studio v5 がインストールされている。
- Gecko SDK 3.2.0
- GNU ARM v7.2.1
次の画像に示すように、ワイヤレス スターター キットの各メインボードを USB でホスト コンピュータに接続します。これらの接続により、RCP とエンドデバイスのプログラミングとネットワーク分析が可能になります。まず、ホスト コンピュータを使用して BRD4166A を ot-rcp ファームウェアでプログラムし、最終的に Raspberry Pi に接続します。エンド デバイスは、一般的なイーサネット スイッチを介してホスト コンピュータに接続できます。スターター キットでは、IPv4 を使用したプログラミングとネットワーク分析もサポートされています。
4. ファームウェアの設定
ご利用を開始するには 2 つの方法があります。どちらの方法でも、この Codelab に必要なファームウェアを書き込むことができます。
- プロジェクト: (推奨)サンプル アプリケーションを作成、ビルド、フラッシュします。このオプションを使用すると、プロジェクト内のアプリケーションをカスタマイズできます。または
- デモ: (オプション)いずれかのサンプル アプリケーションのラジオボードに、ビルド済みのデモを直接フラッシュします。オプションの演習として、デモのファームウェアをセットアップしてみることをおすすめします。詳細については、この Codelab の最後にある「オプションのファームウェア設定 - デモ」セクションをご覧ください。
この Codelab では、プロジェクト ベース手法を使用します。
サンプルを使用してプロジェクトを作成する
2 つのプロジェクトを作成します。BRD4166A の ot-rcp
プロジェクトと 2 つの BRD4168A の ot-cli-ftd
プロジェクト。次の手順に沿って、ボードに適したサンプル アプリケーションを選択してください。
- Studio の [File] メニューを開き、[New] > [Silicon Labs Project Wizard] を選択します。ターゲット、SDK、ツールチェーンの選択ダイアログが開きます。OpenThread でサポートされるデフォルトの Simplicity IDE / GNU ツールチェーンを変更しないでください。[次へ] をクリックします。
- ターゲット ボード: 選択したラジオボード(BRD4168A)とメインボード(BRD4001A)を表示します
- ターゲット デバイス: このフィールドは、オンボードのマイクロコントローラ チップ(MCU)を示します。BRD4168A は EFR32MG13 MCU を搭載しています。
- SDK: ここで、作業している OT の SDK バージョンを選択できます。スイート情報には、SDK タグと OpenThread の Silicon Labs ビルドが含まれます(例:
Platform 4.0.1.0
、OpenThread 2.0.1.0 (GitHub-55af6ce2c)
)。 - IDE/ ツールチェーン: OT プロジェクトのコンパイルに使用されるツールチェーン。GNU ARM を使用しています。
- [Example Project Selection] ダイアログが開きます。サンプル プロジェクトのリストが表示されます。具体的な例を検索するには、[Thread] テクノロジー タイプとキーワード フィルタを使用します。Gecko SDK Suite のバージョン番号をメモしておきます。Raspberry Pi をボーダー ルーターとして設定する場合は、このバージョンタグが必要です。[ot-cli-ftd] を選択し、[次へ] をクリックします。
- [Project Configuration] ダイアログが開きます。ここでは、プロジェクトの名前を変更したり、デフォルトのプロジェクト ファイルの場所を変更したり、プロジェクト ファイルにリンクするか、コピーするかを指定したりできます。リンクされたプロジェクト ファイルは SDK を参照し、SDK に加えた変更は今後のプロジェクトで使用されます。プロジェクト ソースをコピーすると、SDK ファイルはそのまま残して、プロジェクトのローカルコピーを編集できるようになります。デフォルトは [SDK をリンクしてプロジェクト ソースをコピー] が推奨されています。[終了] をクリックします。
- Simplicity IDE Perspective が開き、Project Configrrator で [概要] タブが開きます。
プロジェクトは、[ソフトウェア コンポーネント] タブで、コンポーネントのインストールとアンインストールを行い、インストール済みのコンポーネントを設定して設定します。インストールされているコンポーネントがチェックされます。[Installed Components] をクリックすると、サンプル アプリケーションによってインストールされたコンポーネントがフィルタされて表示されます。加えた変更は自動保存され、プロジェクト ファイルは自動生成されます。IDE の簡易表示の右下に進行状況が表示されます。
このデモでは、サンプル アプリケーションのデフォルト設定を使用します。上記の手順を繰り返して、別のボード用に ot-rcp
プロジェクトを作成します。
プロジェクトをビルドしてフラッシュする
ot-rcp
プロジェクトと ot-cli-ftd
プロジェクトの両方をビルドしてフラッシュします。
- プロジェクトを設定したら、上部のツールバーにあるビルド コントロール(ハンマーアイコン)をクリックします。または、プロジェクトを右クリックして [プロジェクトをビルド] をクリックします。
- 進捗状況はコンソールに表示され、右下に進行状況バーが表示されます。プロジェクトに関連するエラーや警告も、この出力ウィンドウに表示されます。
- バイナリ イメージは、プロジェクトが正常にビルドされた後に生成されます。バイナリ イメージをフラッシュするには、Project Explorer ビューを使用します。コンパイラ サブディレクトリで .bin、.hex、.s37 のいずれかのファイルを探します。ファイルを右クリックし、[デバイスにフラッシュ] を選択します。複数のデバイスが接続されている場合は、プログラミングするデバイスを選択して、[OK] をクリックします。ファイル パスが入力された状態で Flash Programmer が開きます。[プログラム] をクリックします。
5. ファームウェア設定の概要
この時点で、無線ボード上の適切なファームウェアを作成、コンパイル、フラッシュしました。ot-rcp
を BRD4166A にフラッシュしたら、ホストシステムから切断し、このボードを Raspberry Pi に接続します。
このセクションを完了すると、Thread ネットワーク ハードウェアのセットアップは次のようになります。
6. ot-cli-ftd デバイス用のシリアル コンソールの設定
コンソール インターフェースを起動するには、シンプル IDE の観点から、[Devices View / Debug Adapters] ウィンドウで J-Link デバイスを右クリックします。[Launch Console] を選択します。Console でプロンプトを表示するには、[シリアル 1] タブを選択し、Enter キーを押します。FTD ノードの状態を確認します。
ot-rcp
用のコンソールはまだありません。次のステップでは、Raspberry Pi を OT ボーダー ルーターとして構成し、ot-rcp
のコンソールを設定します。
7. Raspberry Pi をボーダー ルーターとして設定する
Silicon Labs は、会社の Docker コンテナを OTBR でデプロイすることを推奨しています。OTBR をコンテナ内で実行すると、デプロイが容易なアーティファクトの作成、開発のプロトタイピングとテストの高速化が可能になります。
Silicon Labs の OTBR イメージは siliconlabsinc DockerHub でホストされ、タグが付けられます。各タグは GSDK バージョンに対応しています。
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Docker コンテナは、特定のリリースの Simplicity Studio 5 を使用してビルドされた RCP とともに使用する必要があります。コンテナタグのバージョンと、テストする GSDK のバージョンを一致させてください。たとえば、[Example Project Selection] ウィンドウで ot-rcp
を選択したときに GDSK バージョンが Gecko SDK Suite v4.0.1 (140)
だった場合は、siliconlabsinc/openthread-border-router:gsdk-4.0.1
イメージを使用します。
Raspberry Pi の設定
- SD カードで、Raspbian Stretch Lite OS イメージまたは Raspbian Stretch with Desktop をフラッシュします。
- Raspberry Pi に SSH で接続することも、Raspbian Desktop を直接使用することもできます。ターミナルを開きます。
- Docker をインストールする前に、必ずローカル リポジトリとパッケージ マネージャーを更新してください(apt-get update と apt-get upgrade を使用している場合)。
Docker イメージをインストールする
- RPi で次のコマンドを使用して、Docker をインストールします。
curl -sSL https://get.docker.com | sh
- 完了したら、各コマンドの前に sudo を必須としないように Docker ユーザー設定を変更できます。再起動が必要です。
sudo usermod -aG docker $USER
- 次のコマンドを実行して、コンテナをインストールします。RCP で一度に実行できるボーダー ルーター コンテナは 1 つだけです。また、Simplicity Studio GSDK のバージョンが正しい Docker イメージと一致していることを確認してください。例:
gsdk-4.0.1
docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Docker を構成して実行する
- 起動時に OTBR を接続するために OTBR に使用する TTY ポートを設定する必要があります。RCP デバイスの TTY ポートを探します。最も簡単な方法は、RCP が接続されたら
/tty/dev
... エントリを探すことです。通常は/dev/ttyUSB0
または/dev/ttyACM0
を指定します。 - 次のコマンドを使用して Docker のインストールを実行します。Docker イメージの名前を、一致する GSDK バージョンに置き換えてください。例:
gsdk-4.0.1
docker run -d --name "otbr" \ --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \ -p 8080:80 --dns=127.0.0.1 -it \ --volume /dev/ttyACM0:/dev/ttyACM0 \ --privileged siliconlabsinc/openthread-border-router:gsdk-4.0.1 \ --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \ --backbone-interface eth0
-d
を使用すると、コンテナが分離モードで実行されます。docker logs
コマンドを使用すると、コンテナの実行ログをいつでも確認できます。--name
は、Docker コンテナが適切に閉じられる(または削除される)まで固定されます。- ポート 8080 は、ボーダー ルーター管理ウェブページをホストするウェブサーバーのポートを示します。
?uart-baudrate=460800
は、長い IPv6 パケットを使用する DTLS などのコストの高いオペレーションで、UART 経由での断片化 / 再構成の問題を回避するために無線 URL オプションに必要です。
RCP ノードを操作する
Docker の実行後、このコマンドを使用して、インタラクティブ シェル経由で RCP ノードと通信できます。RCP ノードの状態を確認します。
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
実行中のコンテナ ID のリストを取得できます。
$ docker ps -aq
OTBR Docker コンテナを実行しているウィンドウでボーダー ルーターのログ出力を確認するか、次のようにコンテナログを確認します。
$ docker logs [container-id] -f
必要に応じて、Docker コンテナが正しく読み込まれる場合は、イメージを停止、削除、または強制終了できます。
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
省略可: シェルを終了するには、CNTL+C キーを押します。
この時点では 3 つのコンソールが必要です。
- Full Thread デバイスとして設定された Simplicity Studio の 2 つの
ot-cli-ftd
コンソール。 - OT ボーダー ルーターとしてセットアップされた Raspberry Pi 上にある
ot-ctl
インタラクティブ シェル 1 つ。
これで、Thread ネットワークを形成する準備が整いました。
8. Thread ネットワークの作成
RCP を設定する
ネットワークを作成するには、まず OTBR の ot-ctl
シェルを使用します。これは RCP ノードとの通信に使用されます。次のコマンドを以下の順序で入力します。
索引 | コマンド | コマンドの説明 | 想定されるレスポンス | ||
1 |
| 新しいネットワーク構成を作成します。 | 完了 | ||
2 |
| 新しいデータセットをアクティブな運用データセットに commit する。 | 完了 | ||
3 |
| Thread インターフェースを有効にする。 | 完了 | ||
4 |
| Thread プロトコル オペレーションを有効にしてアタッチします。 | 完了 | ||
スレッド インターフェースが起動するまで 10 秒ほど待ちます。 | |||||
5 |
| デバイスの状態を確認します。リーダーである必要があります。 | リーダー | ||
6 |
| ネットワーク構成を表示します。 |
|
ot-cli-ftd
のチャンネル番号とネットワーク キーを使用して、2 つの FTD をこのスレッド ネットワークに接続します。
FTD を設定して Thread ネットワークに追加する(帯域外メソッド)
帯域外メソッドを使用すると、すべてのセキュリティ情報を把握して手動でノードを追加できます。シンプル コンソールでは、以下のコマンドを使用して、両方の FTD をネットワークに追加します。
索引 | コマンド | コマンドの説明 | 想定されるレスポンス | ||
1 |
| OTBR で使用するチャンネルを設定します。 | 完了 | ||
2 |
| デバイスが Thread ネットワークに接続するには、ネットワーク キーのみが必要です。 | 完了 | ||
3 |
| 新しいデータセットをアクティブな運用データセットに commit する。 | 完了 | ||
4 |
| Thread インターフェースを有効にする。 | 完了 | ||
5 |
| Thread プロトコル オペレーションを有効にしてアタッチします。 | 完了 | ||
デバイスが参加して設定が完了するまで 20 秒ほど待ちます。 | |||||
6 |
| ネットワーク構成を表示します。 | 子 |
Thread デバイス間の通信
ping
コマンドを使用して、デバイスが相互に通信できるかどうかを確認します。ping コマンドを使用するには、デバイスの IPv6 アドレスが必要です。これらは ipaddr
コマンドを使用して取得できます。
> ipaddr fd5c:c6b:3a17:40b9:0:ff:fe00:fc00 # Leader Anycast Locator (ALOC) fd5c:c6b:3a17:40b9:0:ff:fe00:1800 # Routing Locator (RLOC) fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03 # Mesh-Local EID (ML-EID) fe80:0:0:0:c449:ca4a:101f:5d16 # Link-Local Address (LLA)
両方の FTD から、OTBR の RLOC アドレスを使用して OTBR に ping します。
> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800 Done > > 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms
レスポンスは、受信したペイロードと通信が成功したことを示します。このプロセスを OTBR から FTD に繰り返します。
9. 完了
これで、Thread ネットワークが作成されました。
学習内容:
- Silicon Labs Simplicity Studio IDE を使用して OpenThread プロジェクトを作成する方法。
- OpenThread CLI バイナリをビルドして Silicon Labs のラジオボードに書き込む方法。
- Docker を使用して Raspberry Pi 3B+ を OpenThread ボーダー ルーター(OTBR)として設定する方法。
- OTBR で Thread ネットワークを作成する方法。
- Thread ネットワークへのデバイスの帯域外でのコミッショニング。
- ping コマンドを使用してノード間の Thread 通信を検証する方法
関連情報
openthread.io と GitHub で、次のようなさまざまな OpenThread リソースをご確認ください。
- サポートされているプラットフォーム - OpenThread をサポートしているすべてのプラットフォームを確認できます。
- OpenThread のビルド - OpenThread のビルドと構成の詳細
- Thread Primer - この Codelab で取り上げられているすべての Thread コンセプトをカバーします
- Silicon Labs OpenThread Training - OpenThread の紹介、ルーターやボーダー ルーターのコミッショニング、OpenThread ネットワークの作成に関する実践的な演習。
- QSG170: Silicon Labs OpenThread クイック スタートガイド - Silicon Labs Thread 開発のスタートガイドを詳しく説明しています。
- AN1256: Using the Silicon Labs RCP with the OpenThread Border Router - Raspberry Pi ボーダー ルーター ホストのビルドとインストールの手順
10. オプションのファームウェアの設定 - デモ
デモは、互換性のあるデバイスにすぐにダウンロードできるビルド済みファームウェア イメージです。Simplicity Studio で該当するデモを利用できるかどうかを確認するには、[Debug Adapters] ビューに移動し、該当する部分をクリックして [Launcher Perspective] の [Example プロジェクトとデモ] タブに移動すると簡単です。[サンプル プロジェクト] フィルタを無効にし、[テクノロジーの種類] で [Thread] ラジオボタンをオンにします。
OpenThread SDK とともに提供されるプリコンパイルされたデモ アプリケーション イメージは、以下のボードと互換性があります。
- BRD4161A
- BRD4166A
- BRD4168a
- BRD4180A
- BRD4304A
このリストは、さらなる SDK リリースを含む今後の SDK リリースで更新される可能性があります。サポートされている部分の完全なリストについては、「Documentation」の Silicon Labs OpenThread SDK リリースノートをご覧ください。
各ボードで次のデモを行います。フラッシュするには、左側の [Debug Adapters] でボードを選択し、対応するサンプル アプリケーションの [RUN] をクリックします。ポップアップ ウィンドウに点滅の進行状況が表示されます。
- BRD4166A: ot-rcp - このデバイスは OT ボーダー ルーターの無線コプロセッサとして機能します。このデバイスを使用して Thread ネットワークを作成し、Thread ネットワーク上の他の 2 つのデバイスをオンボーディングします。ボーダー ルーターであるデバイスは、Thread ネットワーク内のデバイスがインターネット経由で通信するためのゲートウェイとしても機能します。
- 2 つの BRD4168A: ot-cli-ftd - この 2 つのデバイスは Full Thread デバイスとして機能します。これらは OTBR によって作成された Thread ネットワークに参加します。