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 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.
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:
- 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)
- 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.
- 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.
- 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.
- 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
- EFR32MG12 BRD4166A Thunderboard Sense 2, como mostrado à esquerda.
- Dois EFR32MG13 BRD4168A, como mostrado à direita.
- Simplicity Studio v5 instalado em um macOS Catalina 10.15.7 com
- SDK da Gecko 3.2.0
- GNU ARM v7.2.1
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.
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.
- Projetos: (recomendado) crie, desenvolva e atualize um aplicativo de exemplo. Essa opção permite personalizar o aplicativo no projeto.OU
- 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.
- 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
eOpenThread 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.
- 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.
- 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.
- A perspectiva da Simplicidade do IDE é aberta com o Configurador do projeto aberto na guia VISÃO GERAL.
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".
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
.
- 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".
- 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.
- 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.
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.
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.
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
.
Configuração do Raspberry Pi
- No cartão SD, atualize a imagem do SO Raspbian esticar Lite ou o Raspbian esticar com computador.
- Você pode usar 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).
Instale a imagem Docker
- Instale o Docker com o seguinte comando na sua RPi.
curl -sSL https://get.docker.com | sh
- 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
- 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
- É 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
. - 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.
- Dois consoles
ot-cli-ftd
no Simplicity Studio que são configurados como dispositivos Thread completo. - 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 |
| Crie uma configuração de rede. | Concluído | ||
2 |
| Confirme o novo conjunto de dados com o conjunto de dados operacional ativo. | Concluído | ||
3 |
| Ativar a interface Thread. | Concluído | ||
4 |
| 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 |
| Verifique o estado do dispositivo. Deve ser o líder. | Leader | ||
6 |
| Confira a configuração da rede. |
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 |
| Define o canal usado pelo OTBR. | Concluído | ||
2 |
| Apenas a chave de rede é necessária para que um dispositivo seja conectado a uma rede Thread. | Concluído | ||
3 |
| Confirme o novo conjunto de dados com o conjunto de dados operacional ativo. | Concluído | ||
4 |
| Ativar a interface Thread. | Concluído | ||
5 |
| Ativar e anexar a operação do protocolo Thread. | Concluído | ||
Aguarde 20 segundos enquanto o dispositivo é conectado e se configura. | |||||
6 |
| Veja a configuração da 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. 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:
- Plataformas compatíveis: descubra todas as plataformas compatíveis com o OpenThread
- Build OpenThread: mais detalhes sobre a criação e a configuração do OpenThread
- Thread Primer: abrange todos os conceitos do Thread apresentados neste codelab.
- Treinamento sobre OpenThread da Silicon Labs: uma introdução ao OpenThread, com discussões sobre comissionamento e 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 Silicon Labs OpenThread (em inglês): aborda em detalhes o processo inicial de desenvolvimento de Threads do Silicon Labs
- AN1256: como usar o RCP do Silicon Labs com o roteador de borda do OpenThread: instruções de criação e instalação do 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 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".
As imagens pré-compiladas do aplicativo de demonstração 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 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.
- 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.
- 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.