1. はじめに
Thread、OpenThread、OTNS、Silk とは何ですか?
Thread は、デバイス間の安全な通信とデバイス間の通信を可能にする IP ベースの低電力ワイヤレス メッシュ ネットワーク プロトコルです。Thread ネットワークはトポロジの変更に対応して単一障害点を回避できます。
Google がリリースした OpenThread は、Thread のオープンソース実装です。小さいコードサイズとメモリ フットプリントにもかかわらず、OpenThread は Thread 仕様で定義されているすべての機能をサポートしています。
OpenThread ネットワーク シミュレータ(OTNS)を使用すると、シミュレートされた OpenThread ノードを POSX プラットフォームで実行して Thread ネットワークをシミュレートできます。OTNS は、シミュレートされた Thread ネットワークを可視化して操作するための、使いやすいウェブ インターフェース(OTNS-Web)を提供します。
Silk は完全に自動化されたテスト プラットフォームで、実際のデバイスで OpenThread の機能、機能、システム パフォーマンスを検証できます。
学習内容
- OpenThread の機能検証フレームワーク: Silk
- OTNS 機能が有効な実機用 OpenThread を構築する
- OTNS ウェブ インターフェースを使用して、Silk テストケースの実行による Thread ネットワークのステータスをモニタリングする
この Codelab は、OTNS で Silk を使用する場合に重点を置いています。Silk と OTNS のその他の機能は対象外です。
必要なもの
ハードウェア:
- Nordic Semiconductor nRF52840 開発ボード 6 枚
- 6 つの USB - マイクロ USB ケーブルでボードを接続
- USB ハブ
ソフトウェア:
- Linux x86_64。
- Git。
- Go 1.11 以降。
- ウェブブラウザ。OTNS-Web は、シミュレーションを表示するためにウェブブラウザを使用します。
前提条件:
2. 前提条件
以前の基本的な Codelab を完了する
- Thread Primer。この Codelab で学習する内容を理解するには、Thread の基本コンセプトを理解する必要があります。
- nRF52840 ボードと OpenThread を使用して Thread ネットワークを構築します。この Codelab は、Thread ネットワークが正常に構築されていることを前提としています。
- OTNS を使用して Thread ネットワークをシミュレートする。この Codelab は、OTNS ツールが正常に実行されていることを前提としています。
パッケージの前提条件の確認
すべての前提条件が満たされていることを確認します。
which otns
を実行して、otns
実行可能ファイルが$PATH
で検索可能かどうかを確認します。which wpantund
を実行して、wpantund
が使用可能であることを確認します。- ARM GNU ツールチェーン、J-Link、
nrfjprog
パッケージがすべて使用可能であることを確認します。
注: 設定ガイダンスについては、リンク先のドキュメントをご覧ください。前提条件 1 は、OTNS を使用して Thread ネットワークをシミュレートするであり、その他の要件は nRF52840 ボードと OpenThread を使用して Thread ネットワークを構築するです。
3. シルクのセットアップ
Silk のクローンを作成して環境を設定するには、ソース ディレクトリで次のコマンドを実行します。
$ git clone https://github.com/openthread/silk.git $ cd silk $ ./bootstrap.sh $ sudo make install-cluster
ハードウェア構成ファイルを定義する
マシンに接続された使用可能なテスト ハードウェア リソースを Silk が収集できるようにするには、次の形式の hwconfig.ini
ファイルを定義します。
[DEFAULT] ClusterID: 0 LayoutCenter: 300, 300 LayoutRadius: 100 [Dev-8A7D] HwModel: Nrf52840 HwRev: 1.0 InterfaceSerialNumber: E1A5012E8A7D USBInterfaceNumber: 1 DutSerial: 683536778
usbinfo
というツールが Silk の一部としてインストールされ、インターフェース シリアル番号と USB インターフェース番号の確認に使用できます。DutSerial は、チップに印刷されているか、J-Link 製品の usbinfo
によって表示されるシリアル番号です。
[DEFAULT]
セクションの LayoutCenter
フィールドと LayoutRadius
フィールドは、ウェブ UI でデバイスを可視化する際のレイアウトの形状を定義します。最初に表示された値に設定することをおすすめします。
その後、テストデバイスごとにセクションを定義し、関連するハードウェア情報を提供します。
4. OTNS を有効にして OpenThread をコンパイルする
イメージのビルドとフラッシュ
デフォルトでは、OpenThread デバイスは OTNS 関連のメッセージを出力しません。開発ボードが OTNS 可視化に不可欠なログ インターフェースにステータス メッセージを出力できるようにするには、OpenThread ソース ディレクトリで次のコマンドを実行して FTD イメージをビルドし、16 進数形式に変換します。
$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive $ cd ot-nrf528xx $ ./script/bootstrap $ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON $ cd ./build/bin $ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex
ボードをフラッシュするには、Thread ネットワークの構築 Codelab のステップ 4 の手順に沿って nrfjprog
を使用します。その後、すべてのボードを nRF USB ポート経由でホストマシンに接続します。同じ USB - マイクロ USB ケーブルのセットを、J-Link ポートから取り外し、nRF52840 開発ボードの nRF USB ポートに接続できます。そのため、この 6 本のケーブルだけでテストを実行できます。面倒な作業を避けるために、12 本のケーブルを使用して両方のポートに接続します。
5. リアルモードでの OTNS サーバーの実行
デフォルトのパラメータで OTNS を実行すると、ユーザーは Thread ネットワークをシミュレートできます。実際の物理ネットワークの可視化ツールとして使用するには、次のコマンドを実行します。
otns -raw -real -ot-cli otns-silk-proxy
これらの引数は、ネットワークをシミュレートするために複数の ot-cli
プロセスを実行する代わりに、Thread ネットワークを可視化する方法を記述する gRPC メッセージと UDP メッセージを OTNS に要求します。ビジュアリゼーションのページが空白の状態でブラウザで開きます。
6. OTNS サポートによる Silk テストケースの実行
Silk は、OpenThread の機能、機能、システム パフォーマンスを実際のデバイスで検証するための、完全に自動化されたテスト プラットフォームです。使用方法については、プロジェクトの README の手順をご覧ください。
silk/unit_tests
にある silk_run_test.py
ファイルを参考にしましょう。Silk は、テストケースの実行時に OTNS サポートを提供します。OTNS のリアルモード サービスはすでにローカルで実行されているため、silk_run_test.py
ファイルの出力場所、入力テスト スクリプト、hwconfig.ini
ファイルの適切な場所でファイルを変更するだけで済みます。-s localhost
引数は、OTNS メッセージを localhost
に送信するよう Silk に指示します。
たとえば、silk_run_test.py
ファイルに次の変更を加えて、ot_test_form_network.py
という名前のテストを実行できます。/opt/openthread_test/
は、Silk がログ出力と構成ファイルに使用するデフォルトのパスですが、任意のパスを使用できます。
silk_run_test.py
import datetime
import os
from silk.tests import silk_run
RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'
os.chdir('~/src/silk/silk/tests/')
timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')
run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'
argv = [
'tests/silk_run.py',
'-v2',
'-c', CONFIG_PATH + 'hwconfig.ini',
'-d', run_log_path,
'-s', 'localhost',
'ot_test_form_network.py'
]
silk_run.SilkRunner(argv=argv)
形成されたネットワークのトポロジが OTNS ウェブ UI に表示されます。
左上隅に、可視化の統計情報、OT のバージョン、テストのタイトルが表示されます。左下隅、右側に表示されるログ ウィンドウのコントロールが表示されます。最初はノードが追加されますが、ネットワークは形成されません。テストが進むにつれて、各ノードのモードとロールが変化し、リンクが形成されます。
7. 完了
これで、物理 Thread デバイス上で Silk テストを正常に実行し、OTNS を使用して可視化できました。
OTNS 対応のファームウェアでフラッシュされた開発ボードを使用して、Silk テストを実行しました。これらのボードは、Silk サーバーにステータスを報告します。Silk サーバーはそれらをすべてモニタリングして集計し、他のテスト情報とともに OTNS サービスに送信します。実際のモードで実行されている OTNS が、ウェブ インターフェース上で Thread ネットワークを可視化します。
次のステップ
Silk パッケージに含まれている他の OpenThread テストケースを実行してみてください。
関連情報
さまざまな OpenThread リソースについては、openthread.io と Silk をご覧ください。