Criar uma rede Thread com placas Silicon Labs EFR32 e OpenThread usando o Simplicity Studio v5

1. Introdução

26b7f4f6b3ea0700.png

O OpenThread (OT) do Google é uma implementação de código aberto do Thread. O Google lançou o OpenThread para disponibilizar a tecnologia de rede usada nos produtos Google Nest a mais desenvolvedores e acelerar o desenvolvimento de produtos para casas conectadas e edifícios comerciais. Com uma camada de abstração de plataforma estreita e um pequeno consumo de memória, o OpenThread é altamente portátil. Ele é compatível com designs de system-on-chip (SoC) e de coprocessador de rede (NCP).

A especificação do Thread define um protocolo de comunicação sem fio confiável, seguro e de baixo consumo de energia entre dispositivos com base em IPv6 para aplicações em casas e edifícios comerciais.

A Silicon Labs aprimorou o OpenThread para funcionar com o hardware da empresa. O código-fonte está disponível no GitHub e também como um kit de desenvolvimento de software (SDK) instalado com o Simplicity Studio 5 (SSv5). O SDK inclui um snapshot totalmente testado do código-fonte do GitHub. Ele é compatível com uma variedade maior de hardware do que a versão do GitHub e inclui documentação e exemplos de aplicativos não disponíveis no GitHub.

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

Configuração de hardware EFR32MG

O que você vai aprender

  • Como criar um projeto OpenThread usando o ambiente de desenvolvimento integrado Simplicity Studio da Silicon Labs.
  • Como criar e gravar binários da CLI do OpenThread em placas de rádio da Silicon Labs.
  • Como configurar um Raspberry Pi 3B+ ou mais recente como um roteador de borda OpenThread (OTBR) usando o Docker.
  • Como criar uma rede Thread no OTBR.
  • Provisionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação de encadeamento entre os nós usando o comando ping.

2. Pré-requisitos

Hardware:

  1. 3 placas de rádio EFR32MGxx. É possível usar qualquer combinação desses dispositivos. Este codelab usa um BRD4166A como RCP e dois BRD4168A como dispositivos Thread completos.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Se você estiver começando do zero, adquira um dos kits iniciais do EFR32 Thread, que tem as placas listadas acima.
  2. BRD4001A: placas de circuito impresso principais de inicialização sem fio (WSTK) para hospedar as placas de rádio. Exceto a BRD4166A, todas as placas de rádio precisam de uma placa principal inicial. Cabos mini USB para conectar e alimentar as placas principais ou cabo micro USB para BRD4166A.

WSTK AEM

  1. Um Raspberry Pi 3B+ ou mais recente com a imagem do SO Raspbian Stretch Lite ou Raspbian Stretch com área de trabalho conectado à Internet por Ethernet. Vamos configurar isso como um roteador de borda OT.
  2. Um sistema host Windows/Linux/Mac com pelo menos duas portas USB e uma conexão de Internet. Confira os requisitos de hardware e SO em SSv5.
  3. Pelo menos um cabo Ethernet para conectar o Raspberry Pi à Internet. Os WSTKs também oferecem suporte à depuração e à programação via IP. Portanto, se quiser, use cabos Ethernet extras para conectar o WSTK ao sistema host por um comutador Ethernet.

Software:

  • Simplicity Studio v5 instalado e atualizado no sistema host Windows/Linux/Mac com
    • Conjunto de ferramentas GNU ARM
    • Gecko SDK Suite 3.2.0 ou mais recente e SDK OpenThread da Silicon Labs.

3. Configuração de hardware

Este codelab foi criado usando

  1. BRD4166A Thunderboard Sense 2 EFR32MG12, conforme mostrado à esquerda.
  2. Dois BRD4168A EFR32MG13, conforme mostrado à direita.
  3. Simplicity Studio v5 instalado em um macOS Catalina 10.15.7 com
    1. SDK do Gecko 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Conecte cada placa principal do Wireless Starter Kit ao computador host por USB, como mostrado na imagem abaixo. Essas conexões permitem a programação e a análise de rede do RCP e dos dispositivos finais. Primeiro, vamos usar o computador host para programar o BRD4166A com o firmware ot-rcp e, por fim, conectá-lo ao Raspberry Pi. Opcionalmente, os dispositivos finais podem ser conectados ao computador host por um switch Ethernet comum. Os kits iniciais também oferecem suporte à programação e à análise de rede via IPv4.

Conexões

4. Configuração do firmware

Há duas maneiras de começar. As duas opções permitem atualizar os firmwares necessários para este codelab.

  1. Projetos: (recomendado) crie, crie e faça o flash de um aplicativo de amostra. Essa opção permite personalizar o aplicativo no projeto.OU
  2. Demonstrações: (opcional) mostre as demonstrações pré-criadas diretamente na placa de rádio para qualquer um dos aplicativos de exemplo. Recomendamos que os usuários tentem configurar o firmware das demonstrações como um exercício opcional. Consulte a seção "Configuração opcional de firmware: demonstrações" no final deste codelab para mais detalhes.

Vamos usar o método baseado em projeto para este codelab.

Criar projetos usando exemplos

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

  1. Abra o menu File do Studio e selecione New > Silicon Labs Project Wizard. A caixa de diálogo "Seleção de destino, SDK e cadeia de ferramentas" é aberta. Não mude o ambiente de desenvolvimento integrado Simplicity padrão / conjunto de ferramentas GNU compatível com o OpenThread. Clique em Próxima.
    • Placas de destino: mostra a placa de rádio selecionada (BRD4168A) e a placa principal (BRD4001A).
    • Dispositivo de destino: esse campo mostra o chip do microcontrolador (MCU) integrado. O BRD4168A tem um MCU EFR32MG13 integrado.
    • SDK: aqui você pode selecionar a versão do SDK do OT com que está trabalhando. As informações do pacote incluem a tag do SDK e o build do OpenThread da Silicon Labs, por exemplo, Platform 4.0.1.0 e OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: a cadeia de ferramentas que será usada para compilar o projeto OT. Usamos GNU ARM.

Assistente de novo projeto

  1. A caixa de diálogo "Seleção de projeto de exemplo" é aberta. Uma lista de projetos de exemplo vai aparecer. Use os filtros de palavra-chave e tipo de tecnologia Thread para pesquisar um exemplo específico. Anote o número da versão do Gecko SDK Suite. Você vai precisar dessa tag de versão ao configurar o Raspberry Pi como um roteador de borda. Selecione ot-cli-ftd e clique em PRÓXIMA.

Etapa 2 do assistente de novo projeto

  1. A caixa de diálogo "Configuração do projeto" é aberta. Aqui, você pode renomear o projeto, mudar o local padrão do arquivo do projeto e determinar se vai vincular ou copiar os arquivos do projeto. Os arquivos de projeto vinculados apontam para o SDK, e as modificações feitas acabam sendo feitas no SDK e usadas em projetos futuros. Ao copiar as fontes do projeto, você pode editar uma cópia local do projeto para que os arquivos do SDK permaneçam intactos. A opção Vincular SDK e copiar fontes do projeto é a padrão e recomendada. Clique em CONCLUIR.

Etapa 3 do assistente de novo projeto

  1. A perspectiva do ambiente de desenvolvimento integrado Simplicity é aberta com o Project Configurator na guia VISÃO GERAL.

Visão geral do projeto

O projeto é configurado na guia Componentes de software instalando e desinstalando componentes e configurando os instalados. Os componentes instalados são verificados. Clique em Componentes instalados para ver uma lista filtrada de componentes instalados pelo aplicativo de exemplo. Todas as mudanças feitas são salvas automaticamente, e os arquivos do projeto são gerados automaticamente. O progresso é mostrado no canto inferior direito da perspectiva do ambiente de desenvolvimento integrado Simplicity.

Componentes do software

Nesta demonstração, vamos usar a configuração padrão dos aplicativos de exemplo. Repita as etapas acima para criar o projeto ot-rcp para sua outra placa.

Criar e atualizar os projetos

Crie e faça o flash dos projetos ot-rcp e ot-cli-ftd.

  1. Depois que o projeto for configurado, clique no Controle de build (ícone de martelo) na barra de ferramentas superior. Como alternativa, clique com o botão direito do mouse no projeto e clique em "Build Project".

Botão "Criar projeto"

  1. O progresso é mostrado no console e em uma barra de progresso no canto inferior direito. Todos os erros ou avisos relacionados ao seu projeto também vão aparecer nessa janela de saída.

Janela de saída da build do projeto

  1. As imagens binárias são geradas após um build de projeto bem-sucedido. É possível atualizar a imagem binária na visualização do Project Explorer. Localize o arquivo .bin, .hex ou .s37 no subdiretório do compilador. Clique com o botão direito do mouse no arquivo e selecione Atualizar para o dispositivo. Se você tiver mais de um dispositivo conectado, selecione um para programar e clique em OK. O Flash Programmer é aberto com o caminho do arquivo preenchido. Clique em PROGRAMA.

Flash

5. Resumo da configuração de firmware

Neste ponto, você já criou, compilou e gravou o firmware adequado nas placas de rádio. Depois que ot-rcp for gravado no BRD4166A, desconecte-o do sistema host e conecte a placa ao Raspberry Pi.

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

Configuração do EFR32MG

6. Configurar o console serial para dispositivos ot-cli-ftd

Para iniciar a interface do console, na perspectiva do Simplicity IDE, clique com o botão direito do mouse no dispositivo J-Link na janela "Devices View / Debug Adapters". Escolha Iniciar console. Para receber uma solicitação no console, escolha a guia Serial 1 e pressione Enter. Verifique o estado do nó FTD.

Visualização do console do FTD Studio

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

7. Configurar o Raspberry Pi como um roteador de borda

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 testes de desenvolvimento rápidos.

As imagens do OTBR da Silicon Labs são hospedadas no siliconlabsinc DockerHub, com tags. Cada tag corresponde a uma versão do GSDK:

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

Os contêineres do Docker precisam ser usados com RCPs criados com o Simplicity Studio 5 para uma determinada versão. Verifique se a versão da tag do contêiner corresponde à versão do GSDK que você está testando. Por exemplo, se a versão do GDSK for Gecko SDK Suite v4.0.1 (140) quando você selecionar ot-rcp na janela Seleção de projeto de exemplo, use a imagem siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Versão do GSDK

Configuração do Raspberry Pi

  1. No cartão SD, faça o flash da imagem do SO Raspbian Stretch Lite ou do Raspbian Stretch com área de trabalho.
  2. Você pode fazer SSH no Raspberry Pi ou trabalhar diretamente com o Raspbian Desktop. Abra um terminal.
  3. Atualize os repositórios locais e o gerenciador de pacotes (apt-get update e apt-get upgrade antes de instalar o Docker).

Instalar imagem Docker

  1. Instale o Docker com o seguinte comando no RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Depois de concluir, você pode modificar as configurações do usuário do Docker para não exigir sudo antes de cada comando. É necessário reiniciar.
    sudo usermod -aG docker $USER
    
  3. Execute os comandos a seguir para instalar os contêineres. Só é possível ter um contêiner de roteador de borda em execução por vez com seu RCP. Além disso, verifique se a versão do GSDK do Simplicity Studio corresponde à imagem Docker correta. Por exemplo, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configurar e executar o Docker

  1. Você precisa configurar a porta TTY que quer usar para o OTBR conectar o RCP na inicialização. Procure a porta TTY do seu dispositivo RCP. A maneira mais fácil de fazer isso é procurar uma entrada /tty/dev... depois que o RCP estiver conectado. Geralmente, é /dev/ttyUSB0 ou /dev/ttyACM0.
  2. Execute a instalação do Docker com o comando a seguir. Substitua o nome da imagem Docker pela versão correspondente do GSDK. Por exemplo, gsdk-4.0.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-4.0.1 \
     --radio-url spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800 \
     --backbone-interface eth0
    
    • -d garante que o contêiner seja executado no modo separado.
    • É possível conferir os registros em execução do contêiner a qualquer momento usando o comando docker logs.
    • --name permanece até que o contêiner do Docker seja fechado (ou removido) corretamente.
    • A porta 8080 indica a porta do servidor da Web que hospeda a página da Web de gerenciamento do roteador de borda.
    • O ?uart-baudrate=460800 é necessário nas opções de URL de rádio para evitar problemas de fragmentação / recomposição via UART, com operações caras, como DTLS com pacotes IPv6 longos.

Interagir com o nó RCP

Depois que o Docker estiver em execução, você poderá se comunicar com o nó RCP usando um shell interativo com este comando. Verifique o estado do nó RCP.

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

Você pode acessar uma lista de IDs de contêineres em execução

$ docker ps -aq

Você pode verificar a janela que executa o contêiner do Docker OTBR para ver a saída do registro em execução do roteador de borda ou seguir o registro do contêiner da seguinte maneira:

$ docker logs [container-id] -f

Opcionalmente, pare, remova ou encerre a 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ê terá três consoles.

  1. Dois consoles ot-cli-ftd no Simplicity Studio configurados como dispositivos Full Thread.
  2. Um shell interativo ot-ctl no Raspberry Pi configurado como um roteador de borda OT.

Agora estamos prontos para formar uma rede Thread.

8. Criar uma rede Thread

Configurar o RCP

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

Índice

Comando

Descrição do comando

Resposta esperada

1

dataset init new

Crie uma nova configuração de rede.

Concluído

2

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacionais ativos.

Concluído

3

ifconfig up

Ative a interface Thread.

Concluído

4

thread start

Ative e anexe a operação do protocolo Thread.

Concluído

Aguarde 10 segundos para que a interface da linha de execução seja ativada.

5

state

Verifique o estado do dispositivo. Ele precisa ser o líder.
Outros estados possíveis: off-line, desativado, desconectado,
secundário, roteador ou líder

Líder
Concluído

6

dataset

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

Active Timestamp: 1
Channel: 20
Channel Mask: 0x07fff800
Ext PAN ID: 39ba71f7fc367160
Mesh Local Prefix: fd5c:c6b:3a17:40b9::/64
Network Key: 81ae2c2c17368d585dee71eaa8cf1e90
Network Name: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Security Policy: 0, onrcb
Done

Vamos usar o número do canal e a chave de rede no ot-cli-ftd para unir os dois FTDs a essa rede de encadeamento.

Configurar e adicionar o FTD à nossa rede Thread (método fora da banda)

Com o método fora da banda, conhecemos todas as informações de segurança e adicionamos o nó manualmente. Nos consoles do Simplicity, adicione os dois FTDs à rede usando os comandos a seguir na ordem mostrada abaixo.

Índice

Comando

Descrição do comando

Resposta esperada

1

dataset channel 20

Defina o canal usado pelo OTBR.

Concluído

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

Concluído

3

dataset commit active

Confirme o novo conjunto de dados no conjunto de dados operacionais ativos.

Concluído

4

ifconfig up

Ative a interface Thread.

Concluído

5

thread start

Ative e anexe a operação do protocolo Thread.

Concluído

Aguarde 20 segundos enquanto o dispositivo entra e se configura.

6

state

Ver a configuração de rede.

criança
Concluído

Comunicação entre dispositivos Thread

Vamos usar o comando ping para verificar se os dispositivos podem se comunicar entre si. Para usar o comando ping, precisamos dos endereços IPv6 dos dispositivos. É possível usar o comando ipaddr para conseguir esses dados.

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

Em ambos os FTDs, faça ping no OTBR usando o endereço RLOC dele.

> 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 o payload recebido e que a comunicação foi bem-sucedida. Repita o processo para fazer ping nos FTDs do OTBR.

9. Parabéns

Você criou uma rede Thread!

Agora você sabe:

  • Como criar um projeto OpenThread usando o ambiente de desenvolvimento integrado Simplicity Studio da Silicon Labs.
  • Como criar e gravar binários da CLI do OpenThread em placas de rádio da Silicon Labs.
  • Como configurar um Raspberry Pi 3B+ ou mais recente como um roteador de borda OpenThread (OTBR) usando o Docker.
  • Como criar uma rede Thread no OTBR.
  • Provisionamento fora da banda de dispositivos em uma rede Thread.
  • Como verificar a comunicação de encadeamento entre os nós usando o comando ping.

Leitura adicional

Confira openthread.io e GitHub para acessar vários recursos do OpenThread, incluindo:

10. Configuração opcional de firmware: demonstrações

As demonstrações são imagens de firmware pré-criadas que podem ser baixadas em um dispositivo compatível. A maneira mais rápida de saber se uma demonstração está disponível para sua peça no Simplicity Studio é clicar nela na visualização "Adaptadores de depuração" e navegar até a guia "PROJETOS DE EXEMPLO E DEMONSTRAÇÕES" na perspectiva do iniciador. Desative o filtro "Projetos de exemplo" e marque a caixa de seleção "Thread" em "Tipo de tecnologia".

Demonstrações do Studio

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

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

Essa lista pode ser atualizada em versões futuras do SDK para incluir mais placas de rádio. Consulte as notas da versão do SDK OpenThread da Silicon Labs em "Documentação" para ver uma lista completa das peças compatíveis.

Atualize as seguintes demonstrações nas respectivas placas. Para fazer o flash, selecione sua placa em "Adaptadores de depuração" à esquerda e clique em "EXECUTAR" para os aplicativos de exemplo correspondentes. Uma janela pop-up vai mostrar o progresso do flash.

  1. BRD4166A: ot-rcp: esse dispositivo vai funcionar como um coprocessador de rádio para o roteador de borda OT. Vamos usar esse dispositivo para criar uma rede Thread e integrar os outros dois dispositivos a ela. Como um roteador de borda, esse dispositivo também funciona como um gateway para que os aparelhos na rede Thread se comuniquem pela Internet.
  2. Dois BRD4168A: ot-cli-ftd. Esses dois dispositivos vão funcionar como dispositivos Thread completos. Eles vão entrar na rede Thread criada pelo OTBR.