1. はじめに
OpenThread は、Thread® ネットワーキング プロトコルのオープンソース実装です。Thread® は、モノのインターネット(IoT)デバイス向けに設計された堅牢で安全なワイヤレス メッシュ ネットワーク プロトコルです。OpenThread は Google の Nest チームが開発し、オープンソース プロジェクトとしてデベロッパー コミュニティに無料で提供されています。
Thread Specification は、スマートホームや商業施設で一般的に見られる、リソースに制約のあるデバイス向けに、信頼性、安全性、エネルギー効率に優れたワイヤレス通信プロトコルを規定しています。OpenThread には、IPv6、6LoWPAN、MAC セキュリティを備えた IEEE 802.15.4、メッシュリンク確立、メッシュルーティングなど、Thread 内の完全なネットワークレイヤスコープが含まれます。
Telink は OpenThread の実装を Zephyr RTOS に統合し、Telink ハードウェアとのシームレスな互換性を実現しました。この統合のソースコードは GitHub から簡単にアクセス可能で、ソフトウェア開発キット(SDK)としても提供されています。
この Codelab では、実際のハードウェア上で OpenThread をプログラミングし、Thread ネットワークを作成して管理し、ノード間でメッセージを交換します。下の画像は、この Codelab での OT ボーダー ルーター(OTBR)と Thread デバイス 1 台によるハードウェアのセットアップを示しています。
学習内容
- Telink Zephyr 開発環境を使用して OpenThread の実装をセットアップする。
- OpenThread CLI サンプル(
ot-cli-ftd
およびot-rcp
)をビルドし、Telink B91 開発ボードに書き込む。 - Raspberry Pi 3B 以降で Docker を使用して OpenThread ボーダー ルーター(OTBR)をセットアップするには、
- OTBR に Thread ネットワークを作成するには、
- 帯域外デバッグを使用して Thread ネットワークにデバイスを追加するため。
- CLI を使用して Thread ネットワーク内のノード間の接続を検証する。
必要なもの
ハードウェア:
- 2 つの B91 開発ボード。
- Raspbian OS Image を含む 1 台の Raspberry Pi 3B 以上。
- USB ポートが 2 つ以上ある Linux マシン。
- インターネットに接続されたスイッチ(ルーター)と数本のイーサネット ケーブル。
ソフトウェア:
- Telink 書き込みおよびデバッグツール - LinuxBDT。
- シリアルポート ターミナル ツール(PuTTY など)。
- その他のツール(Git、West など)
2. 前提条件
Thread のコンセプトと OpenThread CLI
この Codelab の前に OpenThread シミュレーションの Codelab を受講し、Thread の基本的なコンセプトと OpenThread CLI について理解を深めておくと役立ちます。
Linux マシン
Linux マシン(Ubuntu v20.04 LTS 以降)は、Telink Zephyr 開発環境をセットアップしてすべての Thread 開発ボードをフラッシュするためのビルドマシンとして機能します。これらのタスクを実行するには、Linux マシンに使用可能な 2 つの USB ポートとインターネット接続が必要です。
シリアルポート接続と端子
デバイスを Linux マシンの USB ポートに直接接続できます。また、デバイスにアクセスするにはシリアルポート ターミナル ツールが必要です。
この Codelab では、ターミナル ツール PuTTY を使用して FTD Joiner と Raspberry Pi を制御します。概要を示しますが、他のターミナル ソフトウェアを使用することもできます。
Telink B91 開発キット
この Codelab には 2 セットの B91 開発キットが必要です。以下の写真は、1 セットに最低限必要なコンポーネントを示しています。
これらのキットの 1 つは RCP(無線コプロセッサ)として使用され、もう 1 つは FTD(フルスレッド デバイス)として機能します。キットをまだお持ちでない場合は、Telink 公式ウェブサイトで詳細を入手できます。使用されるコンポーネントには、次のようなものがあります。
インデックス | 名前 |
1 | Telink B91 開発ボード |
2 | Telink バーニングボード |
3 | 2.4GHz アンテナ |
4 | USB ケーブル(USB A - ミニ USB) |
Raspberry Pi 3B 以降と Raspbian OS イメージ
この Codelab では、Raspbian Bullseye Lite OS イメージまたは Raspbian Bullseye with Desktop を搭載した Raspberry Pi 3B 以降が必要です。イーサネット経由でインターネットに接続され、OpenThread Border Router(OTBR)のホストとして構成されます。
ネットワーク接続
インターネットに接続されたスイッチ(またはルーター)と複数のイーサネット ケーブル。これらを使用して、Raspberry Pi を Linux マシンに接続し、ホストから Raspberry Pi を簡単に構成できます。
LinuxBDT
Telink のバーニングおよびデバッグツール(BDT)は、すべての Telink Chip シリーズに適用され、OpenThread ファームウェアを消去して Telink B91 開発ボードに書き込むことができます。Linux マシンに X86 ベースの Linux バージョン linuxBDT をインストールします。
その他
- Git: Telink Zephyr 開発環境をセットアップします。
- West。Zephyr プロジェクトの管理と OpenThread バイナリのビルドに使用します。
3. ファームウェアの設定
Telink Zephyr 開発環境を設定する
Linux マシンで CLI ターミナルを開き、次のコマンドを実行して APT が最新であることを確認します。
$ sudo apt update $ sudo apt upgrade
それが完了したら、次の手順に進みます。
- 依存関係をインストールします。
Zephyr では現在、CMake(3.20.0)、Python3(3.6)、Devicetree Compiler(1.4.6)などの主要な依存関係の最小バージョンが必要です。$ wget https://apt.kitware.com/kitware-archive.sh $ sudo bash kitware-archive.sh $ sudo apt install --no-install-recommends git cmake ninja-build \ gperf ccache dfu-util device-tree-compiler python3-dev python3-pip \ python3-setuptools python3-tk python3-wheel xz-utils file make gcc \ gcc-multilib g++-multilib libsdl2-dev
次の手順に進む前に、システムにインストールされているバージョンを確認してください。バージョンが正しくない場合は、APT ミラーを安定した最新のミラーに切り替えるか、これらの依存関係を手動で更新します。$ cmake --version $ python3 --version $ dtc --version
- west をインストールします。
$ pip3 install --user -U west $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc $ source ~/.bashrc
~/.local/bin
が$PATH
環境変数に含まれていることを確認します。 - Zephyr プロジェクトのソースコードを取得します。
$ west init ~/zephyrproject $ cd ~/zephyrproject $ west update $ west blobs fetch hal_telink $ west zephyr-export
- Zephyr 用の追加の Python 依存関係をインストールします。
$ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
- Zephyr ツールチェーンを設定します。Zephyr ツールチェーン(約 1 ~ 2 GB)をローカル ディレクトリにダウンロードして、ほとんどのボードをフラッシュできるようにします。
Zephyr SDK をダウンロードし、以下の推奨パスに配置します。$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
[-x.y.z] は、任意のテキストで、-0.16.1 などの任意のテキストです。SDK のインストール後にディレクトリを移動することはできません。次に、Zephyr ツールチェーンをインストールします。$HOME/zephyr-sdk[-x.y.z] $HOME/.local/zephyr-sdk[-x.y.z] $HOME/.local/opt/zephyr-sdk[-x.y.z] $HOME/bin/zephyr-sdk[-x.y.z] /opt/zephyr-sdk[-x.y.z] /usr/zephyr-sdk[-x.y.z] /usr/local/zephyr-sdk[-x.y.z]
$ tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz $ cd zephyr-sdk-0.16.1 $ ./setup.sh -t riscv64-zephyr-elf -h -c
- Hello World サンプルをビルドします。まず、Hello World の例を使用して公式の Zephyr プロジェクトの構成が正しいことを確認し、カスタム プロジェクトを設定します。
West build コマンドを使用して、Zephyr リポジトリのルート ディレクトリから hello_world サンプルをビルドします。$ cd ~/zephyrproject/zephyr $ west build -p auto -b tlsr9518adk80d samples/hello_world
zephyr.bin
という名前のファームウェアはbuild/zephyr directory
にあります。 - Zephyr 環境スクリプトを
~/.bashrc
に追加します。次のコマンドを実行します。$ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc $ source ~/.bashrc
- Telink Zephyr リモート リポジトリを追加します。Telink リポジトリを開発ブランチとしてローカルにダウンロードし、更新します。
$ cd ~/zephyrproject/zephyr $ git remote add telink-semi https://github.com/telink-semi/zephyr $ git fetch telink develop $ git checkout develop $ west update $ west blobs fetch hal_telink
詳しくは、Zephyr Doc – スタートガイドをご覧ください。
Telink LinuxBDT を設定する
Telink LinuxBDT ツールをダウンロードして、Linux マシンのローカル ディレクトリ(ホーム ディレクトリ ~
など)に展開し、B91 開発ボードにファームウェアをフラッシュできるようにします。
$ cd ~ $ wget http://wiki.telink-semi.cn/tools_and_sdk/Tools/BDT/LinuxBDT.tar.bz2 $ tar -vxf LinuxBDT.tar.bz2
USB インターフェース経由で Linux マシンに Burning Board を接続し、次のコマンドを入力します。
$ cd LinuxBDT $ sudo ./bdt lsusb -v Bus 002 Device 001: ID 1d6b:0003 xHCI Host Controller Bus 001 Device 003: ID 0bda:565a Integrated_Webcam_HD Bus 001 Device 023: ID 413c:301a Dell MS116 USB Optical Mouse Bus 001 Device 037: ID 248a:826a Telink Web Debugger v3.6 Bus 001 Device 001: ID 1d6b:0002 xHCI Host Controller
「Telink Web Debugger v3.6」というメッセージが表示される場合は、BDT プログラマーが Linux マシンに正常に接続されたことを示しています。
ファームウェアのコンパイル
この Codelab では、次の 2 種類の OpenThread ファームウェアをビルドします。
ot-cli-ftd
- と
ot-rcp
。
コンパイル方法は以下のとおりです。
- 無線コプロセッサ(
ot-rcp
)$ cd ~/zephyrproject $ rm -rf build_ot_coprocessor $ west build -b tlsr9518adk80d -d build_ot_coprocessor zephyr/samples/net/openthread/coprocessor -- -DDTC_OVERLAY_FILE="usb.overlay" -DOVERLAY_CONFIG=overlay-rcp-usb-telink.conf
- インタラクティブ コマンドラインを備えたフル機能スレッド デバイス(
ot-cli-ftd
)$ cd ~/zephyrproject $ rm -rf build_ot_cli_ftd $ west build -b tlsr9518adk80d -d build_ot_cli_ftd zephyr/samples/net/openthread/cli -- -DOVERLAY_CONFIG=overlay-telink-fixed-mac.conf -DCONFIG_OPENTHREAD_FTD=y
ファームウェアフラッシュ
USB ケーブルを使用して、下の図のように B91 開発ボードを書き込みボードに接続します。
コマンドラインで以下のコマンドを実行して、ファームウェアのバーンを行います(例として、ot-cli-ftd
ファームウェアのフラッシュを使用します)。
$ cd ~/zephyrproject/build_ot_cli_ftd/zephyr $ cp zephyr.bin ~/LinuxBDT/bin/ot-cli-ftd.bin $ cd ~/LinuxBDT $ sudo ./bdt 9518 ac Activate OK! $ sudo ./bdt 9518 wf 0 -i bin/ot-cli-ftd.bin EraseSectorsize... Total Time: 2181 ms Flash writing... [100%][-] [##################################################] File Download to Flash at address 0x000000: 491700 bytes Total Time: 30087 ms
ot-rcp
のフラッシュ メソッドは、基本的に ot-cli-ftd
の場合と同じです。ただし、ファームウェアのパスと名前には違いがあります。
フラッシュ後、2 つの B91 開発ボードに適切なマークを付けて区別します。ot-cli-ftd
でフラッシュされたボードに「FTD Joiner」というラベルを付けます。ボードに「RCP」として ot-rcp
がフラッシュされます。
4. FTD Joiner デバイスのシリアル コンソールを設定する
図に示すように、FTD Joiner を Linux マシンの USB ポートに直接接続します。
FTD Joiner デバイスを Linux マシンに接続したら、PuTTY を開きます。次に、新しいターミナルを作成し、シリアルポート情報を設定して、シリアルポートを開きます。
OpenThread コマンドライン リファレンスは、OpenThread CLI リファレンスにあります。すべてのコマンドの先頭に必ず ot
を付けてください。
例:
> ot state disabled Done > ot channel 11 Done >
5. Raspberry Pi を OpenThread ボーダー ルーターとしてセットアップする
OpenThread ボーダー ルーターは、次の 2 つの主要部分で構成されるデバイスです。
- Raspberry Pi には、ボーダー ルーター(BR)として動作するために必要なすべてのサービスとファームウェアが含まれています。
- RCP はスレッド通信を担当します。
無線コプロセッサ(RCP)
ot-rcp
ファームウェアをフラッシュするには、ot-cli-ftd
ファームウェアのフラッシュ プロセスと同じ手順を行います。下の図に示すように、B91 開発ボードを Raspberry Pi の USB ポートに接続します。
Raspberry Pi
- Raspbian Bullseye Lite OS イメージまたは Raspbian Bullseye with Desktop が SD カードに正しく書き込まれていることを確認します。
- Raspberry Pi に SSH で接続することも、Raspbian Desktop で直接操作することもできます。この Codelab では SSH を使用します。
- 次のステップで OTBR Docker のインストールに進む前に、まずローカル リポジトリとパッケージ管理システムを更新してください。
$ sudo apt-get update $ sudp apt-get upgrade
Docker のインストール
前の手順でローカル リポジトリとパッケージ管理システムの APT を更新しただけの場合は、Raspberry Pi を再起動してから、SSH ターミナル ウィンドウを開きます。
- Docker をインストールします。
$ curl -sSL https://get.docker.com | sh
- 現在のアカウントを Docker グループに追加して権限を付与します。これにより、各コマンドの前に
sudo
を追加する必要がなくなります。 有効にするには、Raspberry Pi を再起動する必要があります。$ sudo usermod -aG docker $USER
- Docker が起動していない場合は、起動します。
$ sudo dockerd
- OTBR ファイアウォール スクリプトは、Docker コンテナ内でルールを生成します。その前に
modprobe
を実行して、iptables のカーネル モジュールを読み込みます。$ sudo modprobe ip6table_filter
Docker を構成して実行する
この Codelab では、OTBR Docker イメージを OpenThread Docker Hub から直接 pull します。この画像は、OpenThread チームによってテスト、検証されています。
- 最新のイメージを pull します。
$ docker pull openthread/otbr:latest
- Docker コンテナのイメージリストを確認します。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE openthread/otbr latest db081f4de15f 6 days ago 766MB
/dev
を確認して RCP デバイスのシリアルポート名を確認します。ttyACM0
は、RCP が正しく接続されていることを示します。$ ls /dev/tty* ... /dev/ttyACM0 ...
- OTBR Docker を初めて実行し、RCP のシリアルポート(
ttyACM0
)を参照します。この OTBR Docker を引き続き使用する場合は、コマンド docker start otbr を使用してください。$ docker run --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 openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
- 新しい SSH ターミナル ウィンドウを開き、Raspberry Pi と RCP 間の接続をテストします。
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
オプションの Docker コマンド:
- 実行中の Docker コンテナに関する情報を取得します。
$ docker ps -aq
- OTBR Docker を停止します。
$ docker stop otbr
- OTBR Docker を削除します。
$ docker rm otbr
- OTBR Docker を再読み込みします。
$ docker restart otbr
この時点で、FTD Joiner デバイスと OTBR の準備が整いました。次のステップに進んで Thread ネットワークを構築できます。
6. Thread ネットワークを作成する
RCP で Thread ネットワークを作成する
OTBR で ot-ctl シェルを使用して、Thread ネットワークを確立します。前のセクションでシェルを終了した場合は、次のコマンドを入力して SSH ターミナルでシェルを再び起動します。
$ docker exec -ti otbr sh -c "sudo ot-ctl"
次に、表に示された順序でコマンドを入力し、各ステップで期待どおりの結果が得られることを確認してから次のステップに進んでください。
インデックス | コマンド | はじめに | 想定されるレスポンス | ||
1 |
| 新しいランダムなネットワーク データセットを作成します。 | 完了 | ||
2 |
| 新しいデータセットを不揮発性ストレージ内のアクティブな運用データセットに commit します。 | 完了 | ||
3 |
| IPv6 インターフェースを起動します。 | 完了 | ||
4 |
| Thread プロトコル オペレーションを有効にし、Thread ネットワークに接続する。 | 完了 | ||
スレッド インターフェースが稼働するまで 10 秒待ちます。 | |||||
5 |
| デバイスの状態を確認します。このコマンドは、リーダーになって次のステップに進む前に複数回呼び出すことができます。 | leader | ||
6 |
| アクティブな運用データセット全体を確認し、ネットワークキーを記録します。 | アクティブ タイムスタンプ: 1 |
ネットワーク作成中に OTBR によってランダムに生成されたネットワーク キーは、ot-cli-ftd
デバイスがこの Thread ネットワークに参加する際に使用されます。
帯域外コミッショニングを通じて FTD Joiner を Thread に追加する
帯域外コミッショニングとは、非無線方式(OpenThread CLI への手動入力など)でネットワークへの参加を待機しているデバイスにネットワーク認証情報を送信することを指します。シリアル コンソールで FTD Joiner に以下のコマンドを順番に入力します。
インデックス | コマンド | はじめに | 想定されるレスポンス | ||
1 |
| デバイスが Thread ネットワークに接続するために必要なのは、ネットワーク キーだけです。 | 完了 | ||
2 |
| 新しいデータセットを不揮発性ストレージ内のアクティブな運用データセットに commit します。 | 完了 | ||
3 |
| IPv6 インターフェースを起動します。 | 完了 | ||
4 |
| Thread プロトコル オペレーションを有効にし、Thread ネットワークに接続する。 | 完了 | ||
デバイスが接続され、自動的に構成されるまで 20 秒ほど待ちます。 | |||||
5 |
| デバイスの状態を確認します。 | お子様/ルーター |
トポロジ
ipaddr
、child table
、router table
などのコマンドを SSH ターミナルに入力して、次のコード スニペットのようなレスポンスを取得します。
> ipaddr rloc fd8c:60bc:a98:c7ba:0:ff:fe00:b000 Done > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ | 1 | 0xb001 | 240 | 23 | 3 | 51 |1|1|1| 3| 0 | 0 | 129 | 82bc12fbe783468e | Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done ... > child table | ID | RLOC16 | Timeout | Age | LQ In | C_VN |R|D|N|Ver|CSL|QMsgCnt|Suprvsn| Extended MAC | +-----+--------+------------+------------+-------+------+-+-+-+---+---+-------+-------+------------------+ Done > router table | ID | RLOC16 | Next Hop | Path Cost | LQ In | LQ Out | Age | Extended MAC | Link | +----+--------+----------+-----------+-------+--------+-----+------------------+------+ | 33 | 0x8400 | 63 | 0 | 3 | 3 | 13 | e61487c1cda940a6 | 1 | | 44 | 0xb000 | 63 | 0 | 0 | 0 | 0 | 7ae354109d611f7e | 0 | Done
OTBR の RLOC16
は 0xb000
で、FTD Joiner の初期の RLOC16
は 0xb001
です。この場合、ルーター ID の取得後、FTD Joiner の RLOC16
は 0x8400
になります。FTD Joiner が子からルーターにアップグレードされたことがわかります。
現在の Thread ネットワークには 2 つのノードがあり、トポロジは以下の図のようになります。
7. Thread デバイス間の通信
ICMPv6 通信
ping
コマンドを使用して、同じネットワーク内の Thread デバイスが相互に通信できるかどうかを確認します。まず、ipaddr
コマンドを使用してデバイスの RLOC を取得します。
> ipaddr fd8c:60bc:a98:c7ba:0:ff:fe00:fc11 fdbd:7274:649c:1:1d19:9613:f705:a5af fd8c:60bc:a98:c7ba:0:ff:fe00:fc10 fd8c:60bc:a98:c7ba:0:ff:fe00:fc38 fd8c:60bc:a98:c7ba:0:ff:fe00:fc00 fd8c:60bc:a98:c7ba:0:ff:fe00:b000 # Routing Locator (RLOC) fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 fe80:0:0:0:78e3:5410:9d61:1f7e Done
FTD Joiner のシリアル コンソールで次のコマンドを入力して、ping オペレーションを実行します。
> ot ping fd8c:60bc:a98:c7ba:0:ff:fe00:b000 16 bytes from fd8c:60bc:a98:c7ba:0:ff:fe00:b000: icmp_seq=1 hlim=64 time=19ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 19/19.0/19 ms. Done
シリアルポートの出力レスポンスは、OTBR 側が ping リクエストを受信し、FTD Joiner が OTBR から返された ping レスポンスを受信したことを示しています。2 つのデバイス間の通信は成功します。
UDP 通信
OpenThread が提供するアプリケーションサービスには、UDP も含まれます。UDP API を使用して、Thread ネットワーク内のノード間で情報をやり取りしたり、ボーダー ルーターを介して外部ネットワークに情報を渡すこともできます。OpenThread の UDP API の詳細については、OpenThread CLI - UDP の例をご覧ください。この Codelab では、そこに含まれる API のいくつかを使用して、OTBR と FTD Joiner の間で情報を送信します。
まず、OTBR のメッシュ ローカル EID を取得します。このアドレスは Thread デバイスの IPv6 アドレスの 1 つでもあり、同じ Thread ネットワーク パーティション内の Thread デバイスへのアクセスに使用できます。
> ipaddr mleid fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 Done
次のコマンドを SSH ターミナルに入力して、OTBR UDP を有効にし、デバイスの 1022 ポートをバインドします。
> udp open Done > udp bind :: 1022 Done
シリアル コンソールで次のコマンドを入力し、FTD Joiner の UDP を有効にします。デバイスの 1022 ポートをバインドしてから、5 バイトの hello
メッセージを OTBR に送信します。
> ot udp open Done > ot udp bind :: 1022 Done > ot udp send fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6 1022 hello Done
SSH ターミナルに次の情報が出力されます。OTBR が FTD Joiner から hello
メッセージを受信します。これは UDP 通信が成功したことを意味します。
> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello
8. 完了
これで、簡単な Thread ネットワークを作成し、このネットワーク内の通信を検証できました。
学習しました。
- Telink Zephyr 開発環境を構築して使用する方法。
ot-cli-ftd
バイナリとot-rcp
バイナリをビルドし、Telink B91 開発ボードに書き込む方法。- Docker を使用して Raspberry Pi 3B 以降のバージョンを OpenThread ボーダー ルーター(OTBR)として設定する方法。
- OTBR で Thread ネットワークを作成する方法
- 帯域外コミッショニングを通じて Thread ネットワークにデバイスを追加する方法
- Thread ネットワーク内のノード間の接続を確認する方法。
関連情報
以下のような OpenThread リソースについて詳しくは、openthread.io と GitHub をご覧ください。
- 対応プラットフォーム - OpenThread をサポートするすべてのプラットフォーム
- OpenThread をビルドする - OpenThread のビルドと構成の詳細
- Thread Primer — この Codelab で取り上げた Thread のコンセプトをすべてカバーします。
参照ドキュメント: