Simplicity Studio v5를 사용하여 Silicon Labs EFR32 보드 및 OpenThread로 스레드 네트워크 구축

1. 소개

26b7f4f6b3ea0700.png

구글의 OpenThread (OT)는 스레드의 오픈 소스 구현입니다. Google은 Connected Home 및 상업용 건물을 위한 제품 개발을 가속화하기 위해 개발자가 Google Nest 제품에 사용되는 네트워킹 기술을 보다 광범위하게 사용할 수 있도록 OpenThread를 출시했습니다. 좁은 플랫폼 추상화 계층과 작은 메모리 공간을 가진 OpenThread는 이식성이 높습니다. SoC(System-on-Chip) 및 NCP(Network Co-Processor) 설계를 모두 지원합니다.

나사 규격은 가정용 및 상업용 건물 애플리케이션을위한 IPv6 기반 신뢰성, 보안, 저전력 무선 장치 간 통신 프로토콜을 정의합니다.

실리콘 랩은 실리콘 랩의 하드웨어 사업에 OpenThread을 강화했다. 이 소스 코드는 GitHub 및 Simplicity Studio 5(SSv5)와 함께 설치된 SDK(소프트웨어 개발 키트)에서 사용할 수 있습니다. SDK에는 GitHub 소스 코드의 완전히 테스트된 스냅샷이 포함되어 있습니다. GitHub 버전보다 더 광범위한 하드웨어를 지원하며 GitHub에서 사용할 수 없는 설명서와 예제 애플리케이션을 포함합니다.

이 가이드는 Silicon Labs OpenThread SDK 및 Simplicity Studio 5를 사용하여 OpenThread 애플리케이션 개발을 시작하는 방법을 설명합니다. 아래 이미지는 보드(BRD)와 하드웨어가 OTBR(OT Border Router) 및 코드랩.

EFR32MG 하드웨어 설정

배울 내용

  • Silicon Labs Simplicity Studio IDE를 사용하여 OpenThread 프로젝트를 만드는 방법.
  • OpenThread CLI 바이너리를 빌드하고 Silicon Labs 라디오 보드에 플래시하는 방법.
  • Docker를 사용하여 Raspberry Pi 3B+ 이상을 OTBR(OpenThread Border Router)로 설정하는 방법.
  • OTBR에서 스레드 네트워크를 만드는 방법.
  • 스레드 네트워크에 대한 장치의 대역 외 커미셔닝.
  • ping 명령을 사용하여 노드 간의 스레드 통신을 확인하는 방법입니다.

2. 전제 조건

하드웨어:

  1. 3 EFR32MGxx 무선 보드 - 이러한 장치의 모든 조합을 사용할 수 있습니다. 이 코드랩은 BRD4166A를 RCP로 사용하고 2개의 BRD4168A를 전체 스레드 장치로 사용합니다.
    • EFR32MG12 (BRD 4161A, BRD 4166A, BRD 4170A, BRD 4304 A)
    • EFR32MG13 (BRD 4168A)
    • EFR32MG21 (BRD 4180A, BRD 4180B)
    당신이 신선한를 시작하는 경우, 당신은 하나 얻을 수 EFR32 스레드 스타터 키트 위에 나열된 보드를 가지고있다.
  2. BRD4001A: 무선 스타터 메인 보드(WSTK)는 라디오 보드를 호스팅합니다. BRD4166A를 제외한 모든 라디오 보드에는 각각 스타터 메인 보드가 필요합니다. BRD4166A용 메인 보드 또는 마이크로 USB 케이블을 연결하고 전원을 공급하기 위한 미니 USB 케이블.

WSTK AEM

  1. 라즈베리 파이 (b) + 나에 큰 Raspbian 스트레치 라이트 OS 이미지 또는 데스크톱 Raspbian 스트레치 이더넷을 통해 인터넷에 연결되어 있습니다. 이것을 OT 경계 라우터로 구성합니다.
  2. 최소 2개의 USB 포트와 인터넷 연결이 있는 Windows/Linux/Mac 호스트 시스템. 에서 하드웨어와 OS 요구 사항 확인 SSv5을 .
  3. Raspberry Pi를 인터넷에 연결하기 위한 하나 이상의 이더넷 케이블. WSTK는 또한 IP를 통한 디버그 및 플래시를 지원하므로 선택적으로 추가 이더넷 케이블을 사용하여 이더넷 스위치를 통해 WSTK를 호스트 시스템에 연결할 수 있습니다.

소프트웨어:

  • Windows/Linux/Mac 호스트 시스템에 Simplicity Studio v5 설치 및 업데이트
    • GNU ARM v7.2.1 도구 모음
    • Gecko SDK Suite 3.2.0 이상 및 Silicon Labs OpenThread SDK.

심플리시티 스튜디오 5 다운로드

3. 하드웨어 설정

이 Codelab은 다음을 사용하여 생성되었습니다.

  1. EFR32MG12 BRD4166A Thunderboard 감지 2 좌측에 표시한다.
  2. 두 EFR32MG13 BRD4168A은 같은 오른쪽에 표시.
  3. macOS Catalina 10.15.7에 설치된 Simplicity Studio v5
    1. 게코 SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

아래 그림과 같이 USB로 각 Wireless Starter Kit 메인 보드를 호스트 컴퓨터에 연결합니다. 이러한 연결은 RCP 및 최종 장치의 프로그래밍 및 네트워크 분석을 허용합니다. 먼저 호스트 컴퓨터를 사용하여 ot-rcp 펌웨어로 BRD4166A를 프로그래밍하고 결국 이를 Raspberry Pi에 연결합니다. 선택적으로 최종 장치는 공통 이더넷 스위치를 통해 호스트 컴퓨터에 연결될 수 있습니다. 스타터 키트는 IPv4를 통한 프로그래밍 및 네트워크 분석도 지원합니다.

사이

4. 펌웨어 설정

시작하는 방법에는 두 가지가 있습니다. 두 옵션 모두 이 코드랩에 필요한 펌웨어를 플래시할 수 있습니다.

  1. 프로젝트: (권장) 샘플 애플리케이션을 생성, 빌드 및 플래시합니다. 이 옵션을 사용하면 프로젝트에서 애플리케이션을 사용자 정의할 수 있습니다.또는
  2. 데모: (선택 사항) 모든 샘플 애플리케이션에 대해 라디오 보드에서 직접 사전 빌드된 데모를 플래시합니다. 사용자는 선택적인 연습으로 데모 펌웨어 설정을 시도하는 것이 좋습니다. 자세한 내용은 이 코드랩 끝에 있는 "옵션 펌웨어 설정 - 데모" 섹션을 참조하세요.

이 코드랩에서는 프로젝트 기반 방법을 사용합니다.

예제를 사용하여 프로젝트 만들기

우리는 두 개의 프로젝트를 만들 것입니다. ot-rcp BRD4166A에 대한 프로젝트와 ot-cli-ftd 두 BRD4168A을위한 프로젝트. 다음 단계에 따라 보드에 적합한 샘플 애플리케이션을 선택하십시오.

  1. 오픈 스튜디오의 파일 메뉴와 새> 실리콘 랩 프로젝트 마법사를 선택합니다. 대상, SDK 및 도구 체인 선택 대화 상자가 열립니다. OpenThread에서 지원하는 기본 Simplicity IDE/GNU 도구 모음을 변경하지 마십시오. 다음을 클릭합니다.
    • 대상 보드: 선택한 라디오 보드(BRD4168A)를 메인 보드(BRD4001A)와 함께 표시합니다.
    • 대상 장치: 이 필드는 온보드 마이크로컨트롤러 칩(MCU)을 보여줍니다. BRD4168A에는 EFR32MG13 MCU가 내장되어 있습니다.
    • SDK: 여기에서 작업 중인 OT의 SDK 버전을 선택할 수 있습니다. 이 코드랩에서는 OpenThread 1.2.0.0을 사용합니다.
    • IDE/ 도구 체인: OT 프로젝트를 컴파일하는 데 사용할 도구 체인입니다. 우리는 GNU ARM 7.2.1을 사용합니다.

새 프로젝트 마법사

  1. 예제 프로젝트 선택 대화 상자가 열립니다. 예제 프로젝트 목록이 표시됩니다. 이 경우, 특정 예를 검색 할 '스레드'기술 유형 및 키워드 필터를 사용하여 ot-cli-ftd . 를 선택하고 다음을 클릭합니다.

새 프로젝트 마법사 2단계

  1. 프로젝트 구성 대화 상자가 열립니다. 여기에서 프로젝트 이름을 바꾸고, 기본 프로젝트 파일 위치를 변경하고, 프로젝트 파일을 링크할지 또는 복사할지 결정할 수 있습니다. 링크된 프로젝트 파일은 SDK를 가리키며 모든 수정 사항은 SDK에서 이루어지고 향후 프로젝트에 사용됩니다. 프로젝트 소스를 복사하면 SDK 파일이 그대로 유지되도록 프로젝트 로컬 복사본을 편집할 수 있습니다. '링크 SDK 및 복사 프로젝트 소스는'기본 및 권장 선택입니다. 마침을 클릭합니다.

새 프로젝트 마법사 3단계

  1. 단순성 IDE 관점은 개요 탭에 프로젝트 구성자 공개 열립니다.

프로젝트 개요

이 프로젝트는 설치 및 구성 요소를 제거하고, 설치된 구성 요소를 구성하여 소프트웨어 구성 요소 탭에서 구성됩니다. 설치된 구성 요소가 확인됩니다. 예제 애플리케이션에 의해 설치된 구성 요소의 필터링 된 목록을 보려면 설치된 구성 요소를 클릭합니다. 변경 사항은 자동 저장되고 프로젝트 파일이 자동 생성됩니다. 진행률은 Simplicity IDE Perspective의 오른쪽 하단 모서리에 표시됩니다.

소프트웨어 구성 요소

이 데모에서는 샘플 애플리케이션의 기본 구성을 사용할 것입니다. 만들기 위의 단계를 반복 ot-rcp 다른 보드 프로젝트를.

프로젝트 빌드 및 플래시

빌드 모두 플래시 ot-rcpot-cli-ftd 프로젝트를.

  1. 프로젝트가 구성된 후, 상단의 도구 모음에서 빌드 제어 (해머 아이콘)을 클릭합니다. 또는 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 빌드를 클릭할 수 있습니다.

프로젝트 빌드 버튼

  1. 진행은 콘솔과 오른쪽 하단에서 진행 표시 줄에 표시됩니다. 프로젝트와 관련된 모든 오류 또는 경고도 이 출력 창에 나타납니다.

프로젝트 빌드 출력 창

  1. 바이너리 이미지는 성공적인 프로젝트 빌드 후에 생성됩니다. 당신은 프로젝트 탐색기보기에서 바이너리 이미지를 플래시 할 수 있습니다. 컴파일러 하위 디렉터리에서 .bin, .hex 또는 .s37 파일을 찾습니다. 파일을 마우스 오른쪽 단추로 클릭 한 다음 장치에 플래시를 선택합니다. 그런 다음 확인을 클릭, 프로그램 장치를 선택하여 연결된 하나 이상의 장치가있는 경우. 파일 경로가 채워진 상태로 Flash Programmer가 열립니다. 프로그램을 클릭합니다.

플래시

5. 펌웨어 설정 요약

이 시점에서 라디오 보드에서 적절한 펌웨어를 생성, 컴파일 및 플래시해야 합니다. 일단 ot-rcp BRD4166A에 번쩍되고, 호스트 시스템에서 분리하고, 라즈베리 파이에이 보드를 연결합니다.

이 섹션을 완료하면 스레드 네트워크 하드웨어 설정이 다음과 같이 보일 것입니다.

EFR32MG 설정

6. ot-cli-ftd 장치용 직렬 콘솔 설정

Devices (장치)보기 / 디버그 어댑터 창에서 J-링크 장치의 단순성 IDE 관점을 마우스 오른쪽 버튼으로 클릭에, 콘솔 인터페이스를 시작합니다. 시작 콘솔을 선택합니다. 콘솔에 프롬프트를 얻으려면, 직렬 1 개 탭하고 Enter를 선택합니다. FTD 노드의 상태를 확인합니다.

FTD 스튜디오 콘솔 보기

당신은 우리가 아직위한 콘솔이없는 것을 알 수 ot-rcp . 다음 단계에서 우리는 OT 경계 라우터로 라즈베리 파이를 구성하고의 콘솔 설정합니다 ot-rcp .

7. Raspberry Pi를 경계 라우터로 설정

Silicon Labs는 회사의 Docker 컨테이너를 OTBR과 함께 배포할 것을 권장합니다. 컨테이너에서 OTBR을 실행하면 쉽게 배포할 수 있는 아티팩트를 만들고 개발 프로토타이핑 및 테스트를 빠르게 수행할 수 있습니다.

Silicon Labs는 DockerHub에서 호스팅되는 다음과 같은 사전 빌드된 Docker 컨테이너(태그 포함)를 제공합니다.

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags

https://hub.docker.com/r/siliconlabsinc/openthread-backbone-border-router/tags

라즈베리파이 설정

  1. SD 카드에, 당신은 플래시 확인 Raspbian 스트레치 라이트 OS 이미지 또는 데스크톱 Raspbian 스트레치 .
  2. Raspberry Pi에 SSH로 연결하거나 Raspbian Desktop에서 직접 작업하도록 선택할 수 있습니다. 터미널을 엽니다.
  3. 반드시 해당 지역의 저장소 및 패키지 관리자 (apt-get을 업데이트 apt-get를 도커를 설치하기 전에 업그레이드)를 업데이트 할 수 있습니다.

도커 이미지 설치

  1. RPi에 다음 명령을 사용하여 Docker를 설치합니다.
    curl -sSL https://get.docker.com | sh
    
  2. 완료되면 각 명령 전에 sudo가 필요하지 않도록 Docker 사용자 설정을 수정할 수 있습니다. 재부팅이 필요합니다.
    sudo usermod -aG docker $USER
    
  3. 다음 명령을 실행하여 컨테이너를 설치하십시오. RCP로 한 번에 하나의 경계 라우터 컨테이너만 실행할 수 있습니다. 또한 이 컨테이너에 대해 실행해야 하는 RCP 버전(Thread 버전 1.2)을 확인해야 합니다.
    docker pull siliconlabsinc/openthread-border-router:gsdk-3.2.0
    

도커 구성 및 실행

  1. 시작 시 OTBR이 RCP에 연결하는 데 사용할 TTY 포트를 구성해야 합니다. RCP 장치의 TTY 포트를 찾으십시오. 이 작업을 수행하는 가장 쉬운 방법은 찾는 것입니다 /tty/dev RCP가 연결되면 ... 항목. 그것은 일반적이어야한다 /dev/ttyUSB0/dev/ttyACM0 .
  2. 다음과 같이 Docker 설치를 실행합니다. 이 예에서는 스레드 1.1 경계 라우터 컨테이너를 사용합니다.
    docker run -d --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 siliconlabsinc/openthread-border-router:gsdk-3.2.0 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d 분리 모드에서 컨테이너가 실행되도록합니다.
    • 당신은 사용하여 컨테이너 언제든지 실행 로그를 볼 수있는 docker logs 명령을 사용합니다.
    • --name 고정 표시기 용기가 제대로 닫혀 (또는 제거) 될 때까지 스티커이다.
    • 포트 8080은 보더 라우터 관리 웹 페이지를 호스팅하는 웹 서버의 포트를 나타냅니다.
    • ?uart-baudrate=460800 같은 긴 IPv6 패킷과 DTLS으로 비용이 많이 드는 작업과 조각 / UART를 통해 재 조립 문제를 해결하기 위해 라디오 URL 옵션이 필요합니다.

RCP 노드와 상호 작용

도커가 실행되면 이 명령을 사용하여 대화형 셸을 통해 RCP 노드와 통신할 수 있습니다. RCP 노드의 상태를 확인하십시오.

$ docker exec -ti otbr sh -c "sudo ot-ctl"
> state 
disabled
Done

실행 중인 컨테이너 ID 목록을 얻을 수 있습니다.

$ docker ps -aq

Border Router의 로그 출력을 실행하기 위해 OTBR Docker 컨테이너를 실행하는 창을 확인하거나 다음과 같이 컨테이너 로그를 따를 수 있습니다.

$ docker logs [container-id] -f

선택적으로 도커 컨테이너가 제대로 로드된 경우 이미지를 중지, 제거 또는 종료할 수 있습니다.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

선택 사항: 셸을 종료하려면 CNTL + C를 사용합니다.

이 시점에서 3개의 콘솔이 있어야 합니다.

  1. ot-cli-ftd 단순 Studio에서 콘솔은 전체 스레드 장치로 설정되어있다.
  2. 하나 ot-ctl OT 경계 라우터로 설정되어있는 라즈베리 파이에 대화 형 쉘.

이제 스레드 네트워크를 구성할 준비가 되었습니다.

8. 스레드 네트워크 생성

RCP 설정

네트워크를 만들려면, 우리는 시작 ot-ctl RCP 노드와 통신하는 데 사용되는 OTBR에 쉘. 다음 명령을 아래와 같이 순서대로 입력합니다.

색인

명령

명령 설명

예상 응답

1

dataset init new

새 네트워크 구성을 만듭니다.

완료

2

dataset commit active

활성 운영 데이터 세트에 새 데이터 세트를 커밋합니다.

완료

ifconfig up

스레드 인터페이스를 활성화합니다.

완료

4

thread start

스레드 프로토콜 작업을 활성화하고 연결합니다.

완료

스레드 인터페이스가 작동할 때까지 10초 동안 기다립니다.

5

state

장치 상태를 확인하십시오. 리더여야 합니다.
기타 가능한 상태: 오프라인, 비활성화됨, 분리됨,
자식, 라우터 또는 리더

지도자
완료

6

dataset

네트워크 구성을 봅니다.
귀하의 값은 이 코드랩과 다릅니다.
채널, 네트워크 키,
네트워크 이름 및 PAN ID.

활성 타임스탬프: 1
채널: 20
채널 마스크: 0x07fff800
내선 PAN ID: 39ba71f7fc367160
메시 로컬 접두사: fd5c:c6b:3a17:40b9::/64
네트워크 키: 81ae2c2c17368d585dee71eaa8cf1e90
네트워크 이름: OpenThread-008c
팬 ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
보안 정책: 0, onrcb
완료

우리는에 채널 번호와 네트워크 키를 사용합니다 ot-cli-ftd 이 스레드 네트워크에 두 FTDs에 가입 할 수 있습니다.

스레드 네트워크에 FTD 설정 및 추가(대역 외 방법)

대역 외 방법을 사용하면 모든 보안 정보를 알고 노드를 수동으로 추가합니다. Simplicity 콘솔에서 아래 표시된 순서대로 다음 명령을 사용하여 두 FTD를 모두 네트워크에 추가합니다.

색인

명령

명령 설명

예상 응답

1

dataset channel 20

OTBR에서 사용하는 채널을 설정합니다.

완료

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

장치를 스레드 네트워크에 연결하려면 네트워크 키만 필요합니다.

완료

dataset commit active

활성 운영 데이터 세트에 새 데이터 세트를 커밋합니다.

완료

4

ifconfig up

스레드 인터페이스를 활성화합니다.

완료

5

thread start

스레드 프로토콜 작업을 활성화하고 연결합니다.

완료

장치가 연결되고 자체적으로 구성되는 동안 20초 동안 기다립니다.

6

state

네트워크 구성을 봅니다.

아이
완료

스레드 장치 간의 통신

우리는 사용 ping 장치가 서로 통신 할 수 있는지 확인하는 명령을. ping 명령을 사용하려면 장치의 IPv6 주소가 필요합니다. 이들은 사용하여 얻을 수 ipaddr 명령을 사용합니다.

> ipaddr
fd5c:c6b:3a17:40b9:0:ff:fe00:fc00		# Leader Anycast Locator (ALOC)
fd5c:c6b:3a17:40b9:0:ff:fe00:1800		# Routing Locator (RLOC)
fd5c:c6b:3a17:40b9:84e2:bae8:bd5b:fa03		# Mesh-Local EID (ML-EID)
fe80:0:0:0:c449:ca4a:101f:5d16			# Link-Local Address (LLA)

두 FTD에서 OTBR의 RLOC 주소를 사용하여 OTBR을 ping합니다.

> ping fd5c:c6b:3a17:40b9:0:ff:fe00:1800
Done
> 
> 16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=30ms
16 bytes from fd5c:c6b:3a17:40b9:0:ff:fe00:1800: icmp_seq=3 hlim=64 time=52ms

응답은 수신된 페이로드와 통신이 성공했음을 나타냅니다. 프로세스를 반복하여 OTBR에서 FTD를 ping합니다.

9. 축하합니다

스레드 네트워크를 만들었습니다!

이제 알 수 있습니다.

  • Silicon Labs Simplicity Studio IDE를 사용하여 OpenThread 프로젝트를 만드는 방법.
  • OpenThread CLI 바이너리를 빌드하고 Silicon Labs 라디오 보드에 플래시하는 방법.
  • Docker를 사용하여 Raspberry Pi 3B+ 이상을 OTBR(OpenThread Border Router)로 설정하는 방법.
  • OTBR에서 스레드 네트워크를 만드는 방법.
  • 스레드 네트워크에 대한 장치의 대역 외 커미셔닝.
  • ping 명령을 사용하여 노드 간의 스레드 통신을 확인하는 방법입니다.

추가 읽기

확인 openthread.ioGitHub의를 OpenThread 자원을 포함하는 다양한 :

10. 옵션 펌웨어 설정 - 데모

데모는 호환되는 장치에 다운로드할 준비가 된 사전 빌드된 펌웨어 이미지입니다. Simplicity Studio에서 파트에 대한 데모를 사용할 수 있는지 확인하는 가장 빠른 방법은 디버그 어댑터 보기에서 파트를 클릭한 다음 Launcher Perspective에서 EXAMPLE PROJECTS & DEMOS 탭으로 이동하는 것입니다. 예제 프로젝트 필터를 비활성화하고 기술 유형에서 스레드 라디오 확인란을 선택합니다.

스튜디오 데모

OpenThread SDK와 함께 제공되는 사전 컴파일된 데모 애플리케이션 이미지는 다음 보드와 호환됩니다.

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

이 목록은 더 많은 라디오 보드를 포함하도록 향후 SDK 릴리스에서 업데이트될 수 있습니다. 지원되는 부품의 전체 목록은 설명서 아래의 Silicon Labs OpenThread SDK 릴리스 노트를 참조하십시오.

각 보드에서 다음 데모를 플래시합니다. 플래시하려면 왼쪽의 디버그 어댑터 아래에서 보드를 선택하고 해당 샘플 애플리케이션에 대해 실행을 클릭합니다. 팝업 창에 플래시 진행 상황이 표시됩니다.

  1. BRD4166A : OT-RCP -이 장치는 OT 국경 라우터에 라디오 공동 프로세서로 작동합니다. 이 장치를 사용하여 스레드 네트워크를 만들고 스레드 네트워크의 다른 두 장치를 온보드합니다. 경계 라우터이기 때문에 이 장치는 스레드 네트워크의 장치가 인터넷을 통해 통신하기 위한 게이트웨이 역할도 합니다.
  2. 두 BRD4168A : OT-CLI-FTD -이 두 장치가 전체 스레드 장치 역할을합니다. 그들은 OTBR에 의해 생성된 스레드 네트워크에 합류할 것입니다.