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

Simplicity Studio v5を使用して、Silicon LabsEFR32ボードとOpenThreadでスレッドネットワークを構築します

26b7f4f6b3ea0700.png

GoogleのOpenThread (OT)は、スレッドのオープンソース実装です。 GoogleはOpenThreadをリリースし、Google Nest製品で使用されているネットワーキングテクノロジーを開発者がより広く利用できるようにして、接続された家庭用および商業用の建物向けの製品の開発を加速しました。狭いプラットフォーム抽象化レイヤーと小さなメモリフットプリントを備えたOpenThreadは、移植性に優れています。システムオンチップ(SoC)とネットワークコプロセッサー(NCP)の両方の設計をサポートします。

スレッドの仕様は、家庭や商業ビルのアプリケーションのためのIPv6ベースの信頼性の高い、安全で、かつ低消費電力の無線デバイス間の通信プロトコルを定義します。

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

このガイドでは、Silicon Labs OpenThreadSDKとSimplicityStudio 5を使用してOpenThreadアプリケーションの開発を開始する方法について説明します。次の画像は、OT Border Router(OTBR)と2つのスレッドデバイスで使用されるボード(BRD)とハードウェアを示しています。 codelab。

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

あなたが学ぶこと

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

ハードウェア:

  1. 3EFR32MGxx無線ボード-これらのデバイスの任意の組み合わせを使用できます。このコードラボでは、RCPとしてBRD4166Aを使用し、フルスレッドデバイスとして2つのBRD4168Aを使用します。
    • EFR32MG12(BRD 4161A、BRD 4166A、BRD 4170A、BRD 4304 A)
    • EFR32MG13(BRD 4168A)
    • EFR32MG21(BRD 4180A、4180B BRD)
    あなたが新鮮を開始している場合は、のいずれかを取得することができますEFR32スレッドスターターキット上記のボードを持っています。
  2. BRD4001A:無線ボードをホストするワイヤレススターターメインボード(WSTK)。 BRD4166Aを除いて、すべての無線ボードにはそれぞれスターターメインボードが必要です。メインボードに接続して電力を供給するミニUSBケーブルまたはBRD4166AのマイクロUSBケーブル。

WSTK AEM

  1. Aラズベリーパイ3B +以上RaspbianストレッチLiteのOSイメージデスクトップとRaspbianストレッチイーサネット経由でインターネットに接続されています。これをOTボーダールーターとして構成します。
  2. 少なくとも2つのUSBポートとインターネット接続を備えたWindows / Linux / Macホストシステム。で、ハードウェアとOSの要件を確認してくださいSSv5
  3. RaspberryPiをインターネットに接続するための少なくとも1本のイーサネットケーブル。 WSTKは、デバッグとIPを介したフラッシュもサポートしているため、オプションで、追加のイーサネットケーブルを使用して、イーサネットスイッチを介してWSTKをホストシステムに接続できます。

ソフトウェア:

  • Simplicity Studio v5は、Windows / Linux / Macホストシステムにインストールおよび更新されています。
    • GNU ARMv7.2.1ツールチェーン
    • Gecko SDK Suite3.2.0以降およびSiliconLabs OpenThreadSDK。

Simplicity Studio5をダウンロードする

このCodelabはを使用して作成されました

  1. EFR32MG12 BRD4166A Thunderboardセンス2左側に示すように。
  2. 二EFR32MG13 BRD4168A右図のように。
  3. MacOS Catalina10.15.7にインストールされたSimplicityStudio v5
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

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

接続

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

  1. プロジェクト:(推奨)サンプルアプリケーションを作成、ビルド、フラッシュします。このオプションを使用すると、プロジェクト内のアプリケーションをカスタマイズできます。または
  2. デモ:(オプション)サンプルアプリケーションのいずれかについて、事前に作成されたデモを無線ボードに直接フラッシュします。オプションの演習としてセットアップされたデモファームウェアを試すことをお勧めします。詳細については、このコードラボの最後にある「オプションのファームウェアセットアップ-デモ」セクションを参照してください。

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

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

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

  1. オープンスタジオの[ファイル]メニューと[新規作成]> [シリコン・ラボラトリーズプロジェクトウィザードを選択します。 [ターゲット、SDK、およびツールチェーンの選択]ダイアログが開きます。 OpenThreadでサポートされているデフォルトのSimplicityIDE / GNUツールチェーンを変更しないでください。 [次へ]をクリックします
    • ターゲットボード:選択した無線ボード(BRD4168A)とメインボード(BRD4001A)を表示します
    • ターゲットデバイス:このフィールドには、オンボードのマイクロコントローラーチップ(MCU)が表示されます。 BRD4168AにはEFR32MG13MCUが搭載されています。
    • SDK:ここでは、使用しているOTのSDKバージョンを選択できます。このコードラボでは、OpenThread1.2.0.0を使用します。
    • IDE /ツールチェーン:OTプロジェクトのコンパイルに使用されるツールチェーン。 GNU ARM7.2.1を使用します。

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

  1. [プロジェクトの選択例]ダイアログが開きます。サンプルプロジェクトのリストが表示されます。この場合には、具体的な例を検索する「スレッド」技術タイプとキーワードフィルタを使用ot-cli-ftd 。それを選択し、[次へ]クリックします。

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

  1. [プロジェクト構成]ダイアログが開きます。ここで、プロジェクトの名前を変更したり、デフォルトのプロジェクトファイルの場所を変更したり、プロジェクトファイルにリンクするかコピーするかを決定したりできます。リンクされたプロジェクトファイルはSDKを指し、行った変更はSDKで行われ、将来のプロジェクトで使用されます。プロジェクトソースをコピーすると、SDKファイルがそのまま残るように、プロジェクトローカルコピーを編集できます。 「リンクのSDKとコピープロジェクトソースのデフォルトおよび推奨選択です。 [完了]クリックします。

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

  1. シンプルIDEパースペクティブ[概要]タブに開いているプロジェクトコンフィギュレータで開きます。

プロジェクトの概要

このプロジェクトは、インストールと構成部品をアンインストールし、インストールされたコンポーネントを構成することによって、ソフトウェアコンポーネント]タブで構成されています。インストールされているコンポーネントがチェックされます。例えば、アプリケーションによってインストールされたコンポーネントのフィルタリングされたリストを見るためにインストールされるコンポーネントをクリックしてください。行った変更はすべて自動保存され、プロジェクトファイルは自動生成されます。進行状況は、SimplicityIDEパースペクティブの右下隅に表示されます。

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

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

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

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

  1. プロジェクトを設定した後、トップツールバーのビルド・コントロール(ハンマーのアイコン)をクリックしてください。または、プロジェクトを右クリックして、[プロジェクトのビルド]をクリックすることもできます。

プロジェクトのビルドボタン

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

オブジェクトビルド出力ウィンドウ

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

閃光

この時点で、無線ボード上で適切なファームウェアを作成、コンパイル、およびフラッシュする必要があります。いったんot-rcp BRD4166Aにフラッシュされ、ホストシステムからそれを外し、ラズベリーPiにこのボードを接続します。

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

EFR32MGのセットアップ

Devicesビュー/デバッグアダプタウィンドウであなたのJ-LinkデバイスにシンプルIDEパースペクティブで、右クリックをコンソール・インタフェースを起動します。起動コンソールを選択してください。コンソール上のプロンプトを取得するには、シリアル1]タブを選択し、Enterキーを押します。 FTDノードの状態を確認してください。

FTDスタジオコンソールビュー

あなたは私たちがまだのコンソールがないことに気付くでしょうot-rcp 。次のステップでは、OTの境界ルータとしてラズベリーパイを設定して、コンソール設定しますot-rcp

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

Silicon Labsは、DockerHubでホストされる次のビルド済みDockerコンテナー(タグ付き)を提供します。

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

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

RaspberryPiのセットアップ

  1. あなたのSDカードで、あなたが点滅を確認してくださいRaspbianストレッチLiteのOSイメージデスクトップとRaspbianストレッチを
  2. Raspberry PiにSSHで接続するか、Raspbianデスクトップを直接操作することを選択できます。ターミナルを開きます。
  3. あなたの地元のリポジトリとパッケージマネージャを更新することを確認します(apt-getの更新前ドッカーをインストールへのアップグレードapt-getを)。

Dockerイメージをインストールします

  1. 次のコマンドを使用してDockerをRPiにインストールします。
    curl -sSL https://get.docker.com | sh
    
  2. 完了したら、各コマンドの前にsudoを必要としないようにDockerユーザー設定を変更できます。再起動が必要です。
    sudo usermod -aG docker $USER
    
  3. 次のコマンドを発行して、コンテナーをインストールします。 RCPで一度に実行できるBorderRouterコンテナは1つだけであることに注意してください。また、このコンテナに対して実行する必要があるRCPバージョン(スレッドバージョン1.2)を必ず確認してください。
    docker pull siliconlabsinc/openthread-border-router:gsdk-3.2.0
    

Dockerを構成して実行する

  1. 起動時にOTBRがRCPに接続するために使用するTTYポートを構成する必要があります。 RCPデバイスのTTYポートを探します。これを行う最も簡単な方法は、Aを探すことです/tty/dev ... RCP一度エントリが接続されています。これは、一般的にどちらかでなければなりません/dev/ttyUSB0/dev/ttyACM0
  2. 次のようにDockerインストールを実行します。この例では、Thread 1.1 BorderRouterコンテナを使用しています。
    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-3.2.0 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -dコンテナが外れモードで実行することを保証します。
    • あなたは使用してコンテナのいずれかの時間を実行しているログを見ることができるdocker logsコマンドを。
    • --nameドッカー容器が正しく閉じられて(または削除)されるまで粘着性です。
    • ポート8080は、BorderRouter管理WebページをホストしているWebサーバーのポートを示します。
    • ?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つのコンソールが必要です。

  1. ot-cli-ftdシンプルStudioのコンソールは完全なスレッドデバイスとして設定されています。
  2. ワンot-ctl OT境界ルータとして設定されているラズベリーパイの対話型シェル。

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

RCPを設定する

ネットワークを作成するために、我々は、で始まるot-ctl RCPノードと通信するために使用されるOTBR上のシェル。次のコマンドを次の順序で入力します。

索引

指示

コマンドの説明

期待される応答

1

dataset init new

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

終わり

2

dataset commit active

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

終わり

3

ifconfig up

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

終わり

4

thread start

スレッドプロトコル操作を有効にしてアタッチします。

終わり

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

5

state

デバイスの状態を確認してください。それはリーダーでなければなりません。
その他の考えられる状態:オフライン、無効、切り離された、
子、ルーター、またはリーダー

リーダー
終わり

6

dataset

ネットワーク構成を表示します。
値はこのコードラボとは異なります。
チャネル、ネットワークキー、
ネットワーク名とPANID。

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

私たちは、上のチャンネル番号とネットワークキーを使用するot-cli-ftdこのスレッドのネットワークに2 FTDsに参加します。

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

帯域外方式では、すべてのセキュリティ情報を把握しており、ノードを手動で追加します。 Simplicityコンソールで、次のコマンドを以下に示す順序で使用して、両方のFTDをネットワークに追加します。

索引

指示

コマンドの説明

期待される応答

1

dataset channel 20

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

終わり

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

終わり

3

dataset commit active

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

終わり

4

ifconfig up

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

終わり

5

thread start

スレッドプロトコル操作を有効にしてアタッチします。

終わり

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

6

state

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

子供
終わり

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

私たちは、使用する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を実行します。

スレッドネットワークを作成しました。

あなたは今知っています:

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

参考文献

チェックアウトopenthread.ioGitHubのを含め、OpenThread資源の多様性のために:

デモは、互換性のあるデバイスにダウンロードする準備ができているビルド済みのファームウェアイメージです。 Simplicity Studioでパーツのデモが利用可能かどうかを確認する最も簡単な方法は、[デバッグアダプター]ビューでパーツをクリックし、ランチャーパースペクティブの[プロジェクトとデモの例]タブに移動することです。サンプルプロジェクトフィルターを無効にし、テクノロジータイプの下のスレッドラジオチェックボックスをチェックします。

スタジオデモ

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

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

このリストは、将来のSDKリリースで更新され、より多くの無線ボードが含まれる可能性があります。サポートされているパーツの完全なリストについては、ドキュメントのSilicon Labs OpenThreadSDKリリースノートを参照してください。

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

  1. BRD4166A:OT-RCP -このデバイスは、OT境界ルータへの無線コプロセッサとして機能します。このデバイスを使用してスレッドネットワークを作成し、スレッドネットワーク上の他の2つのデバイスをオンボードします。ボーダールーターであるこのデバイスは、スレッドネットワーク内のデバイスがインターネット経由で通信するためのゲートウェイとしても機能します。
  2. BRD4168A:OT-CLI-FTD -これら2つのデバイスは完全なスレッドのデバイスとして機能します。それらは、OTBRによって作成されたスレッドネットワークに参加します。