O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Construir uma rede Thread com placas EFR32 da Silicon Labs e OpenThread usando Simplicity Studio v5

26b7f4f6b3ea0700.png

Do Google OpenThread (OT) é uma implementação open-source do Thread. O Google lançou o OpenThread para tornar a tecnologia de rede usada nos produtos Google Nest mais amplamente disponível para desenvolvedores, a fim de acelerar o desenvolvimento de produtos para residências conectadas e edifícios comerciais. Com uma camada de abstração de plataforma estreita e uma pequena pegada de memória, OpenThread é altamente portátil. Suporta designs de sistema em chip (SoC) e co-processador de rede (NCP).

A especificação da linha define um wireless protocolo de comunicação baseada em IPv6, e baixo consumo de energia segura e confiável dispositivo para dispositivo para aplicações domésticas e de construção comercial.

Silicon Labs tem reforçado OpenThread para trabalhar com hardware Silicon Labs. Este código-fonte está disponível no GitHub e também como um kit de desenvolvimento de software (SDK) instalado com Simplicity Studio 5 (SSv5). O SDK inclui um instantâneo totalmente testado do código-fonte do GitHub. Ele oferece suporte a uma gama mais ampla de hardware do que a versão GitHub e inclui documentação e aplicativos de exemplo não disponíveis no GitHub.

Este guia descreve como começar a desenvolver aplicativos OpenThread usando o Silicon Labs OpenThread SDK e Simplicity Studio 5. A imagem abaixo mostra as placas (BRDs) e o hardware configurado com um OT Border Router (OTBR) e dois dispositivos Thread usados ​​no codelab.

EFR32MG Hardware configurado

O que você aprenderá

  • Como criar um projeto OpenThread usando Silicon Labs Simplicity Studio IDE.
  • Como construir e atualizar binários OpenThread CLI para placas de rádio da Silicon Labs.
  • Como configurar um Raspberry Pi 3B + ou superior como um OpenThread Border Router (OTBR) usando o Docker.
  • Como criar uma rede Thread no OTBR.
  • Comissionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação do thread entre os nós usando o comando ping.

Hardware:

  1. 3 placas de rádio EFR32MGxx - qualquer combinação desses dispositivos pode ser usada. Este codelab usa um BRD4166A como RCP e dois BRD4168As como dispositivos Full Thread.
    • EFR32MG12 (BRD 4161A, 4166A BRD, BRD 4170A, BRD 4304 A)
    • EFR32MG13 (BRD 4168A)
    • EFR32MG21 (BRD 4180A, 4180B BRD)
    Se você está começando do zero, você pode obter um dos starter kit EFR32 rosca que tem as placas listadas acima.
  2. BRD4001A: Placas principais de partida sem fio (WSTK) para hospedar as placas de rádio. Exceto para BRD4166A, todas as placas de rádio precisam de uma placa principal de partida cada. Cabos mini USB para conectar e alimentar as placas principais ou cabo micro USB para BRD4166A.

WSTK AEM

  1. A Raspberry Pi 3B + ou superior com imagem Raspbian estiramento Lite OS ou Raspbian estiramento com o Desktop que está ligado à Internet através de Ethernet. Nós o configuramos como um OT Border Router.
  2. Um sistema host Windows / Linux / Mac com pelo menos 2 portas USB e uma conexão com a Internet. Verifique o hardware e Requisitos mínimos em SSv5 .
  3. Pelo menos um cabo Ethernet para conectar o Raspberry Pi à Internet. Os WSTKs também suportam depuração e flashing sobre IP, portanto, opcionalmente, cabos Ethernet adicionais podem ser usados ​​para conectar o WSTK ao sistema host por meio de um switch Ethernet.

Programas:

  • Simplicity Studio v5 instalado e atualizado no sistema Host Windows / Linux / Mac com
    • Conjunto de ferramentas GNU ARM v7.2.1
    • Gecko SDK Suite 3.2.0 ou posterior e Silicon Labs OpenThread SDK.

Baixe Simplicity Studio 5

Este Codelab foi criado usando

  1. EFR32MG12 BRD4166A Thunderboard Sentido 2 como mostrado no lado esquerdo.
  2. Dois EFR32MG13 BRD4168A como mostrado à direita.
  3. Simplicity Studio v5 instalado em um macOS Catalina 10.15.7 com
    1. Gecko SDK 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Conecte cada placa principal do Wireless Starter Kit ao computador host por USB, conforme mostrado na imagem abaixo. Essas conexões permitirão a programação e a análise da rede do RCP e dos dispositivos finais. Primeiro, usaremos o computador host para programar o BRD4166A com o firmware ot-rcp e, eventualmente, conectá-lo ao Raspberry Pi. Opcionalmente, os dispositivos finais podem ser conectados ao computador host por meio de um switch Ethernet comum. Os kits iniciais também suportam programação e análise de rede em IPv4.

Conexões

Existem duas maneiras de começar. Ambas as opções permitem que você atualize os firmwares necessários para este codelab.

  1. Projetos: (Recomendado) Crie, construa e atualize um aplicativo de amostra. Esta opção permite que você personalize o aplicativo no projeto.OR
  2. Demonstrações: (Opcional) Atualize as demonstrações pré-construídas diretamente na placa de rádio para qualquer um dos aplicativos de amostra. Os usuários são incentivados a experimentar a configuração do firmware de demonstração como um exercício opcional. Consulte a seção "Configuração de firmware opcional - Demonstrações" no final deste codelab para obter detalhes.

Usaremos o método baseado em projeto para este codelab.

Crie projetos usando exemplos

Vamos criar dois projetos. A ot-rcp projeto para BRD4166A e ot-cli-ftd projeto para os dois BRD4168A. Siga estas etapas e selecione o aplicativo de amostra apropriado para sua placa.

  1. Menu e Arquivo do Open Studio selecione Novo> Project Wizard Silicon Labs. A caixa de diálogo Target, SDK e Toolchain Selection é aberta. Não altere o conjunto de ferramentas padrão Simplicity IDE / GNU suportado pelo OpenThread. Clique em Avançar.
    • Placas alvo: Mostra a placa de rádio selecionada (BRD4168A) junto com a placa principal (BRD4001A)
    • Dispositivo alvo: Este campo mostra o chip microcontrolador (MCU) integrado. O BRD4168A tem um EFR32MG13 MCU integrado.
    • SDK: aqui você pode selecionar a versão do SDK do OT com a qual está trabalhando. Para este codelab, usamos OpenThread 1.2.0.0.
    • IDE / Toolchain: O conjunto de ferramentas que será usado para compilar o projeto OT. Usamos GNU ARM 7.2.1.

Novo assistente de projeto

  1. A caixa de diálogo Seleção de projeto de exemplo é aberta. Você notará uma lista de projetos de exemplo. Use o 'Tópico' Tipo de Tecnologia e filtros de palavras-chave de pesquisa para um exemplo específico, neste caso ot-cli-ftd . Selecione-o e clique em Avançar.

Novo assistente de projeto, etapa 2

  1. A caixa de diálogo Configuração do projeto é aberta. Aqui você pode renomear seu projeto, alterar a localização padrão do arquivo de projeto e determinar se irá vincular ou copiar os arquivos do projeto. Os arquivos de projeto vinculados apontam para o SDK e quaisquer modificações que você fizer acabam sendo feitas no SDK e usadas em projetos futuros. Copiar fontes do projeto permite que você edite uma cópia local do projeto para que os arquivos SDK permaneçam intactos. 'SDK Link e fontes do projeto de cópia' é o padrão e a escolha recomendada. Clique em Concluir.

Novo assistente de projeto, etapa 3

  1. A simplicidade IDE Perspectiva abre com o projeto open Configurator para a guia Visão geral.

Visão Geral do Projeto

O projecto é configurado a partir do separador de componentes do programa através da instalação e desinstalar componentes, e configuração dos componentes instalados. Os componentes instalados são verificados. Clique componentes instalados para ver uma lista filtrada de componentes instalados pelo exemplo de aplicação. Todas as alterações feitas são salvas automaticamente e os arquivos de projeto são gerados automaticamente. O progresso é mostrado no canto inferior direito da perspectiva Simplicity IDE.

Componentes de Software

Para esta demonstração, usaremos a configuração padrão dos aplicativos de amostra. Repita os passos acima para criar o ot-rcp projeto para a sua outra placa.

Construir e atualizar os projetos

Construir e piscar ambos ot-rcp e ot-cli-ftd projetos.

  1. Após seu projeto está configurado, clique no controle Construir (ícone do martelo) na barra de ferramentas superior. Alternativamente, você pode clicar com o botão direito do mouse no projeto e clicar em construir projeto.

Botão de construção do projeto

  1. O progresso é exibido no Console e uma barra de progresso no canto inferior direito. Quaisquer erros ou avisos relacionados ao seu projeto também aparecerão nesta janela de saída.

Projetar janela de saída de compilação

  1. As imagens binárias são geradas após uma construção de projeto bem-sucedida. Você pode piscar a imagem binária do ponto de vista Project Explorer. Localize o arquivo .bin, .hex ou .s37 no subdiretório do compilador. Direito do mouse no arquivo e selecione Flash para dispositivos. Se você tiver mais de um dispositivo conectado, em seguida, selecionar um dispositivo para o programa, clique em OK. O Flash Programmer é aberto com o caminho do arquivo preenchido. Clique PROGRAM.

Clarão

Neste ponto, você deve ter criado, compilado e atualizado o firmware apropriado nas placas de rádio. Uma vez ot-rcp é piscou para BRD4166A, desligue-o do sistema host e conectar este conselho para o Raspberry Pi.

Depois de concluir esta seção, a configuração do hardware da sua rede Thread ficará assim.

EFR32MG configurado

Para iniciar a interface do Console, na perspectiva do botão direito Simplicidade IDE no seu dispositivo J-Link na Devices Ver / Debug Adaptadores Window. Escolha Console Lançamento. Para obter um aviso no console, escolha Serial 1 guia e pressione Enter. Verifique o estado do nó FTD.

Visualização do console do FTD Studio

Você vai notar que nós ainda não tem um console para ot-rcp . Na próxima etapa, vamos configurar o Raspberry Pi como um roteador de borda OT e configurar o console para ot-rcp .

A Silicon Labs recomenda implantar o contêiner Docker da empresa com o OTBR. Executar o OTBR em um contêiner permite a criação de artefatos facilmente implantáveis ​​e prototipagem e teste de desenvolvimento rápido.

A Silicon Labs fornece os seguintes contêineres Docker pré-construídos (com tags), hospedados no DockerHub:

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

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

Raspberry Pi configurado

  1. No seu cartão SD, certifique-se de piscar o imagem Raspbian estiramento Lite OS ou Raspbian estiramento com o Desktop .
  2. Você pode usar o SSH no Raspberry Pi ou optar por trabalhar diretamente com o Raspbian Desktop. Abra um terminal.
  3. Certifique-se de atualizar seus repositórios locais e gerenciador de pacotes (apt-get update e apt-get upgrade antes de instalar Docker).

Instalar imagem docker

  1. Instale o Docker com o seguinte comando em seu RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Depois de terminar, você pode modificar as configurações de usuário do Docker para não exigir o sudo antes de cada comando. É necessário reinicializar.
    sudo usermod -aG docker $USER
    
  3. Emita os seguintes comandos para instalar os contêineres. Observe que você pode ter apenas um contêiner Border Router em execução ao mesmo tempo com seu RCP. Além disso, certifique-se de verificar a versão RCP (Thread versão 1.2) que deve ser executada neste contêiner.
    docker pull siliconlabsinc/openthread-border-router:gsdk-3.2.0
    

Configurar e executar o docker

  1. Você precisa configurar a porta TTY que deseja usar para o OTBR para conectar seu RCP na inicialização. Procure a porta TTY do seu dispositivo RCP. A maneira mais fácil de fazer isso é olhar para um /tty/dev ... entrada uma vez que a RCP está conectado. Deve geralmente quer ser /dev/ttyUSB0 ou /dev/ttyACM0 .
  2. Execute a instalação do Docker da seguinte maneira. O exemplo usa um contêiner Thread 1.1 Border Router.
    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 assegura que o recipiente é executado em modo independente.
    • Você pode ver os logs que funcionam para o recipiente qualquer momento usando a docker logs de comando.
    • --name é pegajosa até que a janela de encaixe recipiente está correctamente fechado (ou removido).
    • A porta 8080 indica a porta do servidor web que hospeda a página da web de gerenciamento do Border Router.
    • ?uart-baudrate=460800 é necessária nas opções de rádio URL para contornar a fragmentação / remontagem questões mais UART, com operações dispendiosas, como DTLS com pacotes IPv6 longos.

Interaja com o nó RCP

Depois que a janela de encaixe estiver em execução, você pode se comunicar com o nó RCP por meio de um shell interativo usando este comando. Verifique o estado do nó RCP.

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

Você pode obter uma lista de IDs de contêiner em execução

$ docker ps -aq

Você pode verificar a janela de execução do contêiner OTBR Docker para a saída de registro do Border Router ou seguir o registro do contêiner da seguinte forma:

$ docker logs [container-id] -f

Opcionalmente, você pode parar, remover ou eliminar sua imagem se o contêiner do docker estiver carregado corretamente.

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

Opcional: para sair do shell, use CNTL + C.

Neste ponto, você deve ter 3 consoles.

  1. Dois ot-cli-ftd consoles em Simplicidade Studio, que são configurados como dispositivos com rosca completa.
  2. Um ot-ctl shell interativo sobre o Raspberry Pi, que é configurado como um roteador de borda OT.

Agora estamos prontos para formar uma rede Thread.

Configurar RCP

Para criar a rede, começamos com ot-ctl escudo na OTBR que é usado para se comunicar com o nó RCP. Insira os seguintes comandos na ordem mostrada abaixo:

Índice

Comando

Descrição do comando

Resposta Esperada

1

dataset init new

Crie uma nova configuração de rede.

Feito

2

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacional ativo.

Feito

3

ifconfig up

Habilite a interface Thread.

Feito

4

thread start

Habilite e conecte a operação do protocolo Thread.

Feito

Aguarde 10 segundos para que a interface do thread esteja ativa.

5

state

Verifique o estado do dispositivo. Deve ser o líder.
Outros estados possíveis: offline, desativado, desconectado,
filho, roteador ou líder

Líder
Feito

6

dataset

Veja a configuração da rede.
Seus valores serão diferentes deste codelab.
Anote o canal, a chave de rede,
nome da rede e o PAN ID.

Timestamp ativo: 1
Canal: 20
Máscara de canal: 0x07fff800
PAN ID ext .: 39ba71f7fc367160
Prefixo local da malha: fd5c: c6b: 3a17: 40b9 :: / 64
Chave de rede: 81ae2c2c17368d585dee71eaa8cf1e90
Nome da rede: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Política de segurança: 0, onrcb
Feito

Nós vamos usar o número do canal e a chave de rede no ot-cli-ftd para unir as duas FTDs a esta rede fio.

Configure e adicione FTD à nossa rede Thread (método fora da banda)

Com o método out-of-band, conhecemos todas as informações de segurança e adicionamos o nó manualmente. Nos consoles Simplicity, adicione ambos os FTDs à nossa rede usando os seguintes comandos na ordem mostrada abaixo.

Índice

Comando

Descrição do comando

Resposta Esperada

1

dataset channel 20

Defina o canal usado pelo OTBR.

Feito

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Apenas a chave de rede é necessária para que um dispositivo se conecte a uma rede Thread.

Feito

3

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacional ativo.

Feito

4

ifconfig up

Habilite a interface Thread.

Feito

5

thread start

Habilite e conecte a operação do protocolo Thread.

Feito

Aguarde 20 segundos enquanto o dispositivo se conecta e se configura.

6

state

Veja a configuração da rede.

filho
Feito

Comunicação entre dispositivos Thread

Nós vamos usar o ping comando para verificar se os dispositivos podem se comunicar uns com os outros. Para usar o comando ping, precisamos dos endereços IPv6 dos dispositivos. Estes podem ser obtidos usando o ipaddr comando.

> 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)

De ambos os FTDs, execute ping no OTBR usando o endereço RLOC do OTBR.

> 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

A resposta indica a carga recebida e que a comunicação foi bem-sucedida. Repita o processo para executar ping em FTDs do OTBR.

Você criou uma rede Thread!

Agora você sabe:

  • Como criar um projeto OpenThread usando o IDE do Silicon Labs Simplicity Studio.
  • Como construir e atualizar binários OpenThread CLI para placas de rádio da Silicon Labs.
  • Como configurar um Raspberry Pi 3B + ou superior como um OpenThread Border Router (OTBR) usando o Docker.
  • Como criar uma rede Thread no OTBR.
  • Comissionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação do thread entre os nós usando o comando ping.

Leitura adicional

Confira openthread.io e GitHub para uma variedade de recursos OpenThread, incluindo:

As demonstrações são imagens de firmware pré-construídas que estão prontas para serem baixadas em um dispositivo compatível. A maneira mais rápida de descobrir se uma demonstração está disponível para sua parte no Simplicity Studio é clicando em sua parte na visualização Adaptadores de depuração e navegando até a guia EXEMPLO DE PROJETOS E DEMOS na Perspectiva do Launcher. Desative o filtro Projetos de exemplo e marque a caixa de seleção Thread radio em Tipo de tecnologia.

Demonstrações de estúdio

As imagens de aplicativo de demonstração pré-compiladas fornecidas com o OpenThread SDK são compatíveis com as seguintes placas:

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

Esta lista pode ser atualizada em versões futuras do SDK para incluir mais placas de rádio. Consulte as notas de lançamento do Silicon Labs OpenThread SDK em Documentação para obter uma lista completa de peças com suporte.

Faça o flash das seguintes demonstrações nas respectivas placas. Para piscar, selecione sua placa em Adaptadores de depuração à esquerda e clique em RUN para os aplicativos de amostra correspondentes. Uma janela pop-up mostrará o progresso do flash.

  1. BRD4166A: ot-rcp - Este dispositivo irá funcionar como um processador de rádio Co ao OT Border Router. Usaremos este dispositivo para criar uma rede Thread e integrar os outros dois dispositivos na rede Thread. Sendo um Border Router, este dispositivo também atua como um gateway para os dispositivos da rede Thread se comunicarem pela Internet.
  2. Dois BRD4168A: ot-cli-FTD - Estes dois dispositivos funcionarão como dispositivos com rosca completa. Eles irão se juntar à rede Thread criada pelo OTBR.