1. はじめに
Thread、OpenThread、OTNS、Silk とは
スレッドは IP ベースの低電力ワイヤレス メッシュ ネットワーク プロトコルであり、デバイス間やデバイス間の通信を安全に行うことができます。スレッド ネットワークは、トポロジの変更に適応して、単一障害点を回避できます。
Google がリリースする OpenThread は、Thread のオープンソース実装です。OpenThread は、コードサイズとメモリ フットプリントが小さいにもかかわらず、スレッド仕様で定義されているすべての機能をサポートしています。
OpenThread ネットワーク シミュレータ(OTNS)を使用すると、POSIX プラットフォームでシミュレートされた OpenThread ノードを実行することで、スレッド ネットワークをシミュレートできます。OTNS は、シミュレートされた Thread ネットワークの可視化と運用のための使いやすいウェブ インターフェース(OTNS-Web)を提供します。
Silk は、実際のデバイスで OpenThread の機能、機能、システム パフォーマンスを検証するための完全に自動化されたテスト プラットフォームです。
学習内容
- OpenThread の機能検証フレームワーク: Silk
- OTNS 機能を有効にして実際のデバイス用に OpenThread をビルドする
- OTNS-Web インターフェースを使用して、Silk テストケースを実行して生成された Thread ネットワークのステータスをモニタリングします
この Codelab では、OTNS で Silk を使用することに重点を置いています。Silk と OTNS のその他の機能は対象外です。
必要なもの
ハードウェア:
- 6 Nordic Semiconductor nRF52840 Dev ボード
- ボードを接続するための USB - マイクロ USB ケーブル x 6
- USB ハブ
ソフトウェア:
- Linux x86_64。
- Git。
- Go 1.11 以降。
- ウェブブラウザ。OTNS-Web では、ウェブブラウザを使用してシミュレーションを表示します。
事前準備
2. 前提条件
以前の基本的な Codelab を完了
- Thread Primer。この Codelab で教える内容を理解するため、スレッドの基本コンセプトを理解しておく必要があります。
- nRF52840 ボードと OpenThread を使用して Thread ネットワークを構築します。この Codelab は、Thread ネットワークが正常にビルドされたことを前提としています。
- OTNS を使用してスレッド ネットワークをシミュレートする。この Codelab は、OTNS ツールが正常に実行されていることを前提としています。
パッケージの前提条件の確認
すべての前提条件を満たしていることを確認します。
which otns
を実行して、$PATH
でotns
実行可能ファイルが検索可能かどうかを確認します。which wpantund
を実行して、wpantund
が使用可能であることを確認します。- ARM GNU ツールチェーン、J-Link、
nrfjprog
パッケージがすべて利用可能であることを確認します。 openthread
フォルダの下にあるmake -f examples/Makefile-nrf52840
を実行して、OpenThread バイナリを作成できることを確認します。
注: 設定ガイドについては、リンク先のドキュメントをご覧ください。前提条件 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
インターフェースのシリアル番号と USB インターフェースの番号を確認するため、Silk の一部として usbinfo
というツールがインストールされています。DutSerial は、チップに印刷されるか、J-Link 製品用に usbinfo
で表示される SN 番号です。
[DEFAULT]
セクションの LayoutCenter
フィールドと LayoutRadius
フィールドは、ウェブ UI でデバイスを可視化する際のレイアウトの形状を定義します。ここに示されている値に設定することをおすすめします。
その後、テストデバイスごとにセクションを定義し、関連するハードウェア情報を提供します。
4.OTNS を有効にして OpenThread をコンパイルする
イメージのビルドとフラッシュ
デフォルトでは、OpenThread デバイスは OTNS 関連のメッセージを出力しません。DevBoard で 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 を実行すると、スレッド ネットワークをシミュレートできます。実際の物理ネットワークの可視化ツールとして使用するには、次のコマンドを実行します。
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 リアルタイム モード サービスはすでにローカルで実行されているため、出力ログファイル、入力テスト スクリプト、hwconfig.ini
ファイルに必要な場所を指定して silk_run_test.py
ファイルを変更するだけです。-s localhost
引数は、localhost
に OTNS メッセージを送信するように 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 デバイスでシルクのテストを実行し、OTNS を使用して可視化できました。
OTNS 対応ファームウェアでフラッシュされた開発ボードを使用して、Silk テストを実施しました。ボードはシルク サーバーに状況を報告し、そこでシルク サーバーはそれらすべてを監視して集約し、他のテスト情報とともに OTNS サービスに送信します。実際のモードで実行される OTNS は、ウェブ インターフェース上の Thread ネットワークを可視化します。
次のステップ
Silk パッケージに含まれている他の OpenThread テストケースを実行してみてください。
関連情報
さまざまな OpenThread リソースについては、openthread.io と Silk をご覧ください。