B91 開発ボードと OpenThread を使用して Thread ネットワークを構築する

1. はじめに

26b7f4f6b3ea0700.png

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 Border Router(OTBR)と 1 つの Thread デバイスを含むハードウェア設定を示しています。

codelab_overview.png

学習内容

  • Telink Zephyr 開発環境を使用して OpenThread 実装を設定します。
  • OpenThread CLI サンプル(ot-cli-ftdot-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 では を使用して説明しますが、その他のターミナル ソフトウェアも使用できます。

この Codelab では、2 セットの B91 開発キットが必要です。下の写真は、1 セットに必要な最小限のコンポーネントを示しています。

overview.png

これらのキットの 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. ファームウェアを設定する

Linux マシンで CLI ターミナルを開き、次のコマンドを実行して APT が最新の状態であることを確認します。

$ sudo apt update
$ sudo apt upgrade

完了したら、次の手順に進みます。

  1. 依存関係をインストールします。
    $ 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
    
    Zephyr では現在、CMake(3.20.0)、Python3(3.6)、Devicetree Compiler(1.4.6)などのメインの依存関係の最小バージョンが必要です。
    $ cmake --version
    $ python3 --version
    $ dtc --version
    
    次の手順に進む前に、システムにインストールされているバージョンを確認します。バージョンが正しくない場合は、APT ミラーを安定した最新のミラーに切り替えるか、これらの依存関係を手動で更新します。
  2. west をインストールします。
    $ pip3 install --user -U west
    $ echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
    $ source ~/.bashrc
    
    ~/.local/bin$PATH 環境変数に含まれていることを確認します。
  3. Zephyr Project のソースコードを取得します。
    $ west init ~/zephyrproject
    $ cd ~/zephyrproject
    $ west update
    $ west blobs fetch hal_telink
    $ west zephyr-export
    
  4. Zephyr 用の追加の Python 依存関係をインストールします。
    $ pip3 install --user -r ~/zephyrproject/zephyr/scripts/requirements.txt
    
  5. Zephyr ツールチェーンを設定します。Zephyr ツールチェーン(約 1 ~ 2 GB)をローカル ディレクトリにダウンロードして、ほとんどのボードをフラッシュできるようにします。
    $ 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
    
    Zephyr SDK をダウンロードし、以下に示す推奨パスに配置します。
    $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]
    
    [-x.y.z] は任意のテキスト(-0.16.1 など)を指定できる省略可能なテキストです。SDK のインストール後にディレクトリを移動することはできません。次に、Zephyr ツールチェーンをインストールします。
    $ 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
    
  6. Hello World の例をビルドします。まず、Hello World の例を使用して、公式の Zephyr プロジェクト構成が正しいことを確認してから、カスタム プロジェクトの設定に進みます。
    $ cd ~/zephyrproject/zephyr
    $ west build -p auto -b tlsr9518adk80d samples/hello_world
    
    West ビルドコマンドを使用して、Zephyr リポジトリのルート ディレクトリから hello_world の例をビルドします。zephyr.bin という名前のファームウェアは build/zephyr directory にあります。
  7. Zephyr 環境スクリプトを ~/.bashrc に追加します。次のコマンドを実行します。
    $ echo "source ~/zephyrproject/zephyr/zephyr-env.sh" >> ~/.bashrc
    $ source ~/.bashrc
    
  8. 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 ツールをダウンロードし、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

コンパイル方法は次のとおりです。

  1. ラジオ コプロセッサ(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
    
  2. 対話型コマンドラインを備えたフル機能の Thread デバイス(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 開発ボードを Burning Board に接続します。

connection_overview.png

コマンドラインで次のコマンドを実行して、ファームウェアの書き込みを行います(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 ポートに直接接続します。

usb_connection.png

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

uart_console.png

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 ポートに接続します。

OTBR_overview.png

Raspberry Pi

  1. Raspbian Bullseye Lite OS イメージまたは Raspbian Bullseye with Desktop が SD カードに正しく書き込まれていることを確認します。
  2. Raspberry Pi に SSH で接続するか、Raspbian Desktop を直接操作するかを選択できます。この Codelab では SSH を使用します。
  3. 次のステップで OTBR Docker をインストールする前に、必ずローカル リポジトリとパッケージ マネージャーを更新してください。
    $ sudo apt-get update
    $ sudp apt-get upgrade
    

Docker のインストール

前の手順でローカル リポジトリとパッケージ マネージャー APT を更新した場合は、Raspberry Pi を再起動してから SSH ターミナル ウィンドウを開きます。

  1. Docker をインストールします。
    $ curl -sSL https://get.docker.com | sh
    
  2. 現在のユーザーを Docker グループに追加して権限を付与し、各コマンドの前に sudo を追加する必要がないようにします。
    $ sudo usermod -aG docker $USER
    
    変更を有効にするには、Raspberry Pi を再起動する必要があります。
  3. Docker が起動していない場合は、起動します。
    $ sudo dockerd
    
  4. OTBR ファイアウォール スクリプトは、Docker コンテナ内にルールを生成します。その前に、modprobe を実行して iptables のカーネル モジュールを読み込みます。
    $ sudo modprobe ip6table_filter
    

Docker を構成して実行する

この Codelab では、OpenThread Docker Hub から OTBR Docker イメージを直接 pull します。このイメージは OpenThread チームによってテストされ、検証されています。

  1. 最新のイメージを pull します。
    $ docker pull openthread/otbr:latest
    
  2. Docker コンテナのイメージリストを確認します。
    $ docker images
    REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
    openthread/otbr   latest    db081f4de15f   6 days ago   766MB
    
  3. /dev を確認して RCP デバイスのシリアルポート名を特定します。ttyACM0 は RCP が正しく接続されていることを示します。
    $ ls /dev/tty*
    ...
    /dev/ttyACM0
    ... 
    
  4. 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
    
  5. 新しい 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

dataset init new

新しいランダム ネットワーク データセットを作成します。

完了

2

dataset commit active

新しいデータセットを不揮発性ストレージの Active Operational Dataset に commit します。

完了

3

ifconfig up

IPv6 インターフェースを起動します。

完了

4

thread start

Thread プロトコルの動作を有効にして、Thread ネットワークに接続します。

完了

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

5

state

デバイスの状態を確認します。このコマンドは、リーダーになり、次のステップに進むまで複数回呼び出すことができます。

leader
完了

6

dataset active

完全なアクティブ オペレーショナル データセットを確認し、ネットワーク キーを記録します。

Active Timestamp: 1
Channel: 13
Channel Mask: 0x07fff800
Ext PAN ID: b07476e168eda4fc
Mesh Local Prefix: fd8c:60bc:a98:c7ba::/64
Network Key: c312485187484ceb5992d2343baaf93d
Network Name: OpenThread-599c
PAN ID: 0x599c
PSKc: 04f79ad752e8401a1933486c95299f60
Security Policy: 672 onrc 0
Done

ot-cli-ftd デバイスがこの Thread ネットワークに参加するときには、ネットワークの作成時に OTBR によってランダムに生成されたネットワーク キーが使用されます。

アウトオブバンド コミッショニングで FTD Joiner を Thread に追加する

アウトオブバンド コミッショニングとは、ネットワークに参加するデバイスに、ワイヤレス以外の方法(OpenThread CLI での手動入力など)でネットワーク認証情報を送信することを指します。FTD Joiner のシリアル コンソールで、次のコマンドを順番に入力します。

インデックス

コマンド

はじめに

想定されるレスポンス

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

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

完了

2

ot dataset commit active

新しいデータセットを不揮発性ストレージの Active Operational Dataset に commit します。

完了

3

ot ifconfig up

IPv6 インターフェースを起動します。

完了

4

ot thread start

Thread プロトコルの動作を有効にして、Thread ネットワークに接続します。

完了

デバイスが参加して構成されるまで 20 秒ほど待ちます。

5

ot state

デバイスの状態を確認します。

child/router
完了

トポロジ

SSH ターミナルで ipaddrchild tablerouter 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 の RLOC160xb000 で、FTD Joiner の RLOC16 は最初は 0xb001 です。その後、FTD Joiner の RLOC16 は、ルーター ID を取得すると 0x8400 になります。FTD Joiner が子からルーターにアップグレードされていることがわかります。

現在の Thread ネットワークには 2 つのノードが含まれており、トポロジは下の図のようになっています。

topology.png

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.ioGitHub で、以下を含むさまざまな OpenThread リソースをご確認ください。

参考ドキュメント: