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 amplamente aos desenvolvedores a tecnologia de rede usada nos produtos Google Nest, acelerando o desenvolvimento de produtos para aplicações de 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 oferece suporte a designs de system-on-chip (SoC) e 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 Texas Instruments implementou o OpenThread para a família de dispositivos SimpleLink™ CC27xx. O repositório ot-ti no GitHub contém os drivers de plataforma e os aplicativos de exemplo necessários para executar o OpenThread em MCUs conectados SimpleLink da Texas Instruments. O CC2745R10-Q1 é um MCU sem fio IEEE 802.15.4 certificado pelo Thread e de nível automotivo (qualificado para AEC-Q100) da família SimpleLink CC27xx da TI.
Este codelab descreve como começar a desenvolver aplicativos OpenThread com a placa de avaliação LP-EM-CC2745R10-Q1 LaunchPad e o repositório ot-ti. A imagem abaixo mostra a configuração de hardware usada neste codelab, com um roteador de borda OT (OTBR) e dois dispositivos Thread Full Thread (FTDs).

O que você vai aprender
- Como configurar o ambiente de build ot-ti da Texas Instruments.
- Como criar e gravar binários da CLI OpenThread em placas LP-EM-CC2745R10-Q1.
- Como configurar um Raspberry Pi como um roteador de borda OpenThread (OTBR) usando ot-br-posix.
- Como criar uma rede Thread no OTBR.
- Provisionamento fora da banda de dispositivos em uma rede Thread.
- Como verificar a comunicação de linhas de execução entre nós usando o comando ping.
2. Pré-requisitos
Hardware
- 3 placas LP-EM-CC2745R10-Q1 LaunchPad: uma configurada como um RCP conectado ao roteador de borda e duas configuradas como dispositivos Thread completos (FTD, na sigla em inglês).
O CC2745R10-Q1 é um MCU sem fio IEEE 802.15.4 certificado pelo Thread de nível automotivo (qualificado pela AEC-Q100) na família SimpleLink CC27xx da TI. O LP-EM-CC2745R10-Q1 é o módulo de avaliação do LaunchPad correspondente e oferece suporte às funções RCP, FTD, MTD e NCP Thread. O CC2340R5 com o LaunchPad LP-EM-CC2340R5 é uma opção de memória menor que pode servir apenas como RCP. Ele não é compatível com funções de FTD, MTD ou NCP. Se você substituir um LP-EM-CC2340R5 pela placa 1 (RCP), as duas placas FTD ainda precisarão ser LP-EM-CC2745R10-Q1. - 3 sondas de depuração LP-XDS110ET: uma para cada placa LaunchPad, usadas para programação e depuração por USB.
O LP-XDS110ET é uma sonda de depuração USB separada necessária para LaunchPads no formato LP-EM. Ele inclui suporte ao EnergyTrace para criação de perfis de energia. O LP-XDS110 é uma alternativa de menor custo que oferece a mesma capacidade de programação e depuração, mas não inclui o EnergyTrace. Como outra alternativa, um LaunchPad com uma sonda de depuração XDS110 integrada (como o LAUNCHXL-CC26X2R1) pode ser usado no lugar da placa LP-EM e de uma sonda de depuração separada. Consulte o guia de conectividade de depuração do LaunchPad para mais detalhes. - 3 cabos micro USB para conectar e alimentar as placas LaunchPad e sondas de depuração.
- Um Raspberry Pi 4B ou mais recente com o Raspberry Pi OS conectado à Internet por Ethernet. Ele será configurado como o host do roteador de borda OT.

- Um sistema host Linux ou macOS com pelo menos duas portas USB e acesso à Internet. O ambiente de build exige um shell compatível com Bash. Usuários do Windows precisam usar o WSL2 (Subsistema Windows para Linux 2) com o Ubuntu.
- Pelo menos um cabo Ethernet para conectar o Raspberry Pi à Internet. Como alternativa, conecte o Raspberry Pi ao Wi-Fi e use
wlan0como a interface de infraestrutura. Consulte a etapa de configuração do OTBR para mais detalhes.
Software
- Repositório TI ot-ti: https://github.com/TexasInstruments/ot-ti
- GNU ARM Embedded Toolchain 12.2 (instalado automaticamente pelo script de bootstrap)
- SysConfig 1.27.0 (instalado automaticamente pelo script de bootstrap)
- TI UniFlash: para gravar firmware nas placas LaunchPad.
- ot-br-posix: https://github.com/openthread/ot-br-posix
- Um terminal serial, como PuTTY (Windows), minicom (Linux) ou screen (macOS/Linux)
3. Configuração de hardware
Este codelab usa três placas LP-EM-CC2745R10-Q1:
- Placa 1 (RCP): executa o firmware
ot-rcp. Conectado ao Raspberry Pi via USB como o coprocessador de rádio do roteador de borda. - Placa 2 (FTD 1): executa o firmware
ot-cli-ftdcomo um dispositivo Thread completo. - Placa 3 (FTD 2): executa o firmware
ot-cli-ftdcomo um dispositivo Thread completo.

Conecte cada LaunchPad ao computador host via microUSB. A conexão USB fornece energia e capacidade de depuração/programação pela sonda de depuração XDS110 integrada.
Cada LP-EM-CC2745R10-Q1 aparece como duas portas seriais virtuais quando conectado por USB: uma para a interface de depuração XDS110 e outra para o UART do aplicativo. Ao abrir um console serial, conecte-se à porta UART do aplicativo/usuário, não à porta de dados auxiliar.

4. Configuração e build do repositório
O sistema de build ot-ti usa o CMake e exige um shell Bash. Todos os comandos desta seção são executados no host Linux ou macOS (ou WSL2 no Windows).
1. Clonar o repositório
$ git clone https://github.com/TexasInstruments/ot-ti.git $ cd ot-ti $ git submodule update --init
2. Executar o script de bootstrap
O script de bootstrap instala as dependências necessárias, incluindo a cadeia de ferramentas GNU ARM e o SysConfig:
$ ./script/bootstrap
O script de inicialização exige cmake, git, wget e ferramentas de build padrão. No Ubuntu/Debian, instale os pré-requisitos com: sudo apt-get install -y cmake git make wget tar ninja-build
3. Criar firmware para LP_EM_CC2745R10_Q1
Crie todas as imagens de firmware para a placa LP-EM-CC2745R10-Q1:
$ ./script/build LP_EM_CC2745R10_Q1
O destino de build LP_EM_CC2745R10_Q1 corresponde ao dispositivo CC2745R10-Q1 na família CC27xx SimpleLink (núcleo Arm Cortex-M33F). Para conferir todas as placas compatíveis, execute ./script/build sem argumentos.
Após uma build bem-sucedida, os binários ELF estão em build/bin/:
$ ls build/bin/ ot-cli-ftd.out ot-cli-mtd.out ot-ncp-ftd.out ot-rcp.out
As duas imagens usadas neste codelab são:
ot-rcp.out: firmware do coprocessador de rádio para a placa do roteador de borda.ot-cli-ftd.out: firmware completo da CLI do dispositivo Thread para as duas placas FTD.
Dispositivo Thread mínimo opcional:se você quiser usar um dispositivo final em modo de espera em vez de um dispositivo Thread completo, faça o flash de ot-cli-mtd.out em vez de ot-cli-ftd.out nas placas 2 e 3. Um MTD não roteia o tráfego do Thread e pode entrar em estados de suspensão de baixo consumo de energia, o que o torna adequado para aplicativos alimentados por bateria. As etapas de formação da rede Thread neste codelab são as mesmas para os dois tipos de dispositivos.
Coprocessador de rede (NCP) opcional: o binário ot-ncp-ftd.out implementa a arquitetura NCP, em que a pilha OpenThread é executada no dispositivo e um processador host a aciona pelo protocolo Spinel. O uso do NCP está fora do escopo deste codelab. Consulte o README do NCP para mais detalhes.
5. Atualizar o firmware
Use o TI UniFlash (link em inglês) para atualizar as imagens ELF nas placas LaunchPad.
Atualizar usando o UniFlash
- Abra o UniFlash. As placas LaunchPad conectadas são mostradas em Dispositivos detectados devido ao recurso de detecção automática de dispositivos.Se a placa não for detectada automaticamente, clique em Nova configuração, selecione o destino
LP-EM-CC2745R10-Q1e escolha a sonda de depuração USB XDS110.
- Selecione Placa 1 (para ser atualizada com
ot-rcp.out) e clique em Iniciar. - Clique no botão Procurar e navegue até
ot-ti/build/bin/ot-rcp.out.
- Clique em Carregar imagem para atualizar o firmware. A área de registros mostra o progresso e confirma a conclusão.
- Repita as etapas de 2 a 4 para Quadro 2 e Quadro 3, selecionando
ot-ti/build/bin/ot-cli-ftd.outpara cada um.
Alternativa: fazer o flash usando o Code Composer Studio (CCS)
O Code Composer Studio pode ser usado como alternativa ao UniFlash e também oferece um ambiente de depuração completo:
- Faça o download e instale o Code Composer Studio.
- Crie uma conexão de destino (CCXML) para o LP-EM-CC2745R10-Q1 com o depurador XDS110. Consulte o Guia do usuário do CCS: método manual.
- Inicie uma sessão de depuração sem projeto, conforme descrito em Guia do usuário do CCS: inicialização manual.
- Conecte-se ao núcleo Arm Cortex-M33 e clique em Load para carregar a imagem ELF.
A configuração padrão do CCXML usa cJTAG de dois fios para corresponder à configuração padrão do jumper LP-EM-CC2745R10-Q1. Depois de programar via JTAG, reinicie a placa para limpar a flag de interrupção na inicialização.
6. Programar o HSM
O CC2745R10-Q1 contém um módulo de segurança de hardware (HSM) que precisa ser provisionado antes de executar o Thread ou outro firmware de aplicativo seguro. Se a placa LP-EM-CC2745R10-Q1 ainda não tiver o HSM programado, conclua esta etapa agora.
Para programar o HSM usando o UniFlash:
- Abra o UniFlash e selecione a placa LP-EM-CC2745R10-Q1 em Dispositivos detectados.
- Navegue até o painel de programação do HSM e carregue a imagem do firmware do HSM, como mostrado abaixo.

- Siga as instruções na tela para concluir o provisionamento do HSM. A operação é registrada no console de saída do UniFlash.
Consulte o Guia de início rápido do CC2745R10-Q1 no TI Resource Explorer para conferir o procedimento completo de programação do HSM, incluindo o caminho da imagem de firmware necessário no SDK SimpleLink Low Power F3.
7. Resumo do firmware
Neste ponto, todas as três placas precisam ser atualizadas:
- Placa 1 :
ot-rcp.out: desconecte do computador host e conecte ao Raspberry Pi por USB. - Quadro 2 :
ot-cli-ftd.out: mantenha a conexão com o computador host. - Placa 3 :
ot-cli-ftd.out: mantenha a conexão com o computador host.
Sua configuração de hardware será semelhante ao diagrama abaixo. A placa 1 se conecta ao Raspberry Pi como o coprocessador de rádio para o OTBR, enquanto as placas 2 e 3 permanecem conectadas ao computador host para acesso ao console serial.

8. Configurar o console serial para dispositivos ot-cli-ftd
O LP-EM-CC2745R10-Q1 expõe o UART do aplicativo via USB a 921600 baud.
Abra um terminal serial para a porta COM UART do aplicativo (Windows) ou o dispositivo /dev/ttyACM* (Linux/macOS) para cada placa FTD usando estas configurações:
Parâmetro | Valor |
Velocidade (baud) |
|
Bits de dados |
|
Bits de parada |
|
Paridade |
|
Controle de fluxo |
|
Dica (Linux/macOS): identifique o nó de dispositivo correto executando ls /dev/ttyACM* antes e depois de conectar uma placa e observando qual entrada aparece. Cada LP-EM-CC2745R10-Q1 cria duas entradas: a porta com número menor é a UART de depuração XDS110, e a porta com número maior é a UART de aplicativo. Por exemplo, se o quadro criar /dev/ttyACM0 e /dev/ttyACM1, use /dev/ttyACM1.
Dica (Windows): abra o Gerenciador de dispositivos e procure em Portas (COM e LPT) duas novas portas COM quando uma placa estiver conectada. A porta de dados de depuração XDS110 geralmente aparece primeiro. Use a segunda porta COM (de número mais alto) para o console do aplicativo.
Pressione Enter no terminal para receber um prompt da CLI do OpenThread (>). Para conferir uma lista completa de comandos disponíveis, consulte a referência da CLI do OpenThread. Verifique se o FTD está operacional:
> state disabled Done

Você ainda não vai configurar um console serial para a placa RCP. O OTBR no Raspberry Pi se comunica diretamente com o RCP. Na próxima etapa, você vai configurar o Raspberry Pi como o roteador de borda OpenThread.
9. Configurar o Raspberry Pi como um roteador de borda
O OTBR foi desenvolvido com base no ot-br-posix, o projeto de roteador de borda OpenThread de código aberto. O roteador de borda é executado no Raspberry Pi e usa a placa 1 (RCP) como rádio 802.15.4 via USB.
Configuração do Raspberry Pi
- Grave o Raspberry Pi OS (64 bits Lite ou Desktop) no cartão SD usando o Raspberry Pi Imager.
- Inicialize o Raspberry Pi e abra um terminal (via SSH ou diretamente).
- Atualize o gerenciador de pacotes e faça upgrade dos pacotes instalados:
$ sudo apt-get update $ sudo apt-get upgrade -y
Reinicie o Raspberry Pi após as atualizações antes de continuar: sudo reboot
Conecte a placa 1 (RCP) ao Raspberry Pi
Conecte a placa 1 (com o ot-rcp gravado) ao Raspberry Pi por micro USB. Depois da conexão, verifique se o nó do dispositivo aparece:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
A UART do aplicativo da placa RCP normalmente é /dev/ttyACM1 (a UART de depuração XDS110 é /dev/ttyACM0). Verifique qual porta é a UART do aplicativo conferindo se ela responde quando o agente OTBR é iniciado em uma etapa posterior. Se outros dispositivos seriais USB estiverem conectados, o número do nó do dispositivo poderá ser diferente. Ajuste o caminho na configuração do OTBR de acordo.
Criar e instalar o ot-br-posix
No Raspberry Pi, clone e crie o ot-br-posix:
$ git clone https://github.com/openthread/ot-br-posix.git $ cd ot-br-posix $ ./script/bootstrap
Execute o script de configuração, especificando sua interface Ethernet como a interface de backbone (infraestrutura):
$ INFRA_IF_NAME=eth0 ./script/setup
eth0 é o nome típico da interface Ethernet com fio. Se você estiver conectando o Raspberry Pi por Wi-Fi em vez de Ethernet, substitua eth0 por wlan0 e verifique se o Pi já está conectado à sua rede Wi-Fi. Verifique o nome da interface ativa com ip link show.
O script de configuração cria o ot-br-posix da origem, instala os serviços de sistema otbr-agent e otbr-web e configura a pilha de rede. Esse processo geralmente leva de 10 a 20 minutos em um Raspberry Pi 4B.
Configurar o agente OTBR
Edite o arquivo de configuração do agente OTBR para especificar o caminho do dispositivo RCP e a taxa de transmissão:
$ sudo nano /etc/default/otbr-agent
Localize a linha OTBR_AGENT_OPTS e atualize-a para fazer referência ao UART do aplicativo RCP:
OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
Substitua eth0 por wlan0 se o Raspberry Pi estiver conectado por Wi-Fi.
OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
A UART do aplicativo RCP LP-EM-CC2745R10-Q1 opera a 921600 bauds. Verifique se o caminho do dispositivo (/dev/ttyACM1 neste exemplo) corresponde ao UART do aplicativo da placa RCP.
Reinicie o agente OTBR para aplicar a configuração:
$ sudo systemctl restart otbr-agent $ sudo systemctl enable otbr-agent
Verifique se o agente está em execução:
$ sudo systemctl status otbr-agent
Interagir com o nó RCP
Comunique-se com o nó RCP usando a ferramenta ot-ctl:
$ sudo ot-ctl state disabled Done
Monitore o registro do agente OTBR para mensagens de conexão e status:
$ sudo journalctl -u otbr-agent -f
A interface da Web do OTBR está disponível em http:// e oferece uma visualização gráfica da rede Thread.
Para interromper ou reiniciar o agente OTBR:
$ sudo systemctl stop otbr-agent $ sudo systemctl start otbr-agent
Neste ponto, você terá três consoles ativos:
- Terminal serial para Board 2 (
ot-cli-ftd 1) no computador host. - Terminal serial para Board 3 (
ot-cli-ftd 2) no computador host. - Sessão de SSH ou terminal no Raspberry Pi para
ot-ctl(OTBR/RCP).
Agora você já pode formar uma rede Thread.
10. Criar uma rede Thread
Configurar o RCP (OTBR)
Crie uma rede Thread no shell ot-ctl do Raspberry Pi. Insira os seguintes comandos em ordem:
Índice | Comando | Descrição | Resposta esperada | ||
1 |
| Crie uma nova configuração de rede. | Concluído | ||
2 |
| Confirme o novo conjunto de dados no conjunto de dados operacional ativo. | 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 do Thread apareça. | |||||
5 |
| Verifique o estado do dispositivo. Ele precisa ser leader. Outros estados possíveis: offline, desativado, desconectado, filho, roteador ou líder. | líder | ||
6 |
| Confira a configuração de rede. Seus valores serão diferentes. Anote o canal, a chave de rede, o nome da rede e o ID do PAN. Eles são necessários para conectar FTDs à rede. | Active Timestamp: 1 | ||
Adicionar FTDs à rede Thread (método fora da banda)
Usando o método de provisionamento fora da banda, você fornece as credenciais de rede diretamente. No terminal serial de cada placa FTD, insira os comandos a seguir usando a chave de canal e de rede da saída do conjunto de dados OTBR acima:
Índice | Comando | Descrição | Resposta esperada | ||
1 |
| Defina o canal para corresponder ao OTBR. Substitua | Concluído | ||
2 |
| Defina a chave de rede. Substitua pela chave de rede do OTBR. Apenas essa chave é necessária para anexar. | Concluído | ||
3 |
| Confirme o novo conjunto de dados no conjunto de dados operacional ativo. | 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 |
| Verifique o estado do dispositivo. | criança | ||
Devido à natureza de autoconfiguração das redes Thread e ao fato de serem dispositivos Thread completos, um ou os dois FTDs podem se tornar roteadores. É possível verificar a função atual a qualquer momento com o comando state.
Comunicação entre dispositivos Thread
Use o comando ping para verificar se os dispositivos podem se comunicar. Consiga os endereços IPv6 de cada dispositivo com 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) Done
Em ambos os FTDs, faça ping no OTBR usando o endereço RLOC:
> 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
Uma resposta bem-sucedida confirma que a rede Thread está funcionando e que os dispositivos podem se comunicar. Repita o processo para fazer ping em cada FTD do OTBR (sudo ot-ctl ping ).
11. Parabéns
Você criou uma rede Thread com placas TI CC2745R10-Q1.
Agora você sabe:
- Como configurar o ambiente de build ot-ti da Texas Instruments.
- Como criar e gravar binários da CLI do OpenThread no LaunchPad LP-EM-CC2745R10-Q1.
- Como configurar um Raspberry Pi como um roteador de borda OpenThread (OTBR) usando ot-br-posix.
- Como criar uma rede Thread no OTBR.
- Provisionamento fora da banda de dispositivos em uma rede Thread.
- Como verificar a comunicação de linhas de execução entre 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.
- Repositório TI ot-ti: implementação do OpenThread da TI para dispositivos SimpleLink, com instruções de build e notas da versão.
- Página do produto CC2745R10-Q1: ficha técnica do dispositivo, projetos de referência e outras documentações
- LP-EM-CC2745R10-Q1 LaunchPad: guia do usuário da placa de avaliação e arquivos de hardware
- Referência da CLI OpenThread: visão geral da CLI OpenThread e do uso dela.
- Comandos da CLI do OpenThread: referência completa de todos os comandos da CLI do OpenThread.
- Comunidade TI E2E — Thread e Zigbee: comunidade de suporte técnico para produtos de conectividade sem fio da Texas Instruments.