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

1. 소개

26b7f4f6b3ea0700.png

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

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

Telink는 Zephyr RTOS에 OpenThread 구현을 통합하여 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 보더 라우터 (OTBR)를 설정합니다.
  • OTBR에 스레드 네트워크를 생성하기 위해
  • 대역 외 디버깅을 사용하여 스레드 네트워크에 기기를 추가합니다.
  • CLI를 사용하여 스레드 네트워크의 노드 간 연결 검증

필요한 항목

하드웨어:

  • B91 개발 보드 2개.
  • 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 (무선 공동 프로세서)로 사용되고 다른 키트는 FTD (Full Thread Device)로 사용됩니다. 아직 키트를 소유하지 않은 경우 Telink 공식 웹사이트에서 자세한 내용을 확인하세요. 사용할 일부 구성요소는 다음과 같습니다.

색인

이름

1

Telink B91 개발 보드

2

Telink Burning Board

3

2.4Ghz 안테나

4

USB 케이블 (USB A to Mini USB)

Raspbian OS 이미지가 포함된 Raspberry Pi 3B 이상

이 Codelab에서는 Raspbian Bullseye Lite OS 이미지 또는 데스크톱 기반 Raspbian Bullseye를 사용하는 Raspberry Pi 3B 이상이 필요합니다. 이더넷을 통해 인터넷에 연결되며 OpenThread 보더 라우터 (OTBR)의 호스트로 구성됩니다.

네트워크 연결

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

LinuxBDT

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

기타

  • Git: Telink Zephyr 개발 환경을 설정합니다.
  • 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~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 Doc – 시작 가이드를 참조하세요.

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 인터페이스를 통해 Burning Board를 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 Joiner 기기의 직렬 콘솔 구성

그림과 같이 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가 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

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

leader
Done

6

dataset active

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











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

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

대역 외 커미셔닝이란 비무선 방식 (예: 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 Joiner의 RLOC16는 초기에 0xb001입니다. 그러면 라우터 ID를 획득한 후 FTD Joiner의 RLOC160x8400가 됩니다. FTD Joiner가 하위 항목에서 라우터로 업그레이드된 것을 볼 수 있습니다.

현재 스레드 네트워크에는 2개의 노드가 있고 토폴로지는 아래 그림과 같습니다.

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의 직렬 콘솔에 다음 명령어를 입력하여 핑 작업을 실행합니다.

> 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 Joiner가 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 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. 축하합니다

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

이제 다음 내용을 알게 되었습니다.

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

추가 자료

openthread.ioGitHub에서 다음을 포함한 다양한 OpenThread 리소스에 관해 알아보세요.

참조 문서: