B91 개발 보드 및 OpenThread로 스레드 네트워크 빌드

1. 소개

26b7f4f6b3ea0700.png

OpenThread는 사물 인터넷 (IoT) 기기용으로 설계된 강력하고 안전한 무선 메시 네트워킹 프로토콜인 Thread® 네트워킹 프로토콜의 오픈소스 구현입니다. OpenThread는 Google Nest팀에서 개발했으며 오픈소스 프로젝트로 개발자 커뮤니티에서 무료로 사용할 수 있습니다.

스레드 사양은 스마트 홈과 상업용 건물에서 흔히 볼 수 있는 리소스 제약이 있는 기기를 위한 안정적이고 안전하며 에너지 효율적인 무선 통신 프로토콜을 규정합니다. OpenThread는 스레드 내의 전체 네트워크 레이어 범위(예: MAC 보안, 메시 링크 설정, 메시 라우팅을 갖춘 IPv6, 6LoWPAN, IEEE 802.15.4)를 포함합니다.

Telink는 OpenThread 구현을 Zephyr RTOS에 통합하여 Telink 하드웨어와의 원활한 호환성을 실현했습니다. 이 통합의 소스 코드는 GitHub에서 쉽게 액세스할 수 있으며 소프트웨어 개발 키트 (SDK)로도 제공됩니다.

이 Codelab에서는 실제 하드웨어에서 OpenThread를 프로그래밍하고, 스레드 네트워크를 만들고 관리하며, 노드 간에 메시지를 교환합니다. 아래 이미지는 Codelab의 OT 보더 라우터 (OTBR)와 하나의 스레드 기기를 사용하는 하드웨어 설정을 보여줍니다.

codelab_overview.png

학습할 내용

  • Telink Zephyr 개발 환경을 사용하여 OpenThread 구현 설정
  • OpenThread CLI 샘플 (ot-cli-ftdot-rcp)을 빌드하고 Telink B91 개발 보드에 플래시하려면
  • Raspberry Pi 3B 이상에서 Docker를 사용하여 OpenThread Border Router (OTBR)를 설정하는 방법
  • OTBR에서 스레드 네트워크를 만듭니다.
  • 대역 외 디버깅을 사용하여 스레드 네트워크에 기기 추가
  • CLI를 사용하여 스레드 네트워크의 노드 간 연결을 검증합니다.

필요한 항목

하드웨어:

  • 두 개의 B91 개발 위원회가 있습니다.
  • Raspbian OS 이미지가 설치된 Raspberry Pi 3B 이상 1개.
  • USB 포트가 2개 이상인 Linux 시스템.
  • 인터넷 연결 스위치 (또는 라우터)와 여러 이더넷 케이블

소프트웨어:

  • Telink 버닝 및 디버깅 도구 — LinuxBDT입니다.
  • PuTTY와 같은 직렬 포트 터미널 도구
  • 다른 도구로는 Git 및 West가 있습니다

2. 기본 요건

스레드 개념 및 OpenThread CLI

이 Codelab 전에 OpenThread 시뮬레이션 Codelab을 살펴보면서 기본적인 스레드 개념과 OpenThread CLI를 숙지하는 것이 좋습니다.

Linux 머신

Linux 머신 (Ubuntu v20.04 LTS 이상)은 Telink Zephyr 개발 환경을 설정하고 모든 스레드 개발 보드를 플래시하는 빌드 머신 역할을 합니다. 이러한 작업을 수행하려면 Linux 시스템에 두 개의 USB 포트와 인터넷 연결이 필요합니다.

직렬 포트 연결 및 터미널

기기를 Linux 시스템의 USB 포트에 직접 연결할 수 있습니다. 또한 기기에 액세스하려면 직렬 포트 터미널 도구가 필요합니다.

이 Codelab에서는 터미널 도구 PuTTY를 사용하여 FTD Joiner와 Raspberry Pi를 제어합니다. 사용 개요를 제공하지만 다른 터미널 소프트웨어를 사용할 수도 있습니다.

이 Codelab에는 두 개의 B91 개발 키트 세트가 필요합니다. 아래 사진은 하나의 세트에 최소 필수 구성요소가 표시되어 있습니다.

overview.png

이 키트 중 하나는 RCP (Radio Co-Processor)로 사용되고 다른 하나는 FTD (Full Thread Device)로 작동합니다. 아직 키트를 소지하지 않았다면 Telink 공식 웹사이트에서 자세한 내용을 확인하실 수 있습니다. 사용할 몇 가지 구성요소는 다음과 같습니다.

색인

이름

1

Telink B91 개발 위원회

2

텔링크 버닝 보드

3

2.4Ghz 안테나

4

USB 케이블 (USB A to 미니 USB)

Raspbian OS가 설치된 Raspberry Pi 3B 이상

이 Codelab에서는 Raspbian Bullseye Lite OS 이미지 또는 Raspbian Bullseye with Desktop이 포함된 Raspberry Pi 3B 이상이 필요합니다. 이더넷을 통해 인터넷에 연결되며 OpenThread 보더 라우터 (OTBR)의 호스트로 구성됩니다.

네트워크 연결

인터넷 연결 스위치 (또는 라우터)와 여러 이더넷 케이블 Raspberry Pi를 Linux 머신에 연결하여 호스트를 통해 Raspberry Pi의 사용자 구성을 용이하게 하는 데 사용합니다.

LinuxBDT

모든 Telink 칩 시리즈에 적용되는 Telink 버닝 및 디버깅 도구 (BDT)를 사용하면 OpenThread 펌웨어를 지우고 Telink B91 개발 보드에 플래시할 수 있습니다. Linux 시스템에 X86 기반 Linux 버전 linuxBDT를 설치합니다.

기타

  • Telink Zephyr 개발 환경을 설정하는 Git
  • 웨스트, 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 프로젝트 소스 코드를 가져옵니다.
    $ 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~2GB)을 로컬 디렉터리에 다운로드하세요.
    $ 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 예를 빌드합니다. build/zephyr directory에서 zephyr.bin라는 펌웨어를 찾을 수 있습니다.
  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 문서 – 시작 가이드를 참조하시기 바랍니다.

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 머신에 연결한 후 다음 명령어를 입력합니다.

$ 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에서는 두 가지 유형의 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)
    $ 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 개발 보드를 버닝 보드에 연결합니다.

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의 플래시 메서드와 동일합니다. 그러나 펌웨어 경로와 이름에 차이가 있습니다.

플래시 후에는 두 개의 B91 개발 보드를 적절하게 표시하여 구별합니다. ot-cli-ftd로 플래시된 보드에는 'FTD Joiner'로 라벨을 지정하고 ot-rcp로 플래시된 보드에는 'RCP'라는 라벨을 지정합니다.

4. FTD 연결자 기기에 대한 직렬 콘솔 구성

그림과 같이 FTD Joiner를 Linux 머신의 USB 포트에 직접 연결합니다.

usb_connection.png

FTD Joiner 기기를 Linux 시스템에 연결한 후 PuTTY를 엽니다. 그런 다음 새 터미널을 만들고 직렬 포트 정보를 설정한 후 직렬 포트를 엽니다.

uart_console.png

OpenThread 명령줄 참조는 OpenThread CLI 참조에 있습니다. 모든 명령어에 ot 접두사를 붙여야 합니다.

예:

> ot state
disabled
Done
> ot channel
11
Done
>

5. Raspberry Pi를 OpenThread 보더 라우터로 설정

OpenThread 보더 라우터는 두 가지 주요 부분으로 구성된 기기입니다:

  • Raspberry Pi에는 보더 라우터 (BR)로 작동하는 데 필요한 모든 서비스와 펌웨어가 포함되어 있습니다.
  • RCP는 스레드 통신을 담당합니다.

무선 공동 프로세서(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. 각 명령어 앞에 sudo를 추가할 필요가 없도록 현재 계정을 Docker 그룹에 넣어 권한을 부여합니다.
    $ 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 이미지를 직접 가져옵니다. 이 이미지는 OpenThread팀의 테스트 및 확인을 거쳤습니다.

  1. 최신 이미지 가져오기:
    $ 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이 준비되었으며 다음 단계를 진행하여 스레드 네트워크를 빌드할 수 있습니다.

6. 스레드 네트워크 만들기

RCP에서 스레드 네트워크 만들기

OTBR에서 ot-ctl 셸을 사용하여 스레드 네트워크를 설정합니다. 이전 섹션에서 셸을 종료했다면 다음 명령어를 입력하여 SSH 터미널에서 다시 시작합니다.

$ docker exec -ti otbr sh -c "sudo ot-ctl"

그런 다음 표에 지정된 순서대로 명령어를 입력하고 다음 단계로 진행하기 전에 각 단계에서 예상 결과가 나오는지 확인합니다.

색인

명령어

소개

예상 응답

1

dataset init new

새 임의 네트워크 데이터 세트를 만듭니다.

완료

2

dataset commit active

비휘발성 스토리지의 활성 작업 데이터 세트에 새 데이터 세트를 커밋합니다.

완료

3

ifconfig up

IPv6 인터페이스를 표시합니다.

완료

4

thread start

스레드 프로토콜 작업을 사용 설정하고 스레드 네트워크에 연결합니다.

완료

스레드 인터페이스가 실행될 때까지 10초간 기다립니다.

5

state

기기 상태를 확인합니다.이 명령어는 리더가 되어 다음 단계로 넘어갈 때까지 여러 번 호출할 수 있습니다.

리더
완료

6

dataset active

전체 활성 운영 데이터 세트를 확인하고 네트워크 키를 기록하세요.

활성 타임스탬프: 1
채널: 13
채널 마스크: 0x07fff800
외부 PAN ID: b07476e168eda4fc
메시 로컬 프리픽스: fd8c:60bc:a98:c7ba::/64
네트워크 키: c312489187494ceb3450c312485187494ceb3459




네트워크 생성 중에 OTBR에서 무작위로 생성한 네트워크 키는 ot-cli-ftd 기기가 이 스레드 네트워크에 연결될 때 사용됩니다.

대역 외 커미셔닝을 통해 스레드에 FTD 연결자 추가

대역 외 커미셔닝이란 네트워크 연결 대기 중인 기기로 비무선 방식 (예: OpenThread CLI에 수동으로 입력)을 통해 네트워크 사용자 인증 정보를 전송하는 것을 의미합니다. 직렬 콘솔에서 FTD Joiner에 다음 명령어를 순서대로 입력합니다.

색인

명령어

소개

예상 응답 수

1

ot dataset networkkey c312485187484ceb5992d2343baaf93d

기기를 스레드 네트워크에 연결하려면 네트워크 키만 있으면 됩니다.

완료

2

ot dataset commit active

비휘발성 스토리지의 활성 작업 데이터 세트에 새 데이터 세트를 커밋합니다.

완료

3

ot ifconfig up

IPv6 인터페이스를 표시합니다.

완료

4

ot thread start

스레드 프로토콜 작업을 사용 설정하고 스레드 네트워크에 연결합니다.

완료

기기가 조인되고 구성되는 동안 20초 동안 기다립니다.

5

ot state

기기 상태를 확인합니다.

하위/라우터
완료

토폴로지

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의 RLOC160xb000이며, FTD 연결자의 RLOC16는 처음에 0xb001입니다. 그러면 라우터 ID를 가져온 후 FTD 연결자의 RLOC160x8400가 됩니다. FTD Joiner가 하위 요소에서 라우터로 업그레이드되었음을 알 수 있습니다.

현재 스레드 네트워크에는 두 개의 노드가 포함되어 있으며 토폴로지는 아래 그림과 같습니다.

topology.png

7. 스레드 기기 간 통신

ICMPv6 통신

ping 명령어를 사용하여 동일한 네트워크의 스레드 기기가 서로 통신할 수 있는지 확인합니다. 먼저 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 측이 핑 요청을 수신했으며 FTD 연결자가 OTBR에서 반환한 핑 응답을 수신했음을 나타냅니다. 두 기기 간의 통신에 성공합니다.

UDP 통신

OpenThread에서 제공하는 애플리케이션 서비스에는 UDP도 포함됩니다. UDP API를 사용하여 스레드 네트워크의 노드 간에 정보를 전달하거나 보더 라우터를 통해 외부 네트워크에 정보를 전달할 수 있습니다. OpenThread의 UDP API에 관한 자세한 내용은 OpenThread CLI - UDP 예를 참고하세요. 이 Codelab에서는 일부 API를 사용하여 OTBR과 FTD Joiner 간에 정보를 전송합니다.

먼저 OTBR의 메시-로컬 EID를 가져옵니다. 이 주소는 스레드 기기의 IPv6 주소 중 하나이며 동일한 스레드 네트워크 파티션의 스레드 기기에 액세스하는 데 사용될 수 있습니다.

> ipaddr mleid
fd8c:60bc:a98:c7ba:5249:34ab:26d1:aff6
Done

SSH 터미널에 다음 명령어를 입력하여 OTBR UDP를 사용 설정하고 기기의 1022 포트를 바인딩합니다.

> udp open
Done
> udp bind :: 1022
Done

직렬 콘솔에 다음 명령어를 입력하고 FTD 연결자의 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 연결자로부터 hello 메시지를 수신하며, 이는 UDP 통신이 성공했음을 의미합니다.

> 5 bytes from fd8c:60bc:a98:c7ba:9386:63cf:19d7:5a61 1022 hello

8. 축하합니다

간단한 스레드 네트워크를 만들고 이 네트워크 내의 통신을 확인했습니다.

지금까지 배운 내용은 다음과 같습니다.

  • Telink Zephyr 개발 환경을 빌드하고 사용하는 방법입니다.
  • ot-cli-ftdot-rcp 바이너리를 빌드하고 Telink B91 개발 보드에 플래시하는 방법
  • Docker를 사용하여 Raspberry Pi 3B 이상 버전을 OpenThread Border Router (OTBR)로 설정하는 방법
  • OTBR에서 스레드 네트워크를 만드는 방법
  • 대역 외 커미셔닝을 통해 스레드 네트워크에 기기를 추가하는 방법
  • 스레드 네트워크에서 노드 간 연결을 확인하는 방법

추가 자료

openthread.ioGitHub를 확인하여 다음과 같은 다양한 OpenThread 리소스에 관해 알아보세요.

참조 문서: