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 ボーダー ルーター(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 では、B91 開発キットが 2 セット必要です。下の写真は、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. 対話型コマンドライン(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 に接続します。

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-ftdot-rcp バイナリをビルドし、Telink B91 開発ボードに書き込む方法。
  • Docker を使用して Raspberry Pi 3B+ 以降のバージョンを OpenThread Border Router(OTBR)として設定する方法。
  • OTBR で Thread ネットワークを作成する方法。
  • アウトオブバンド コミッショニングを使用して Thread ネットワークにデバイスを追加する方法。
  • Thread ネットワーク内のノード間の接続を確認する方法。

関連情報

openthread.ioGitHub で、次の OpenThread リソースについてご確認ください。

参考ドキュメント: