Simply Studio v5 を使用して Silicon Labs EFR32 ボードと OpenThread で Thread ネットワークを構築する

1. はじめに

26b7f4f6b3ea0700.png

Google の OpenThread(OT)は、Thread のオープンソース実装です。Google は、Google Nest 製品で使用されているネットワーキング テクノロジーをデベロッパーがより広く利用できるようにし、スマートホームや商用ビル向けの製品開発を加速させるため、OpenThread をリリースしました。狭いプラットフォーム抽象化レイヤと小さなメモリ使用量の OpenThread は、優れたポータビリティを備えています。システム オン チップ(SoC)とネットワーク コプロセッサ(NCP)の両方の設計をサポートしています。

Thread Specification は、家庭用および商業用ビルの用途向けに、IPv6 ベースの信頼性、安全性、省電力のワイヤレス デバイス間通信プロトコルを定義しています。

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

このガイドでは、Silicon Labs OpenThread SDK と Simply Studio 5 を使用して OpenThread アプリケーションの開発を開始する方法について説明します。以下の画像は、この Codelab で使用する OT ボーダー ルーター(OTBR)と 2 つの Thread デバイスがセットアップされたボード(BRD)とハードウェアを示しています。

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

学習内容

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

2. 前提条件

ハードウェア:

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

WSTK AEM

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

ソフトウェア:

  • Windows/Linux/Mac ホスト システムに Simply Studio v5 がインストールされ、更新されていること
    • GNU ARM ツールチェーン
    • Gecko SDK Suite 3.2.0 以降および Silicon Labs OpenThread SDK。

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

この Codelab は、

  1. EFR32MG12 BRD4166A Thunderboard Sense 2(左のようになります)。
  2. 右側に示すように 2 台の EFR32MG13 BRD4168A
    1. を含む macOS Catalina 10.15.7 にインストールされた Simply Studio v5
    2. Gecko SDK 3.2.0
    3. GNU ARM v7.2.1

BRD4168A

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

接続

4. ファームウェアの設定

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

  1. プロジェクト: (推奨)サンプル アプリケーションを作成、ビルド、フラッシュします。このオプションを使用すると、プロジェクト内のアプリケーションをカスタマイズできます。または、
  2. デモ: (省略可)任意のサンプル アプリケーション用に、事前に構築されたデモをラジオボードに直接書きます。オプションの演習として、デモのファームウェア セットアップを試すことをおすすめします。「オプションのファームウェア セットアップ - デモ」を参照してください。セクションをご覧ください。

この Codelab では、プロジェクト ベースのメソッドを使用します。

サンプルを使用してプロジェクトを作成する

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

  1. Studio の [ファイル] メニューを開き、[新規] >Silicon Labs プロジェクト ウィザード。[Target, SDK, and Toolchain Selection] ダイアログが開きます。OpenThread でサポートされているデフォルトの Simply IDE / GNU ツールチェーンは変更しないでください。[次へ] をクリックします
    • Target boards: 選択した無線ボード(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. [Project Configuration] ダイアログが開きます。ここで、プロジェクトの名前を変更したり、デフォルトのプロジェクト ファイルの場所を変更したり、プロジェクト ファイルにリンクするかコピーするかを決定できます。リンクされたプロジェクト ファイルは SDK を参照し、行った変更は SDK で行われ、今後のプロジェクトで使用されます。プロジェクトのソースをコピーすると、SDK ファイルはそのまま残るようにプロジェクトのローカルコピーを編集できます。‘SDK をリンクしてプロジェクト ソースをコピー’これがデフォルトの推奨設定です[完了] をクリックします。

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

  1. Simply IDE のパースペクティブが開き、プロジェクト コンフィギュレータの [概要] タブが表示されます。

プロジェクトの概要

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

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

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

プロジェクトのビルドとフラッシュ

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

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

[Build project] ボタン

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

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

  1. バイナリ イメージは、プロジェクトのビルドが成功した後に生成されます。[Project Explorer] ビューからバイナリ イメージを書き込むことができます。コンパイラ サブディレクトリで .bin、.hex、.s37 ファイルを見つけます。ファイルを右クリックし、[Flash to Device] を選択します。複数のデバイスが接続されている場合は、プログラムするデバイスを選択して [OK] をクリックします。ファイルパスが入力された状態で Flash Programmer が開きます。[プログラム] をクリックします。

Flash

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

この時点で、ラジオボード上の適切なファームウェアを作成、コンパイル、フラッシュしているはずです。ot-rcp が BRD4166A に書き込まれたら、ホストシステムから切断してこのボードを Raspberry Pi に接続します。

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

EFR32MG の設定

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

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

FTD Studio コンソール ビュー

ot-rcp のコンソールがまだないことがわかります。次のステップでは、Raspberry Pi を OT ボーダー ルーターとして構成し、ot-rcp のコンソールをセットアップします。

7. Raspberry Pi をボーダー ルーターとしてセットアップする

Silicon Labs は、OTBR を使用して会社の Docker コンテナをデプロイすることを推奨しています。OTBR をコンテナで実行すると、簡単にデプロイ可能なアーティファクトを作成し、開発用のプロトタイピングとテストを迅速に行うことができます。

Silicon Labs OTBR イメージは、siliconlabsinc DockerHub でホストされており、タグが付いています。各タグは、対応する GSDK のバージョンに対応しています。

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

Docker コンテナは、特定のリリース用に Simply 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. Raspberry Pi に SSH で接続することも、Raspbian Desktop を直接操作することもできます。ターミナルを開きます。
  3. ローカルのリポジトリとパッケージ管理システムを必ず更新してください(Docker をインストールする前に、apt-get updateapt-get upgrade を行ってください)。

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

  1. 次のコマンドを使用して Docker を RPi にインストールします。
    curl -sSL https://get.docker.com | sh
    
  2. 完了したら、各コマンドの前に sudo を必要としないように Docker ユーザーの設定を変更します。再起動が必要です。
    sudo usermod -aG docker $USER
    
  3. 次のコマンドを実行してコンテナをインストールします。なお、RCP では同時に実行できる Border Router コンテナは 1 つのみです。また、Simply 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 コマンドでいつでも確認できます。
    • Docker コンテナが適切に閉じる(または削除)されるまで、--name はスティッキーになります。
    • ポート 8080 は、Border Router の管理ウェブページをホストするウェブサーバーのポートを示します。
    • 長い IPv6 パケットを使用した DTLS などのコストのかかるオペレーションで、UART を介した断片化 / 再構成の問題を回避するには、Radio URL オプションに ?uart-baudrate=460800 が必要です。

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

省略可: シェルを終了するには、CNTL+C キーを押します。

この時点で、コンソールが 3 つあるはずです。

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

これで、Thread ネットワークを形成する準備が整いました。

8. Thread ネットワークを作成する

RCP を設定

ネットワークを作成するには、まず OTBR 上の ot-ctl シェルを使用します。このシェルは RCP ノードとの通信に使用されます。以下のコマンドを順番に入力します。

インデックス

コマンド

コマンドの説明

想定されるレスポンス

1

dataset init new

新しいネットワーク構成を作成します。

完了

2

dataset commit active

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

完了

3

ifconfig up

Thread インターフェースを有効化。

完了

4

thread start

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

完了

スレッド インターフェースが稼働するまで 10 秒待ちます。

5

state

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

Leader
Done

6

dataset

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

アクティブ タイムスタンプ: 1
チャネル: 2080 アクティブ タイムスタンプ: 1
チャネル: 208080 アクティブ タイムスタンプ: 1
0c08080808080808080808060806668666666661 アクティブ タイムスタンプ: 1
0c60 アクティブ タイムスタンプ: 1
チャネル: 200808080808080808080808080808080808080808080808668686868808080808081886188861818861818180




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

FTD をセットアップして Thread ネットワークに追加する(アウトオブバンド方式)

スパンタップ・モードでは、すべてのセキュリティ情報を把握したうえで、手動でノードを追加します。Simply コンソールで、次のコマンドを順に使用して両方の FTD をネットワークに追加します。

インデックス

コマンド

コマンドの説明

想定されるレスポンス

1

dataset channel 20

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

完了

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

完了

3

dataset commit active

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

完了

4

ifconfig up

Thread インターフェースを有効化。

完了

5

thread start

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

完了

デバイスが接続され、自動的に構成されるまで 20 秒ほど待ちます。

6

state

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

お子様
完了

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 を ping します。

9. 完了

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

学習しました。

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

関連情報

以下のような OpenThread リソースについては、openthread.ioGitHub をご覧ください。

10. オプションのファームウェアのセットアップ - デモ

デモは、互換性のあるデバイスにダウンロードできる事前ビルド済みのファームウェア イメージです。Simply Studio で自分のパートにデモが利用可能なかどうかを確認するには、[Debug Adapters] ビューで該当するパーツをクリックし、[サンプル プロジェクトとLauncher Perspective の [DEMOS] タブ[サンプル プロジェクト] フィルタを無効にし、[テクノロジーの種類] の下の [スレッド] ラジオボタンをオンにする。

スタジオデモ

OpenThread SDK で提供されるプリコンパイル済みのデモ アプリケーション イメージは、次のボードと互換性があります。

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

このリストは、今後の SDK リリースで更新され、より多くのラジオボードが追加される可能性があります。サポートされるパーツの完全なリストについては、ドキュメントから Silicon Labs OpenThread SDK のリリースノートを参照してください。

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

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