1. Introdução

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.

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

- 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.
- 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.
- 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
- BRD4166A Thunderboard Sense 2 EFR32MG12, conforme mostrado à esquerda.
- Dois BRD4168A EFR32MG13, conforme mostrado à direita.
- Simplicity Studio v5 instalado em um macOS Catalina 10.15.7 com
- SDK do Gecko 3.2.0
- GNU ARM v7.2.1


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.

4. Configuração do firmware
Há duas maneiras de começar. As duas opções permitem atualizar os firmwares necessários para este codelab.
- Projetos: (recomendado) crie, crie e faça o flash de um aplicativo de amostra. Essa opção permite personalizar o aplicativo no projeto.OU
- 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.
- 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.0eOpenThread 2.0.1.0 (GitHub-55af6ce2c). - IDE/ Toolchain: a cadeia de ferramentas que será usada para compilar o projeto OT. Usamos GNU ARM.

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

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

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

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.

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.
- 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".

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

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

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.

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.

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.

Configuração do Raspberry Pi
- No cartão SD, faça o flash da imagem do SO Raspbian Stretch Lite ou do Raspbian Stretch com área de trabalho.
- Você pode fazer SSH no Raspberry Pi ou trabalhar diretamente com o Raspbian Desktop. Abra um terminal.
- 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
- Instale o Docker com o seguinte comando no RPi.
curl -sSL https://get.docker.com | sh
- 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
- 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
- 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/ttyUSB0ou/dev/ttyACM0. - 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
-dgarante 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. --namepermanece 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.
- Dois consoles
ot-cli-ftdno Simplicity Studio configurados como dispositivos Full Thread. - Um shell interativo
ot-ctlno 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 |
| Crie uma nova configuração de rede. | Concluído | ||
2 |
| Confirme o novo conjunto de dados no conjunto de dados operacionais ativos. | Concluído | ||
3 |
| Ative a interface Thread. | Concluído | ||
4 |
| 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 |
| Verifique o estado do dispositivo. Ele precisa ser o líder. | Líder | ||
6 |
| Confira a configuração de rede. | Active Timestamp: 1 | ||
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 |
| Defina o canal usado pelo OTBR. | Concluído | ||
2 |
| Apenas a chave de rede é necessária para que um dispositivo se conecte a uma rede Thread. | Concluído | ||
3 |
| Confirme o novo conjunto de dados no conjunto de dados operacionais ativos. | Concluído | ||
4 |
| Ative a interface Thread. | Concluído | ||
5 |
| Ative e anexe a operação do protocolo Thread. | Concluído | ||
Aguarde 20 segundos enquanto o dispositivo entra e se configura. | |||||
6 |
| Ver a configuração de rede. | criança | ||
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:
- Plataformas compatíveis: descubra todas as plataformas que oferecem suporte ao OpenThread.
- Criar o OpenThread: mais detalhes sobre como criar e configurar o OpenThread.
- Fundamentos de linhas de execução: aborda todos os conceitos de linhas de execução apresentados neste codelab.
- Treinamento do OpenThread da Silicon Labs: uma introdução ao OpenThread, que aborda o provisionamento e os roteadores de borda, além de um exercício prático de criação de uma rede OpenThread.
- QSG170: Guia de início rápido do OpenThread da Silicon Labs: aborda em detalhes o processo de início do desenvolvimento do Thread da Silicon Labs.
- AN1256: Using the Silicon Labs RCP with the OpenThread Border Router: instruções de build e instalação para o host do roteador de borda do Raspberry Pi
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".

As imagens de aplicativos de demonstração pré-compiladas fornecidas com o SDK do OpenThread são compatíveis com as seguintes placas:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- 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.
- 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.
- 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.