1. はじめに

OpenThread は、Thread® ネットワーキング プロトコルのオープンソース実装です。これは、モノのインターネット(IoT)デバイス向けに設計された堅牢で安全なワイヤレス メッシュ ネットワーキング プロトコルです。OpenThread は Google の Nest チームによって開発され、オープンソース プロジェクトとしてデベロッパー コミュニティに無料で提供されています。
Thread 仕様は、スマートホームや商業ビルでよく見られるリソース制約のあるデバイス向けに、信頼性が高く、安全で、エネルギー効率の高いワイヤレス通信プロトコルを確立します。OpenThread には、IPv6、6LoWPAN、MAC セキュリティ付き IEEE 802.15.4、メッシュリンクの確立、メッシュ ルーティングなど、Thread 内のネットワーク レイヤのスコープ全体が含まれています。
Telink は OpenThread 実装を Zephyr RTOS に統合し、Telink ハードウェアとのシームレスな互換性を実現しました。この統合のソースコードは GitHub で簡単に入手でき、ソフトウェア開発キット(SDK)としても提供されています。
この Codelab では、実際のハードウェアで OpenThread をプログラミングし、Thread ネットワークを作成して管理し、ノード間でメッセージを交換します。下の図は、Codelab の OT ボーダー ルーター(OTBR)と 1 つの Thread デバイスを備えたハードウェア設定を示しています。

学習内容
- Telink Zephyr 開発環境を使用して OpenThread 実装を設定します。
- OpenThread CLI サンプル(
ot-cli-ftdとot-rcp)をビルドして、Telink B91 開発ボードに書き込む。 - Raspberry Pi 3B+ 以降で Docker を使用して OpenThread Border Router(OTBR)を設定します。
- OTBR で Thread ネットワークを作成するには:
- アウトオブバンド デバッグを使用して Thread ネットワークにデバイスを追加する。
- CLI を使用して Thread ネットワーク内のノード間の接続を検証します。
必要なもの
ハードウェア:
- 2 つの B91 開発ボード。
- Raspbian OS イメージがインストールされた Raspberry Pi 3B+ 以降。
- USB ポートが 2 つ以上ある Linux マシン。
- インターネットに接続されたスイッチ(またはルーター)と複数のイーサネット ケーブル。
ソフトウェア:
- Telink Burning and Debugging Tool —— 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 を制御します。この Codelab では を使用して説明しますが、その他のターミナル ソフトウェアも使用できます。
Telink B91 Development Kit
この Codelab では、B91 開発キットが 2 セット必要です。下の写真は、1 セットに必要な最小限のコンポーネントを示しています。

これらのキットの 1 つは RCP(Radio Co-Processor)として使用され、もう 1 つは FTD(Full Thread Device)として機能します。キットをお持ちでない場合は、Telink の公式ウェブサイトで詳細をご確認ください。使用するコンポーネントは次のとおりです。
インデックス | 名前 |
1 | Telink B91 開発ボード |
2 | Telink Burning Board |
3 | 2.4Ghz アンテナ |
4 | USB ケーブル(USB A - ミニ USB) |
Raspbian OS イメージを搭載した Raspberry Pi 3B+ 以降
この Codelab では、Raspbian Bullseye Lite OS イメージまたは Raspbian Bullseye with Desktop を搭載した Raspberry Pi 3B+ 以降が必要です。イーサネット経由でインターネットに接続され、OpenThread Border Router(OTBR)のホストとして構成されます。
ネットワーク接続
インターネットに接続されたスイッチ(またはルーター)と複数のイーサネット ケーブル。これらは Raspberry Pi を Linux マシンに接続するために使用され、ホスト経由で Raspberry Pi のユーザー構成を容易にします。
LinuxBDT
Telink Burning and Debugging Tool(BDT)は、すべての Telink チップシリーズに適用され、Telink B91 開発ボードで OpenThread ファームウェアを消去して書き込むことができます。Linux マシンに X86 ベースの Linux バージョン linuxBDT をインストールします。
その他
- Telink Zephyr 開発環境の設定に使用する Git。
- 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 Project のソースコードを取得します。
$ 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 ビルドコマンドを使用して、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 – Getting Started Guide をご覧ください。
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
Burning Board を USB インターフェース経由で Linux マシンに接続し、次のコマンドを入力します。
$ 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)を備えたフル機能の Thread デバイス$ 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 開発ボードを Burning Board に接続します。

コマンドラインで次のコマンドを実行して、ファームウェアの書き込みを行います(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」、ot-rcp でフラッシュされたボードに「RCP」というラベルを付けます。
4. FTD Joiner デバイスのシリアル コンソールを構成する
図に示すように、FTD Joiner を Linux マシンの USB ポートに直接接続します。

FTD Joiner Device を Linux マシンに接続したら、PuTTY を開きます。次に、新しいターミナルを作成し、シリアルポート情報を設定して、シリアルポートを開きます。

OpenThread コマンドライン リファレンスは、OpenThread CLI リファレンスにあります。すべてのコマンドの先頭に ot を付けるようにしてください。
例:
> ot state disabled Done > ot channel 11 Done >
5. Raspberry Pi を OpenThread ボーダー ルーターとして設定する
OpenThread ボーダー ルーターは、次の 2 つの主要な部分で構成されるデバイスです。
- Raspberry Pi には、ボーダー ルーター(BR)として機能するために必要なすべてのサービスとファームウェアが含まれています。
- RCP は Thread 通信を担当します。
ラジオ コプロセッサ(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 では、OpenThread Docker Hub から OTBR Docker イメージを直接 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 |
| 新しいデータセットを不揮発性ストレージの Active Operational Dataset に commit します。 | 完了 | ||
3 |
| IPv6 インターフェースを起動します。 | 完了 | ||
4 |
| Thread プロトコルの動作を有効にして、Thread ネットワークに接続します。 | 完了 | ||
スレッド インターフェースが起動するまで 10 秒間待ちます。 | |||||
5 |
| デバイスの状態を確認します。このコマンドは、リーダーになって次のステップに進むまで複数回呼び出すことができます。 | leader | ||
6 |
| アクティブなオペレーショナル データセット全体を確認し、ネットワーク キーを記録します。 | Active Timestamp: 1 | ||
ot-cli-ftd デバイスがこの Thread ネットワークに参加するときには、ネットワークの作成時に OTBR によってランダムに生成されたネットワーク キーが使用されます。
帯域外コミッショニングで FTD Joiner を Thread に追加する
アウトオブバンド コミッショニングとは、ネットワークに参加するデバイスに、ワイヤレス以外の方法(OpenThread CLI での手動入力など)でネットワーク認証情報を送信することを指します。FTD Joiner のシリアル コンソールで、次のコマンドを順番に入力します。
インデックス | コマンド | はじめに | 想定される回答 | ||
1 |
| デバイスが Thread ネットワークに接続するには、ネットワーク キーのみが必要です。 | 完了 | ||
2 |
| 新しいデータセットを不揮発性ストレージの Active Operational Dataset に commit します。 | 完了 | ||
3 |
| IPv6 インターフェースを起動します。 | 完了 | ||
4 |
| Thread プロトコルの動作を有効にして、Thread ネットワークに接続します。 | 完了 | ||
デバイスが参加して構成されるまで 20 秒ほど待ちます。 | |||||
5 |
| デバイスの状態を確認します。 | child/router | ||
トポロジ
SSH ターミナルで ipaddr、child table、router table などのコマンドを入力すると、次のコード スニペットのようなレスポンスが返されます。
> 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 です。その後、FTD Joiner の RLOC16 は、ルーター ID を取得すると 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 の Mesh-Local 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 Border Router(OTBR)として設定する方法。
- OTBR で Thread ネットワークを作成する方法。
- アウトオブバンド コミッショニングを使用して Thread ネットワークにデバイスを追加する方法。
- Thread ネットワーク内のノード間の接続を確認する方法。
関連情報
openthread.io と GitHub で、次の OpenThread リソースについてご確認ください。
- 対応プラットフォーム - OpenThread をサポートするすべてのプラットフォームを確認する
- OpenThread をビルドする - OpenThread のビルドと構成に関する詳細
- Thread の概要 - この Codelab で取り上げる Thread のコンセプトをすべて説明しています
参考ドキュメント: