Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Simplicity Studio v5 を使用して、Silicon Labs EFR32 ボードと OpenThread によるスレッド ネットワークを構築する

1. はじめに

26b7f4f6b3ea0700.png

Google の OpenThread(OT)は、Thread のオープンソース実装です。Google は、Google Nest 製品で使用されているネットワーキング テクノロジーをデベロッパーがさらに幅広く利用できるようにするために、Google が OpenThread をリリースしました。これは、コネクテッド ホームおよび商用ビル向けの製品開発を加速するためです。プラットフォームの抽象化レイヤが狭く、メモリ フットプリントが小さいため、OpenThread は移植性が高くなっています。システム オン チップ(SoC)とネットワーク コプロセッサ(NCP)の両方に対応しています。

スレッド仕様は、IPv6 ベースの信頼性が高く、安全で省電力のワイヤレス デバイス間通信プロトコルを定義し、住宅用および商用の建物アプリケーション向けです。

Silicon Labs は、Silicon Labs ハードウェアと連携するように OpenThread を拡張しました。このソースコードは GitHub で入手可能で、Simplicity Studio 5(SSv5)でインストールされたソフトウェア開発キット(SDK)としても利用できます。SDK には、GitHub ソースコードの完全なテスト済みスナップショットが含まれています。GitHub 版より幅広いハードウェアをサポートしており、GitHub で利用できないドキュメントやサンプル アプリケーションが含まれています。

このガイドでは、Silicon Labs OpenThread SDK と Simplicity Studio 5 を使って OpenThread アプリケーションを開発する方法を説明します。下の画像は、OT Border Router(OTBR)と、Codelab で使用される 2 つの Thread デバイスを備えたボード(BRD)とハードウェアを示しています。

EFR32MG ハードウェアのセットアップ

学習内容

  • Silicon Labs の Simplicity Studio IDE を使用して OpenThread プロジェクトを作成する方法。
  • OpenThread CLI バイナリをビルドして、Silicon Labs の無線ボードにフラッシュする方法。
  • Docker を使用して OpenThread ボーダー ルーター(OTBR)として Raspberry Pi 3B 以降をセットアップする方法。
  • OTBR にスレッド ネットワークを作成する方法。
  • Thread ネットワーク上での帯域外コミッショニング
  • ping コマンドを使用してノード間のスレッド通信を確認する方法。

2. 前提条件

ハードウェア:

  1. 3 EFR32MGxx 無線ボード - これらのデバイスの任意の組み合わせを使用できます。この Codelab では、RCP として BRD4166A を使用し、フルスレッド デバイスとして 2 つの BRD4168A を使用します。
    • EFR32MG12(BRD4161A、BRD4166A、BRD4170A、BRD4304A)
    • EFR32MG13(BRD4168A
    • EFR32MG21(BRD4180A、BRD4180B
    新しく始める場合は、上記のボードを備えた EFR32 スレッド スターター キットを 1 台入手できます。
  2. BRD4001A: 無線ボードをホストするワイヤレス スターター メインボード(WSTK)。BRD4166A を除くすべてのラジオボードには、それぞれスターター メインボードが必要です。メインボードの接続用のミニ USB ケーブルや、BRD4166A 用のマイクロ USB ケーブル。

WSTK AEM

  1. Raspbian Stretch Lite OS イメージを含む Raspberry Pi 3B 以降、またはイーサネット経由でインターネットに接続している Raspbian Stretch with Desktop。これは、OT 境界ルーターとして構成されています。
  2. 少なくとも 2 つの USB ポートとインターネット接続を備えた Windows、Linux、Mac ホストシステム。SSv5 でハードウェアと OS の要件を確認してください。
  3. Raspberry Pi をインターネットに接続するためのイーサネット ケーブル 1 本以上 WSTK はデバッグや IP 経由のフラッシュもサポートしているため、必要に応じて追加のイーサネット ケーブルを使用してイーサネット スイッチ経由でホスト システムに WSTK を接続することもできます。

ソフトウェア:

  • Simplicity Studio v5 が Windows/Linux/Mac Host システムにインストールされ、以下のコマンドで更新されています
    • GNU ARM ツールチェーン
    • Gecko SDK Suite 3.2.0 以降と Silicon Labs OpenThread SDK。

3. ハードウェアのセットアップ

この Codelab は、以下を使用して作成されました。

  1. EFR32MG12 BRD4166A Thunderboard Sense 2(左図)。
  2. 右に示す 2 つの EFR32MG13 BRD4168A
  3. macOS Catalina 10.15.7 に Simplicity Studio v5 をインストールし、
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

下記の図のように、ワイヤレス スターター キットのメインボードを USB でホスト コンピュータに接続します。これらの接続により、RCP とエンドデバイスのプログラミングとネットワーク分析が可能になります。まず、ホスト コンピュータを使用して ot-rcp ファームウェアで BRD4166A をプログラムし、最終的に Raspberry Pi に接続します。必要に応じて、共通のイーサネット スイッチを介してホストデバイスをコンピュータに接続できます。スターター キットは、IPv4 を介したプログラミングとネットワーク分析にも対応しています。

接続数

4.ファームウェアのセットアップ

始める方法には、次の 2 つがあります。どちらのオプションでも、この Codelab に必要なファームウェアをフラッシュできます。

  1. プロジェクト: (推奨)サンプル アプリケーションを作成、ビルド、フラッシュする。このオプションでは、プロジェクト内のアプリケーションをカスタマイズできます。
  2. デモ: (省略可)サンプル アプリケーションについて、ビルド済みのデモを無線ボードに直接フラッシュします。オプションのファームウェアとして設定されたデモ用ファームウェアをお試しいただくことをおすすめします。詳しくは、この Codelab の最後にある「任意のファームウェアの設定 - デモ」をご覧ください。

この Codelab では、プロジェクト ベースの方法を使用します。

例を使用してプロジェクトを作成する

プロジェクトを 2 つ作成します。2 つの BRD4166A の ot-rcp プロジェクトと 2 つの BRD4168A の ot-cli-ftd プロジェクト。以下の手順に沿って、ボードに適したサンプル アプリケーションを選択してください。

  1. Studio の [File] メニューを開き、[New] > [Silicon Labs Project Wizard] を選択します。[ターゲット、SDK、ツールチェーンの選択] ダイアログが開きます。OpenThread でサポートされているデフォルトの Simplicity IDE / GNU ツールチェーンを変更しないでください。[次へ] をクリックします
    • ターゲット ボード: 選択したラジオボード(BRD4168A)とメインボード(BRD4001A)が表示されます。
    • Target Device: このフィールドには、搭載されているマイクロコントローラ チップ(MCU)が表示されます。BRD4168A には EFR32MG13 MCU が搭載されています。
    • SDK: 作業する OT の SDK バージョンを選択できます。スイート情報には、SDK タグと、OpenThread の Silicon Labs ビルド(Platform 4.0.1.0OpenThread 2.0.1.0 (GitHub-55af6ce2c) など)が含まれます。
    • IDE/ ツールチェーン: OT プロジェクトのコンパイルに使用するツールチェーン。GNU ARM を使用しています。

新しいプロジェクト ウィザード

  1. [Example Project Selection] ダイアログが開きます。Example プロジェクトのリストが表示されます。[Thread] テクノロジー タイプとキーワード フィルタを使用して、特定の例を検索します。Gecko SDK Suite のバージョン番号をメモしておきます。Raspberry Pi をボーダー ルーターとして設定する場合は、このバージョンタグが必要です。[ot-cli-ftd] を選択し、[次へ] をクリックします。

新しいプロジェクト ウィザードのステップ 2

  1. [プロジェクトの設定] ダイアログが開きます。ここでプロジェクトの名前を変更したり、デフォルトのプロジェクト ファイルの場所を変更したり、プロジェクト ファイルをリンクするか、コピーするかを決定できます。リンクされたプロジェクト ファイルは SDK を指し、変更を加えた場合は SDK で行われ、今後のプロジェクトで使用されます。プロジェクトのソースをコピーすると、SDK ファイルはそのままにして、プロジェクトのローカルコピーを編集できます。デフォルトは [Link sdk and Copy project sources] です。[完了] をクリックします。

新しいプロジェクト ウィザード ステップ 3

  1. シンプルな IDE パースペクティブが開き、[Project Configurator] の [概要] タブが表示されます。

プロジェクトの概要

このプロジェクトは [Software Components] タブから設定します。コンポーネントのインストールとアンインストールを行い、インストール済みのコンポーネントを設定します。インストール済みのコンポーネントがチェックされている。[インストール済みのコンポーネント] をクリックすると、サンプル アプリケーションによってインストールされたフィルタ済みコンポーネントのリストが表示されます。変更内容はすべて自動的に保存され、プロジェクト ファイルが自動生成されます。進行状況は、Simplicity IDE パースペクティブの右下に表示されます。

ソフトウェア コンポーネント

このデモでは、サンプル アプリケーションのデフォルトの構成を使います。上記の手順を繰り返して、他のボードの ot-rcp プロジェクトを作成します。

プロジェクトをビルドしてフラッシュする

ot-rcp プロジェクトと ot-cli-ftd プロジェクトの両方をビルドしてフラッシュします。

  1. プロジェクトを設定したら、上部のツールバーにあるビルド コントロール(ハンマー アイコン)をクリックします。または、プロジェクトを右クリックして [Build Project] をクリックします。

[Build project] ボタン

  1. 進捗状況は Console に表示され、進行状況バーは右下に表示されます。プロジェクトに関連するエラーや警告も、この出力ウィンドウに表示されます。

プロジェクトのビルド出力ウィンドウ

  1. バイナリ イメージは、プロジェクトのビルドが成功すると生成されます。プロジェクト エクスプローラ ビューからバイナリ イメージをフラッシュできます。コンパイラのサブディレクトリで .bin、.hex、.s37 ファイルを見つけます。ファイルを右クリックし、[Flash からデバイス] を選択します。複数のデバイスが接続されている場合、プログラミングするデバイスを選択して、[OK] をクリックします。Flash Programmer が開き、設定されたファイルパスが表示されます。[プログラム] をクリックします。

フラッシュ

5. ファームウェア設定の概要

この時点で、無線基板上で適切なファームウェアを作成、コンパイル、フラッシュしたはずです。ot-rcp が BRD4166A にフラッシュされたら、ホストシステムから取り外し、このボードを Raspberry Pi に接続します。

このセクションを完了すると、Thread ネットワークのハードウェア設定は次のようになります。

EFR32MG の設定

6. ot-cli-ftd デバイス用のシリアル コンソールの設定

コンソール インターフェースを起動するには、[SVIEWYY IDE] ビューで、[Devices] / [Debug Adapters] ウィンドウの J-Link デバイスを右クリックします。[コンソールを起動] を選択します。Console でプロンプトを表示するには、[シリアル 1] タブを選択して、Enter キーを押します。FTD ノードの状態を確認します。

FTD Studio コンソールビュー

ot-rcp のコンソールがまだありません。次のステップでは、Raspberry Pi を OT 境界ルーターとして構成し、ot-rcp のコンソールを設定します。

7. Raspberry Pi を境界ルーターとして設定する

SBR では、OTBR を使用して同社の Docker コンテナをデプロイすることを推奨しています。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 画像を使用します。

GSDK バージョン

Raspberry Pi 設定

  1. SD カードで、Raspbian Stretch Lite OS イメージまたは Raspbian Stretch with Desktop をフラッシュします。
  2. SSH で Raspberry Pi に接続するか、Raspbian Desktop を直接操作することができます。ターミナルを開きます。
  3. ローカル リポジトリとパッケージ マネージャーを必ず更新してください(Docker をインストールする前に、apt-get updateapt-get upgrade)。

Docker イメージをインストールする

  1. 次のコマンドを使用して、RPi に Docker をインストールします。
    curl -sSL https://get.docker.com | sh
    
  2. 完了したら、各コマンドの前に sudo を要求しないように Docker ユーザー設定を変更できます。再起動が必要です。
    sudo usermod -aG docker $USER
    
  3. 次のコマンドを実行して、コンテナをインストールします。RCP で一度に実行できる Border Router コンテナは 1 つだけです。また、Simplicity Studio GSDK のバージョンと正しい Docker イメージを一致させてください。例: gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Docker を構成して実行する

  1. 起動時に RCP を接続するため、OTBR に使用する TTY ポートを構成する必要があります。RCP デバイスの TTY ポートを探します。これを行う最も簡単な方法は、RCP が接続された後に /tty/dev... エントリを見つけることです。通常は、/dev/ttyUSB0 または /dev/ttyACM0 になります。
  2. 次のコマンドを使用して 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 は、Border Router の管理ウェブページをホストするウェブサーバーのポートを示します。
    • 無線 URL のオプションに ?uart-baudrate=460800 が必要です。UART を介した断片化や再構成の問題を回避し、IPv6 パケットに長い DTLS などの負荷の高いオペレーションが必要になります。

RCP ノードとのやり取り

Docker の実行が開始されたら、次のコマンドでインタラクティブ シェルを介して RCP ノードと通信できます。RCP ノードの状態を確認します。

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

実行中のコンテナ ID のリストを取得できます

$ docker ps -aq

Border Router のログ出力を実行している OTBR Docker コンテナを実行しているウィンドウを確認するか、コンテナログを次のように追跡します。

$ docker logs [container-id] -f

オプションで、Docker コンテナが適切に読み込まれている場合は、イメージを停止、削除、強制終了できます。

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

(省略可)シェルを終了するには、CNT+C を使用します。

この時点で、3 つのコンソールが作成されています。

  1. Simplicity Studio で、フルスレッド デバイスとして設定されている 2 つの ot-cli-ftd コンソール。
  2. OT 境界ルーターとしてセットアップされている Raspberry Pi 上の ot-ctl インタラクティブ シェル 1 つ。

これで、Thread ネットワークから形成できるようになりました。

8. スレッド ネットワークを作成する

RCP の設定

ネットワークを作成するには、RBR ノードとの通信に使用する OTBR の ot-ctl シェルを使用します。次のコマンドをこの順序で入力します。

Index

コマンド

コマンドの説明

予想される回答

1

dataset init new

新しいネットワーク設定を作成する。

完了

2

dataset commit active

新しいデータセットをアクティブな運用データセットに commit します。

完了

3

ifconfig up

スレッド インターフェースを有効にします。

完了

4

thread start

スレッド プロトコル オペレーションを有効にしてアタッチする。

完了

スレッド インターフェースが起動するまで 10 秒ほど待ちます。

5

state

デバイスの状態を確認します。リーダーである必要があります。
その他の考えられる状態: オフライン、無効、切断、
子、ルーター、リーダー。

リーダー
完了

6

dataset

ネットワーク構成を表示します。
この値はこの Codelab とは異なります。
チャネル、ネットワーク キー、
ネットワーク名、PAN ID をメモします。

アクティブなタイムスタンプ: 1
チャンネル: 20
チャンネルマスク: 0x07fff800
外部 PAN ID: 39ba71f7fc367160
メッシュ ローカル プレフィックス: fd5c:c6b:3a17:40b9::/64
ネットワーク キー: 81ae2c2c17368d585dee71eaa8cf1e90
ネットワーク名: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
セキュリティ ポリシー: 0、onrcb
完了

ot-cli-ftd のチャンネル番号とネットワーク キーを使用して、2 つの FTD をこのスレッド ネットワークに結合します。

スレッド ネットワークに FTD を設定して追加する(帯域外メソッド)

帯域外方式では、すべてのセキュリティ情報がわかっているため、ノードを手動で追加します。シンプル コンソールでは、以下のコマンドを以下の順序で使用して、両方の FTD をネットワークに追加します。

Index

コマンド

コマンドの説明

予想される回答

1

dataset channel 20

OTBR が使用するチャンネルを設定します。

完了

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

デバイスが Thread ネットワークに接続するには、ネットワーク キーのみが必要です。

完了

3

dataset commit active

新しいデータセットをアクティブな運用データセットに commit します。

完了

4

ifconfig up

スレッド インターフェースを有効にします。

完了

5

thread start

スレッド プロトコル オペレーションを有効にしてアタッチする。

完了

デバイスが参加して構成されるまで、20 秒ほど待ちます。

6

state

ネットワーク構成を表示します。

child
完了

スレッド デバイス間の通信

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 に ping するプロセスを繰り返します。

9. 完了

Thread ネットワークが作成されました。

ここまでで、

  • Silicon Labs の Simplicity Studio IDE を使用して OpenThread プロジェクトを作成する方法。
  • OpenThread CLI バイナリをビルドして、Silicon Labs の無線ボードにフラッシュする方法。
  • Docker を使用して OpenThread ボーダー ルーター(OTBR)として Raspberry Pi 3B 以降をセットアップする方法。
  • OTBR にスレッド ネットワークを作成する方法。
  • Thread ネットワーク上での帯域外コミッショニング
  • ping コマンドを使用してノード間のスレッド通信を確認する方法。

関連情報

openthread.ioGitHub で、次のようなさまざまな OpenThread リソースをご確認ください。

10. オプションのファームウェア設定 - デモ

デモは、互換性のあるデバイスにダウンロードできるビルド済みファームウェア イメージです。Simplicity Studio で自分の役割のデモが利用可能かどうかを確認するには、Debug Adapter ビューで自分のパーツをクリックし、ランチャーの [EXAMPLE PROJECTS & DEMOS] タブに移動すると簡単です。[Example Projects] フィルタを無効にし、[テクノロジーの種類] の下にある [Thread] チェックボックスにチェックを入れます。

スタジオのデモ

OpenThread SDK に付属するプリコンパイル済みデモ アプリケーションのイメージは、以下のボードと互換性があります。

  1. BRD4161A
  2. BRD4166A
  3. BRD4168A
  4. BRD4180A
  5. BRD4304A

このリストは、今後の SDK リリースで更新され、ラジオボードが追加される可能性があります。サポート対象の部品の全一覧については、ドキュメントの「Silicon Labs OpenThread SDK リリースノート」をご覧ください。

それぞれのボードで、次のデモをフラッシュします。フラッシュするには、左側の [Debug Adapters] でボードを選択し、対応するサンプル アプリケーションの [RUN] をクリックします。ポップアップ ウィンドウにフラッシュの進行状況が表示されます。

  1. BRD4166A: ot-rcp - このデバイスは、OT 境界ルーターへの無線 Co プロセッサとして機能します。このデバイスを使用して Thread ネットワークを作成し、他の 2 台のデバイスを Thread ネットワークにオンボーディングします。このデバイスは Border Router として、Thread ネットワーク内のデバイスがインターネット経由で通信するためのゲートウェイとしても機能します。
  2. 2 つの BRD4168A: ot-cli-ftd - これら 2 つのデバイスはフルスレッド デバイスとして機能します。OTBR によって作成された Thread ネットワークに加わります。