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

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

1. Introdução

26b7f4f6b3ea0700.png

A OpenThread (OT) do Google é uma implementação de código aberto da Thread. O Google lançou o OpenThread para disponibilizar a tecnologia de rede usada nos produtos Google Nest a mais desenvolvedores. Assim, é possível acelerar o desenvolvimento de produtos para casas residenciais e 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 coprocessador de rede (NCP).

A Especificação de Thread define um protocolo de comunicação dispositivo a dispositivo sem fio confiável, seguro e de baixo consumo de energia para aplicativos residenciais e comerciais.

O Silicon Labs melhorou o OpenThread para funcionar com o hardware 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. Ele é compatível com uma variedade maior de hardware do que a versão do GitHub e inclui documentação e aplicativos de exemplo que não estão disponíveis no GitHub.

Este guia descreve como começar a desenvolver aplicativos OpenThread usando o SDK Silicon Labs OpenThread e Simplicity Studio 5. A imagem abaixo mostra as placas (BRDs) e o hardware configurado com um roteador de borda OT (OTBR, na sigla em inglês) e dois dispositivos de linha de execução usados no codelab.

Configuração do hardware EFR32MG

O que você vai aprender

  • Como criar um projeto do OpenThread usando o ambiente de desenvolvimento integrado do Silicon Labs Simplicity Studio.
  • Como criar e atualizar os binários da CLI do OpenThread em placas de rádio do 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.
  • Comissionamento fora de banda dos dispositivos em uma rede Thread.
  • Como verificar a comunicação da linha de execução entre os nós usando o comando ping.

2. Prerequisites

Hardware:

  1. Três placas de rádio EFR32MGxx: qualquer combinação desses dispositivos pode ser usada. Este codelab usa uma BRD4166A como a RCP e duas BRD4168As como dispositivos de linha de execução completa.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Se estiver começando do zero, você poderá usar um dos Kits de linha de execução EFR32 Thread com as placas listadas acima.
  2. BRD4001A: Placas principais sem fio (WSTK) para hospedar as placas de rádio. Com exceção da BRD4166A, todas as lousas de rádio precisam de uma placa principal. Cabos mini USB para conectar e alimentar as placas principais ou o cabo micro USB para o BRD4166A.

AEM WSTK

  1. Um Raspberry Pi 3B ou superior com imagem Raspbian Stretch Lite OS ou Raspbian Stretch with Desktop conectado à Internet via Ethernet. Configuramos isso como um roteador de borda OT.
  2. Um sistema host do Windows/Linux/Mac com pelo menos duas portas USB e uma conexão de Internet. Verifique os requisitos de hardware e de SO 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 em IP. Assim, você pode usar cabos Ethernet adicionais para conectar o WSTK ao seu sistema host usando um alternador Ethernet.

Software:

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

3. Configuração de hardware

Este codelab foi criado usando

  1. FRD4166A Thunderboard Sense 2 de EFR32MG12, conforme mostrado à esquerda.
  2. Dois EFR32MG13 BRD4168A, 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 kit sem fio inicial ao computador host via USB, como mostra a imagem abaixo. Essas conexões permitirão a programação e a análise de rede do RCP e dos dispositivos finais. Primeiro, usaremos o computador host para programar o BRD4166A com o firmware ot-rcp e, em seguida, conectá-lo ao Raspberry Pi. Os dispositivos finais também podem estar conectados ao computador host por um alternador Ethernet comum. Os kits iniciais também são compatíveis com 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, crie e atualize um aplicativo de amostra. Esta opção permite personalizar o aplicativo no projeto.
  2. Demonstrações: (opcional) atualize as demonstrações pré-criadas diretamente na placa de rádio de qualquer um dos aplicativos de exemplo. Incentivamos os usuários a testar o firmware das demonstrações como um exercício opcional. Para mais detalhes, consulte a seção "Configuração de firmware opcional - Demonstrações" no fim deste codelab.

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

Criar projetos usando exemplos

Criaremos 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 aplicativo de amostra adequado para sua placa.

  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" será aberta. Não altere o conjunto de ferramentas padrão ambiente de desenvolvimento integrado / Simplicity compatível com o OpenThread. Clique em "Próxima".
    • Placas de destino: mostra a placa de rádio selecionada (BRD4168A) com a placa principal (BRD4001A)
    • Dispositivo de destino: este campo mostra a placa do microcontrolador (MCU) integrada. A BRD4168A tem uma MCU EFR32MG13 integrada.
    • 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 a versão do Silicon Labs do OpenThread, por exemplo, Platform 4.0.1.0 e OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: o conjunto de ferramentas que será usado para compilar o projeto do OT. Usamos o GNU ARM.

Novo assistente de projeto

  1. A caixa de diálogo "Exemplo de seleção de projeto" será aberta. Você verá uma lista de projetos de exemplo. Use os tipos de tecnologia Thread e os filtros de palavras-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 roteador de borda. Selecione ot-cli-ftd e clique em PRÓXIMA.

Etapa 2 do assistente de novos projetos

  1. A caixa de diálogo "Project Configuration" é aberta. Aqui você pode renomear seu projeto, mudar o local do arquivo de projeto padrão e determinar se os arquivos do projeto serão vinculados ou copiados. Os arquivos de projetos vinculados direcionam para o SDK, e todas as modificações feitas são feitas no SDK e usadas em projetos futuros. Copiar as fontes do projeto permite editar uma cópia local para que os arquivos do SDK permaneçam intactos. "Vincular o SDK e copiar origens do projeto' é a opção padrão e a recomendada. Clique em CONCLUIR.

Etapa 3 do assistente de novos projetos

  1. O Simplicity IDE Perspective abre com o Project Configurator aberto na guia OVERVIEW.

Visão geral do projeto

Para configurar o projeto, acesse a guia Componentes do software e instale e desinstale os componentes. 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 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 de software

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

Criar e atualizar os projetos

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

  1. Depois de configurar o projeto, clique no controle de compilação (ícone de martelo) na barra de ferramentas superior. Como alternativa, você pode clicar com o botão direito do mouse no projeto e clicar no projeto build.

Botão "Criar projeto"

  1. O progresso é exibido no Console e na barra de progresso no canto inferior direito. Todos os erros ou avisos relacionados ao projeto também aparecerão nessa janela de saída.

Janela de saída da versão do projeto

  1. As imagens binárias são geradas após a criação de um 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 Flash para dispositivo. Se você tiver mais de um dispositivo conectado, selecione um dispositivo para programar, clique em OK. O Programador Flash é aberto com o caminho de arquivo preenchido. Clique em PROGRAMA.

Flash

5. Resumo da configuração do firmware

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

Depois de preencher esta seção, o hardware de rede Thread terá esta aparência.

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 "View / Debug Adapters Devices". Escolha Launch 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ê perceberá que ainda não temos um console para ot-rcp. Na próxima etapa, configuraremos o Raspberry Pi como roteador de borda OT e configuraremos o console para ot-rcp.

7. Configurar o Raspberry Pi como 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 implantáveis e a prototipagem e testes rápidos do desenvolvimento.

As imagens OTBR do Silicon Labs são hospedadas no hubs Siliconlabsinc com tags. Cada tag corresponde a uma versão do GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags (em inglês)

Os contêineres do Docker precisam ser usados com RCPs criados com o Simplicity Studio 5 para uma determinada versão. Combine uma versão de tag de contêiner com a versão do GSDK que você está usando. Por exemplo, se a versão do GDSK era Gecko SDK Suite v4.0.1 (140) quando você selecionou ot-rcp na janela Exemplo de seleção de projeto, 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 Raspbian Stretch Lite OS ou Raspbian Stretch with Desktop.
  2. Você pode usar o SSH no Raspberry Pi ou trabalhar com o Raspbian Desktop diretamente. Abra um terminal.
  3. Lembre-se de atualizar seus repositórios locais e o gerenciador de pacotes (apt-get update e apt-get upgrade antes de instalar o Docker).

Instalar imagem do Docker

  1. Instale o Docker com o seguinte comando na sua RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Quando terminar, você poderá modificar as configurações de usuário do Docker para não exigir sudo antes de cada comando. Reinicialização necessária.
    sudo usermod -aG docker $USER
    
  3. Use os comandos a seguir para instalar os contêineres. Você pode ter apenas um contêiner do roteador de borda em execução por vez com seu RCP. Além disso, verifique se a versão do GSDK do Simplicity Studio é associada à imagem do Docker correta. Por exemplo, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configurar e executar o docker

  1. É preciso configurar a porta TTY que você quer usar para o OTBR conectar 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. Lembre-se de substituir o nome da imagem do 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 independente.
    • É possível ver os registros em execução do contêiner a qualquer momento usando o comando docker logs.
    • --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 do 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ó RCP

Quando o docker está 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 receber uma lista dos IDs de contêiner em execução

$ docker ps -aq

Confira a janela que executa o contêiner do Docker do OTBR para executar a saída do registro do roteador de borda ou siga o registro do contêiner da seguinte maneira:

$ docker logs [container-id] -f

Outra opção é interromper, remover ou eliminar 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.

Você já precisa ter três consoles.

  1. Dois consoles ot-cli-ftd no Simplicity Studio configurados como dispositivos de linha de execução completa.
  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 comunicação com o nó RCP. Digite 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.

Fechar

2

dataset commit active

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

Fechar

3

ifconfig up

Ativar a interface Thread.

Fechar

4

thread start

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

Fechar

Aguarde 10 segundos para que a interface fique ativa.

5

state

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

Líder
concluído

6

dataset

Veja 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 ID do PAN.

Carimbo de data/hora ativo: 1
Canal: 20
Máscara de canal: 0x07fff800
Código de PAN da malha: 39ba71f7fc367160
Prefixo local da malha: fd5c:c6b:3a17:40b9::/64
Chave de rede: 81ae2c2c17360252555000000000000500000050

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

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

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

Índice

Comando

Descrição do comando

Resposta esperada

1

dataset channel 20

Define o canal usado pelo OTBR.

Fechar

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Apenas a chave de rede é necessária para a conexão de um dispositivo a uma rede Thread.

Fechar

3

dataset commit active

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

Fechar

4

ifconfig up

Ativar a interface Thread.

Fechar

5

thread start

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

Fechar

Aguarde 20 segundos enquanto o dispositivo é configurado e configurado.

6

state

Veja a configuração de rede.

criança
concluída

Comunicação entre dispositivos com linha de execução

Usaremos 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. Para consegui-los, use 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)

Em ambos os FTDs, dê um ping no OTBR usando o endereço RLOC do OTBR's.

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

9. Parabéns

Você criou uma rede Thread.

Agora você sabe:

  • Como criar um projeto do OpenThread usando o ambiente de desenvolvimento integrado do Silicon Labs Simplicity Studio.
  • Como criar e atualizar os binários da CLI do OpenThread em placas de rádio do 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.
  • Comissionamento fora de banda dos dispositivos em uma rede Thread.
  • Como verificar a comunicação da linha de execução entre os nós usando o comando ping.

Leitura adicional

Acesse openthread.io e GitHub para ver uma variedade de recursos do OpenThread, incluindo:

10. Configuração de firmware opcional: 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 parte na visualização "Debug Adapters" e acessar a guia "EXAMPLE PROJECTS & DEMOS" na tela de início. Desative o filtro "Exemplos de projetos" e marque a caixa de seleção "Thread de conversa" em "Tipo de tecnologia".

Demonstrações do Studio

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

  1. BRD 4.161a
  2. BRD 4.166
  3. BRD 4.168
  4. BRD 4.180
  5. BRD4304A

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

Atualize as seguintes demonstrações nas tabelas. Para atualizar, selecione a placa em "Adaptadores de depuração" à esquerda e clique em "EXECUTAR" para os apps de amostra correspondentes. Uma janela pop-up exibirá o progresso do flash.

  1. BRD4166A: ot-rcp: este dispositivo funcionará como um processador de Radio Co para o roteador de borda OT. Usaremos o dispositivo para criar uma rede Thread e integrar os outros dois na rede Thread. Como um roteador de borda, este dispositivo também funciona como um gateway para os dispositivos da rede Thread se comunicarem pela Internet.
  2. Dois BRD4168A: ot-cli-ftd: esses dois dispositivos atuarão como dispositivos de linha de execução completa. Eles participarão da rede Thread criada pelo OTBR.