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 mais amplamente os desenvolvedores a tecnologia de rede usada nos produtos Google Nest. O objetivo é acelerar o desenvolvimento de produtos para edifícios de casa conectada e comerciais. Com uma camada estreita de abstração da plataforma e um pequeno consumo de memória, o OpenThread é altamente portátil. Ele oferece suporte a designs de system on chip (SoC) e de coprocessador de rede (NCP).

A Especificação Thread define um protocolo de comunicação entre dispositivos sem fio confiável, seguro e de baixa potência baseado em IPv6 para aplicativos domésticos e comerciais.

A Silicon Labs aprimorou o OpenThread para funcionar com o hardware da Silicon Labs. Esse 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. Ela é compatível com uma variedade maior de hardwares 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 do Silicon Labs e o Simplicity Studio 5. A imagem abaixo mostra as placas (BRDs) e o hardware configurado com um roteador de borda OT (OTBR) e dois dispositivos Thread usados no codelab.

Configuração do hardware EFR32MG

O que você vai aprender

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

2. Pré-requisitos

Hardware:

  1. Três 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 Thread completo.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    . Se você estiver começando do zero, poderá comprar um do Kit de ativação EFR32 Thread, que tem as placas listadas acima.
  2. BRD4001A: placas principais de ativação sem fio (WSTK) para hospedar as placas de rádio. Com exceção da 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.

AEM do WSTK

  1. Um Raspberry Pi 3B ou versão mais recente com imagem do SO Raspbian esticar Lite ou Raspbian Extended with Desktop conectado à Internet por Ethernet. Configuramos isso como um roteador de borda OT.
  2. Um sistema host Windows/Linux/Mac com pelo menos duas portas USB e conexão de Internet. Verifique os requisitos de hardware e sistema operacional em SSv5.
  3. Pelo menos um cabo Ethernet para conectar o Raspberry Pi à Internet. Os WSTKs também são compatíveis com depuração e atualização por IP. Assim, opcionalmente, cabos Ethernet adicionais podem ser usados para conectar o WSTK ao sistema host por meio de um switch 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 posterior e Silicon Labs OpenThread SDK.

3. Configuração de hardware

Este codelab foi criado usando

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

BRD 4168

Conecte cada placa principal do Kit de iniciante sem fio ao computador host por USB, como mostra a imagem abaixo. Essas conexões vão permitir 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 depois conectá-lo ao Raspberry Pi. Os dispositivos finais também 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. Ambas as opções permitem que você atualize os firmwares necessários para este codelab.

  1. Projetos: (recomendado) crie, desenvolva e atualize um aplicativo de exemplo. Essa opção permite personalizar o aplicativo no projeto.OU
  2. Demonstrações: (opcional) atualize as demonstrações pré-criadas diretamente na placa de rádio para qualquer aplicativo de exemplo. Recomendamos que os usuários testem o firmware de demonstrações configurado como um exercício opcional. Consulte "Configuração opcional do firmware - Demonstrações" no final deste codelab para mais detalhes.

Neste codelab, vamos usar o método baseado em projetos.

Criar projetos usando exemplos

Vamos criar dois projetos. O projeto ot-rcp para a BRD4166A e o projeto ot-cli-ftd para as duas BRD4168A. Siga estas etapas e selecione o exemplo de aplicativo apropriado para sua diretoria.

  1. Abra o menu Arquivo do Studio e selecione Novo > Assistente de projeto do Silicon Labs. A caixa de diálogo "Target, SDK, and Toolchain Selection" é aberta. Não altere o conjunto de ferramentas padrão do ambiente de desenvolvimento integrado de simplicidade / GNU compatível com o OpenThread. Clique em "Próxima".
    • Placas de destino: mostra a placa de rádio selecionada (BRD4168A) junto com 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 Silicon Labs do OpenThread, por exemplo, Platform 4.0.1.0 e OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Conjunto de ferramentas: o conjunto de ferramentas que será usado para compilar o projeto OT. Usamos o GNU ARM.

Novo assistente de projeto

  1. A caixa de diálogo "Example Project Selection" é aberta. Você verá uma lista de projetos de exemplo. Use o tipo de tecnologia Thread e os filtros de palavra-chave para pesquisar um exemplo específico. Anote o número da versão do Gecko SDK Suite. Você 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 "Project Configuration" é aberta. Aqui é possível renomear o projeto, alterar o local padrão do arquivo do projeto e determinar se os arquivos do projeto serão vinculados ou copiados. Os arquivos de projeto vinculados apontam para o SDK. Qualquer modificação feita acabará sendo feita no SDK e usada para projetos futuros. Copiar fontes do projeto permite editar uma cópia do projeto local para que os arquivos do SDK permaneçam intactos. Vincular o SDK e copiar as fontes do projeto é a escolha padrão e recomendada. Clique em CONCLUIR.

Etapa 3 do assistente de novo projeto

  1. A perspectiva da Simplicidade do IDE é aberta com o Configurador do projeto aberto na guia VISÃO GERAL.

Visão geral do projeto

Para configurar o projeto, acesse a guia Componentes de software, a instalação e a desinstalação dos componentes e a configuração dos componentes instalados. Os componentes instalados são verificados. Clique em Componentes instalados para ver uma lista filtrada dos componentes instalados pelo aplicativo de exemplo. Todas as alterações são salvas automaticamente, e os arquivos do 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 exemplo. Repita as etapas acima para criar o projeto ot-rcp para o outro quadro.

Criar e atualizar os projetos

Crie e atualize os projetos ot-rcp e ot-cli-ftd.

  1. Depois de configurar o projeto, clique em Build control (marmer icon) na barra de ferramentas superior. Como alternativa, clique com o botão direito do mouse no projeto e depois em "Build project".

Botão "Criar projeto"

  1. O progresso é exibido 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 do build do projeto

  1. As imagens binárias são geradas após a criação do projeto. Atualize a imagem binária na visualização do explorador de projetos. Localize o arquivo .bin, .hex ou .s37 no subdiretório do compilador. Clique com o botão direito do mouse no arquivo e selecione Flash to Device. Se você tiver mais de um dispositivo conectado, selecione um para programar e clique em OK. O Programmer Flash é aberto com o caminho do arquivo preenchido. Clique em PROGRAMA.

Flash

5. Resumo de configuração do firmware

Agora você já deve ter criado, compilado e atualizado o firmware adequado nas placas de rádio. Depois que o ot-rcp for atualizado para o BRD4166A, desconecte-o do sistema host e conecte essa placa ao Raspberry Pi.

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

Configuração do EFR32MG

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

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

Visualização do console do Studio para FTD

Você verá que ainda não temos 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 o ot-rcp.

7. Configurar o Raspberry Pi como um roteador de borda

A Silicon Labs recomenda implantar o contêiner do 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 OTBR da Silicon Labs são hospedadas no DockerHub siliconlabsinc (em inglês) 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. A versão da tag de contêiner precisa corresponder à versão do GSDK que você está usando para testar. Por exemplo, se a versão do GDSK era Gecko SDK Suite v4.0.1 (140) quando você selecionou ot-rcp na janela Example Project Selection, 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, atualize a imagem do SO Raspbian esticar Lite ou o Raspbian esticar com computador.
  2. Você pode usar 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).

Instale a imagem Docker

  1. Instale o Docker com o seguinte comando na sua RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Depois de concluído, é possível 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. Execute os comandos a seguir para instalar os contêineres. Observe que só é possível ter um contêiner de roteador de borda em execução por vez com seu RCP. Além disso, combine a versão do GSDK do Simplicity Studio com a imagem Docker correta. Por exemplo, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configure e execute o Docker

  1. É necessário configurar a porta TTY que você quer usar para que o OTBR conecte seu RCP na inicialização. Procure a porta TTY do dispositivo RCP. A maneira mais fácil de fazer isso é procurar uma entrada /tty/dev... quando o RCP estiver conectado. Geralmente, ele precisa ser /dev/ttyUSB0 ou /dev/ttyACM0.
  2. Execute a instalação do Docker com o comando a seguir. Substitua o nome da imagem do Docker pela versão do GSDK correspondente. 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 independente.
    • Use o comando docker logs para ver os registros em execução do contêiner a qualquer momento.
    • --name permanece fixo 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 de gerenciamento do roteador de borda.
    • O ?uart-baudrate=460800 é necessário nas opções de URL de rádio para contornar problemas de fragmentação / remontagem no UART, com operações caras, como DTLS com pacotes IPv6 longos.

Interagir com o nó do RCP

Quando o Docker estiver em execução, será possível se comunicar com o nó do RCP por um shell interativo usando esse comando. Verifique o estado do nó do RCP.

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

É possível consultar 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 executar a saída de registro do roteador de borda ou seguir o registro do contêiner da seguinte maneira:

$ docker logs [container-id] -f

Opcionalmente, você poderá interromper, remover ou encerrar a imagem se o contêiner do Docker for carregado corretamente.

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

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

Agora, você terá três consoles.

  1. Dois consoles ot-cli-ftd no Simplicity Studio que são configurados como dispositivos Thread completo.
  2. Um shell interativo ot-ctl no Raspberry Pi, que está 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ó do RCP. Digite os comandos abaixo na ordem mostrada:

Índice

Comando

Descrição do comando

Resposta esperada

1

dataset init new

Crie uma configuração de rede.

Concluído

2

dataset commit active

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

Concluído

3

ifconfig up

Ativar a interface Thread.

Concluído

4

thread start

Ativar e anexar a operação do protocolo Thread.

Concluído

Aguarde 10 segundos para que a interface da linha de execução esteja ativa.

5

state

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

Leader
Done

6

dataset

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











Usaremos o número do canal e a chave de rede no ot-cli-ftd para unir os dois FTDs a essa rede de linhas de execução.

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

Com o método fora de banda, conhecemos todas as informações de segurança e adicionamos o nó manualmente. Nos consoles de simplicidade, 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

Define o canal usado pelo OTBR.

Concluído

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

Concluído

3

dataset commit active

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

Concluído

4

ifconfig up

Ativar a interface Thread.

Concluído

5

thread start

Ativar e anexar a operação do protocolo Thread.

Concluído

Aguarde 20 segundos enquanto o dispositivo é conectado e se configura.

6

state

Veja a configuração da 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. Eles podem ser conseguidos usando o comando 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)

Ambos os FTDs dão um 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 o payload recebido e que a comunicação foi bem-sucedida. Repita o processo para dar um ping nos FTDs a partir 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 do Silicon Labs.
  • Como criar e atualizar binários da CLI OpenThread para placas de rádio do Silicon Labs.
  • Como configurar um Raspberry Pi 3B+ ou mais recente como um roteador de borda do OpenThread (OTBR) usando o Docker.
  • Como criar uma rede Thread no OTBR.
  • Comissionamento fora de banda dos dispositivos em uma rede Thread.
  • Como verificar a comunicação do Thread entre os nós usando o comando ping.

Leitura adicional

Acesse openthread.io e GitHub (links em inglês) para ver uma variedade de recursos do OpenThread, incluindo:

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

As demonstrações são imagens de firmware pré-criadas que estão prontas para download 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 é clicar na sua parte na visualização Debug Adapters e navegar até a seção EXAMPLE PROJECTS & Guia "DEMOS" na perspectiva da tela de início. Desative o filtro "Exemplos de projetos" e marque a caixa de seleção "Thread" em "Tipo de tecnologia".

Demonstrações de estúdio

As imagens pré-compiladas do aplicativo de demonstração 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 do Silicon Labs OpenThread em "Documentação" para ver uma lista completa das partes compatíveis.

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

  1. BRD4166A: ot-rcp — este dispositivo vai funcionar como um processador Radio Co para o roteador de borda OT. Vamos usar esse dispositivo para criar uma rede Thread e integrar os outros dois dispositivos nela. Por ser um roteador de borda, esse dispositivo também atua como gateway para que os dispositivos na rede Thread se comuniquem pela Internet.
  2. Dois dispositivos BRD4168A (ot-cli-ftd): esses dois dispositivos vão funcionar como dispositivos de Thread completo. Elas vão se juntar à rede Thread criada pelo OTBR.