1. Introduzione

OpenThread (OT) di Google è un'implementazione open source di Thread. Google ha rilasciato OpenThread per rendere la tecnologia di rete utilizzata nei prodotti Google Nest ampiamente disponibile agli sviluppatori, accelerando lo sviluppo di prodotti per la casa connessa e applicazioni per edifici commerciali. Grazie a un livello di astrazione della piattaforma ristretto e a un footprint della memoria ridotto, OpenThread è altamente portabile. Supporta sia i progetti system-on-chip (SoC) che quelli di coprocessore di rete (NCP).
La specifica Thread definisce un protocollo di comunicazione wireless affidabile, sicuro e a basso consumo basato su IPv6 per applicazioni domestiche e commerciali.
Texas Instruments ha implementato OpenThread per la famiglia di dispositivi SimpleLink™ CC27xx. Il repository ot-ti su GitHub contiene i driver della piattaforma e le applicazioni di esempio necessari per eseguire OpenThread su MCU connesse SimpleLink di Texas Instruments. CC2745R10-Q1 è una MCU wireless IEEE 802.15.4 con certificazione Thread di livello automobilistico (qualificata AEC-Q100) della famiglia SimpleLink CC27xx di TI.
Questo codelab descrive come iniziare a sviluppare applicazioni OpenThread con la scheda di valutazione LaunchPad LP-EM-CC2745R10-Q1 e il repository ot-ti. L'immagine seguente mostra la configurazione hardware utilizzata in questo codelab, con un router di confine OT (OTBR) e due dispositivi Thread Full Thread (FTD).

Obiettivi didattici
- Come configurare l'ambiente di build ot-ti di Texas Instruments.
- Come creare e caricare i binari della CLI OpenThread sulle schede LP-EM-CC2745R10-Q1.
- Come configurare un Raspberry Pi come OpenThread Border Router (OTBR) utilizzando ot-br-posix.
- Come creare una rete Thread sull'OTBR.
- Messa in servizio out-of-band dei dispositivi su una rete Thread.
- Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.
2. Prerequisiti
Hardware
- 3 schede LaunchPad LP-EM-CC2745R10-Q1: una configurata come RCP connesso al router di confine e due configurate come dispositivi Thread completi (FTD).
CC2745R10-Q1 è una MCU wireless IEEE 802.15.4 con certificazione Thread di livello automotive (qualificata AEC-Q100) nella famiglia SimpleLink CC27xx di TI. LP-EM-CC2745R10-Q1 è il modulo di valutazione LaunchPad corrispondente e supporta i ruoli RCP, FTD, MTD e NCP Thread. CC2340R5 con LP-EM-CC2340R5 LaunchPad è un'opzione con meno memoria che può fungere solo da RCP. Non supporta i ruoli FTD, MTD o NCP. Se sostituisci una LP-EM-CC2340R5 con la scheda 1 (RCP), le due schede FTD devono comunque essere LP-EM-CC2745R10-Q1. - 3 sonde di debug LP-XDS110ET: una per scheda LaunchPad, utilizzate per la programmazione e il debug tramite USB.
LP-XDS110ET è una sonda di debug USB separata necessaria per le LaunchPad nel fattore di forma LP-EM. Include il supporto di EnergyTrace per la profilazione del consumo energetico. LP-XDS110 è un'alternativa a costo inferiore che offre le stesse funzionalità di programmazione e debug, ma non include EnergyTrace. In alternativa, è possibile utilizzare un LaunchPad con una sonda di debug XDS110 integrata (come LAUNCHXL-CC26X2R1) al posto della scheda LP-EM e di una sonda di debug separata. Per informazioni dettagliate, consulta la guida alla connettività di debug di LaunchPad. - 3 cavi micro USB per collegare e alimentare le schede LaunchPad e le sonde di debug.
- Raspberry Pi 4B o versioni successive con Raspberry Pi OS connesso a internet tramite Ethernet. Verrà configurato come host del router di confine OT.

- Un sistema host Linux o macOS con almeno 2 porte USB e accesso a internet. L'ambiente di build richiede una shell compatibile con Bash. Gli utenti Windows devono utilizzare WSL2 (Windows Subsystem for Linux 2) con Ubuntu.
- Almeno un cavo Ethernet per collegare Raspberry Pi a internet. In alternativa, puoi connettere Raspberry Pi al Wi-Fi e utilizzare
wlan0come interfaccia dell'infrastruttura. Per maggiori dettagli, consulta il passaggio di configurazione di OTBR.
Software
- Repository TI ot-ti: https://github.com/TexasInstruments/ot-ti
- GNU ARM Embedded Toolchain 12.2 (installato automaticamente dallo script di bootstrap)
- SysConfig 1.27.0 (installato automaticamente dallo script di bootstrap)
- TI UniFlash: per il flashing del firmware sulle schede LaunchPad
- ot-br-posix: https://github.com/openthread/ot-br-posix
- Un terminale seriale come PuTTY (Windows), minicom (Linux) o screen (macOS/Linux)
3. Configurazione hardware
Questo codelab utilizza tre schede LP-EM-CC2745R10-Q1:
- Scheda 1 (RCP): esegue il firmware
ot-rcp. Collegato a Raspberry Pi tramite USB come coprocessore radio per il router di confine. - Scheda 2 (FTD 1): esegue il firmware
ot-cli-ftdcome dispositivo Full Thread. - Scheda 3 (FTD 2): esegue il firmware
ot-cli-ftdcome dispositivo Full Thread.

Collega ogni Launchpad al computer host tramite micro USB. La connessione USB fornisce sia l'alimentazione che la funzionalità di debug/programmazione tramite la sonda di debug XDS110 integrata.
Ogni LP-EM-CC2745R10-Q1 viene visualizzato come due porte seriali virtuali quando è collegato tramite USB: una per l'interfaccia di debug XDS110 e una per la UART dell'applicazione. Quando apri una console seriale, connettiti alla porta UART applicazione/utente, non alla porta dati ausiliari.

4. Configurazione e build del repository
Il sistema di compilazione ot-ti utilizza CMake e richiede una shell Bash. Tutti i comandi in questa sezione vengono eseguiti sull'host Linux o macOS (o WSL2 su Windows).
1. Clona il repository
$ git clone https://github.com/TexasInstruments/ot-ti.git $ cd ot-ti $ git submodule update --init
2. Esegui lo script di bootstrap
Lo script di bootstrap installa le dipendenze richieste, tra cui la toolchain GNU ARM e SysConfig:
$ ./script/bootstrap
Lo script di bootstrap richiede cmake, git, wget e strumenti di compilazione standard. Su Ubuntu/Debian, installa i prerequisiti con: sudo apt-get install -y cmake git make wget tar ninja-build
3. Crea firmware per LP_EM_CC2745R10_Q1
Crea tutte le immagini firmware per la scheda LP-EM-CC2745R10-Q1:
$ ./script/build LP_EM_CC2745R10_Q1
La destinazione di build LP_EM_CC2745R10_Q1 corrisponde al dispositivo CC2745R10-Q1 della famiglia CC27xx SimpleLink (core Arm Cortex-M33F). Per visualizzare tutte le schede supportate, esegui ./script/build senza argomenti.
Dopo una build riuscita, i binari ELF si trovano in build/bin/:
$ ls build/bin/ ot-cli-ftd.out ot-cli-mtd.out ot-ncp-ftd.out ot-rcp.out
Le due immagini utilizzate in questo codelab sono:
ot-rcp.out: firmware del coprocessore radio per la scheda del router di confine.ot-cli-ftd.out: firmware della CLI Full Thread Device per le due schede FTD.
Dispositivo Thread minimo opzionale:se vuoi esplorare un dispositivo di destinazione inattivo anziché un dispositivo Thread completo, puoi eseguire il flashing di ot-cli-mtd.out al posto di ot-cli-ftd.out sulle schede 2 e 3. Un MTD non instrada il traffico Thread e può entrare in stati di sospensione a basso consumo energetico, il che lo rende adatto ad applicazioni alimentate a batteria. I passaggi di formazione della rete Thread in questo codelab sono gli stessi per entrambi i tipi di dispositivi.
Coprocessore di rete (NCP) opzionale: il binario ot-ncp-ftd.out implementa l'architettura NCP, in cui lo stack OpenThread viene eseguito sul dispositivo e un processore host lo gestisce tramite il protocollo Spinel. L'utilizzo di NCP non rientra nell'ambito di questo codelab. Per maggiori dettagli, consulta il file README di NCP.
5. Flash Firmware
Utilizza TI UniFlash per copiare le immagini ELF sulle schede LaunchPad.
Flash con UniFlash
- Apri UniFlash. Le schede LaunchPad connesse vengono visualizzate in Dispositivi rilevati grazie alla funzionalità di rilevamento automatico dei dispositivi.Se la scheda non viene rilevata automaticamente, fai clic su Nuova configurazione, seleziona la destinazione
LP-EM-CC2745R10-Q1e scegli la sonda di debug USB XDS110.
- Seleziona Scheda 1 (da flashare con
ot-rcp.out) e fai clic su Avvia. - Fai clic sul pulsante Sfoglia e vai a
ot-ti/build/bin/ot-rcp.out.
- Fai clic su Carica immagine per installare il firmware. L'area dei log mostra l'avanzamento e conferma il completamento.
- Ripeti i passaggi 2-4 per Board 2 e Board 3, selezionando
ot-ti/build/bin/ot-cli-ftd.outper ciascuna.
Alternativa: flash con Code Composer Studio (CCS)
Code Composer Studio può essere utilizzato in alternativa a UniFlash e fornisce inoltre un ambiente di debug completo:
- Scarica e installa Code Composer Studio.
- Crea una connessione di destinazione (CCXML) per LP-EM-CC2745R10-Q1 con il debugger XDS110. Consulta la Guida dell'utente di CCS: metodo manuale.
- Avvia una sessione di debug senza progetto come descritto nella Guida dell'utente di CCS: avvio manuale.
- Connettiti al core Arm Cortex-M33 e fai clic su Carica per caricare l'immagine ELF.
La configurazione CCXML predefinita utilizza cJTAG a 2 fili per corrispondere alla configurazione del ponticello LP-EM-CC2745R10-Q1 predefinita. Dopo la programmazione tramite JTAG, riavvia la scheda per cancellare il flag di arresto all'avvio.
6. Programmare l'HSM
CC2745R10-Q1 contiene un modulo di sicurezza hardware (HSM) che deve essere sottoposto al provisioning prima di eseguire Thread o altro firmware di applicazioni sicure. Se la scheda LP-EM-CC2745R10-Q1 non è ancora stata programmata con l'HSM, completa questo passaggio ora.
Per programmare l'HSM utilizzando UniFlash:
- Apri UniFlash e seleziona la scheda LP-EM-CC2745R10-Q1 da Detected Devices (Dispositivi rilevati).
- Vai al pannello di programmazione HSM e carica l'immagine del firmware HSM come mostrato di seguito.

- Segui le istruzioni sullo schermo per completare il provisioning dell'HSM. L'operazione viene registrata nella console di output di UniFlash.
Consulta la guida di avvio rapido CC2745R10-Q1 in TI Resource Explorer per la procedura completa di programmazione HSM, incluso il percorso dell'immagine firmware richiesta all'interno dell'SDK SimpleLink Low Power F3.
7. Riepilogo firmware
A questo punto, tutte e tre le schede dovrebbero essere flashate:
- Scheda 1:
ot-rcp.out: disconnettiti dal computer host e connettiti a Raspberry Pi tramite USB. - Scheda 2:
ot-cli-ftd.out: mantieni la connessione al computer host. - Scheda 3:
ot-cli-ftd.out: mantieni la connessione al computer host.
La configurazione dell'hardware sarà simile al diagramma riportato di seguito. La scheda 1 si connette a Raspberry Pi come coprocessore radio per OTBR, mentre le schede 2 e 3 rimangono connesse al computer host per l'accesso alla console seriale.

8. Configurare la console seriale per i dispositivi ot-cli-ftd
LP-EM-CC2745R10-Q1 espone la UART dell'applicazione tramite USB a 921600 baud.
Apri un terminale seriale sulla porta COM UART dell'applicazione (Windows) o sul dispositivo /dev/ttyACM* (Linux/macOS) per ogni scheda FTD utilizzando queste impostazioni:
Parametro | Valore |
Velocità (baud) |
|
Bit di dati |
|
Bit di stop |
|
Parità |
|
Controllo del flusso |
|
Suggerimento (Linux/macOS): identifica il nodo del dispositivo corretto eseguendo ls /dev/ttyACM* prima e dopo aver collegato una scheda e annotando quale voce viene visualizzata. Ogni LP-EM-CC2745R10-Q1 crea due voci: la porta con numero inferiore è la UART di debug XDS110 e la porta con numero superiore è la UART dell'applicazione. Ad esempio, se il tabellone crea /dev/ttyACM0 e /dev/ttyACM1, utilizza /dev/ttyACM1.
Suggerimento (Windows): apri Gestione dispositivi e cerca due nuove porte COM in Porte (COM e LPT) quando una scheda è collegata. La porta dati di debug XDS110 in genere viene visualizzata per prima. Utilizza la seconda porta COM (con numero più alto) per la console dell'applicazione.
Premi Invio nel terminale per visualizzare il prompt della CLI OpenThread (>). Per un elenco completo dei comandi disponibili, consulta la documentazione di riferimento della CLI OpenThread. Verifica che FTD sia operativo:
> state disabled Done

Non configurerai ancora una console seriale per la scheda RCP. OTBR su Raspberry Pi comunica direttamente con RCP. Nel passaggio successivo, configurerai Raspberry Pi come router di confine OpenThread.
9. Configurare Raspberry Pi come router di confine
OTBR è basato su ot-br-posix, il progetto open source OpenThread Border Router. Il router di confine viene eseguito su Raspberry Pi e utilizza la scheda 1 (RCP) come radio 802.15.4 tramite USB.
Configurazione di Raspberry Pi
- Installa Raspberry Pi OS (64 bit Lite o Desktop) sulla scheda SD utilizzando Raspberry Pi Imager.
- Avvia Raspberry Pi e apri un terminale (tramite SSH o direttamente).
- Aggiorna il gestore di pacchetti ed esegui l'upgrade dei pacchetti installati:
$ sudo apt-get update $ sudo apt-get upgrade -y
Riavvia Raspberry Pi dopo gli aggiornamenti prima di procedere: sudo reboot
Collega la scheda 1 (RCP) a Raspberry Pi
Collega Board 1 (con flash ot-rcp) a Raspberry Pi tramite micro USB. Dopo la connessione, verifica che venga visualizzato il nodo del dispositivo:
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
La UART dell'applicazione della scheda RCP è in genere /dev/ttyACM1 (la UART di debug XDS110 è /dev/ttyACM0). Verifica quale porta è la UART dell'applicazione controllando che risponda quando l'agente OTBR viene avviato in un passaggio successivo. Se sono collegati altri dispositivi seriali USB, il numero del nodo del dispositivo potrebbe essere diverso. Modifica il percorso nella configurazione OTBR di conseguenza.
Crea e installa ot-br-posix
Su Raspberry Pi, clona e compila ot-br-posix:
$ git clone https://github.com/openthread/ot-br-posix.git $ cd ot-br-posix $ ./script/bootstrap
Esegui lo script di configurazione, specificando l'interfaccia Ethernet come interfaccia backbone (infrastruttura):
$ INFRA_IF_NAME=eth0 ./script/setup
eth0 è il nome tipico dell'interfaccia Ethernet cablata. Se colleghi Raspberry Pi tramite Wi-Fi anziché Ethernet, sostituisci eth0 con wlan0 (e assicurati che Raspberry Pi sia già connesso alla tua rete Wi-Fi). Verifica il nome dell'interfaccia attiva con ip link show.
Lo script di configurazione compila ot-br-posix dall'origine, installa i servizi di sistema otbr-agent e otbr-web e configura lo stack di rete. In genere, questa procedura richiede 10-20 minuti su Raspberry Pi 4B.
Configura l'agente OTBR
Modifica il file di configurazione dell'agente OTBR per specificare il percorso del dispositivo RCP e la velocità di trasmissione:
$ sudo nano /etc/default/otbr-agent
Individua la riga OTBR_AGENT_OPTS e aggiornala in modo che faccia riferimento alla UART dell'applicazione RCP:
OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
Sostituisci eth0 con wlan0 se Raspberry Pi è connesso tramite Wi-Fi.
OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
La UART dell'applicazione RCP LP-EM-CC2745R10-Q1 funziona a 921600 baud. Verifica che il percorso del dispositivo (/dev/ttyACM1 in questo esempio) corrisponda alla UART dell'applicazione della scheda RCP.
Riavvia l'agente OTBR per applicare la configurazione:
$ sudo systemctl restart otbr-agent $ sudo systemctl enable otbr-agent
Verifica che l'agente sia in esecuzione:
$ sudo systemctl status otbr-agent
Interagire con il nodo RCP
Comunica con il nodo RCP utilizzando lo strumento ot-ctl:
$ sudo ot-ctl state disabled Done
Puoi monitorare il log dell'agente OTBR per i messaggi di connessione e di stato:
$ sudo journalctl -u otbr-agent -f
(Facoltativo) L'interfaccia web OTBR è disponibile all'indirizzo http:// e fornisce una visualizzazione grafica della rete Thread.
Per arrestare o riavviare l'agente OTBR:
$ sudo systemctl stop otbr-agent $ sudo systemctl start otbr-agent
A questo punto dovresti avere tre console attive:
- Terminale seriale per Board 2 (
ot-cli-ftd 1) sul computer host. - Terminale seriale per Board 3 (
ot-cli-ftd 2) sul computer host. - Sessione SSH o terminale su Raspberry Pi per
ot-ctl(OTBR/RCP).
Ora puoi formare una rete Thread.
10. Creare una rete Thread
Configurare RCP (OTBR)
Crea una nuova rete Thread dalla shell ot-ctl su Raspberry Pi. Inserisci i seguenti comandi in ordine:
Indice | Comando | Descrizione | Risposta prevista | ||
1 |
| Crea una nuova configurazione di rete. | Fine | ||
2 |
| Esegui il commit del nuovo set di dati nel set di dati operativo attivo. | Fine | ||
3 |
| Attiva l'interfaccia Thread. | Fine | ||
4 |
| Abilita e collega l'operazione del protocollo Thread. | Fine | ||
Attendi 10 secondi per visualizzare l'interfaccia di Thread. | |||||
5 |
| Controlla lo stato del dispositivo. Deve essere leader. Altri stati possibili: offline, disattivato, scollegato, secondario, router o leader. | leader | ||
6 |
| Visualizza la configurazione di rete. I tuoi valori saranno diversi. Prendi nota del canale, della chiave di rete, del nome della rete e del PAN ID. Questi dati sono necessari per unire gli FTD alla rete. | Timestamp attivo: 1 | ||
Aggiungere FTD alla rete Thread (metodo out-of-band)
Utilizzando il metodo di provisioning out-of-band, fornisci direttamente le credenziali di rete. Nel terminale seriale per ogni scheda FTD, inserisci i seguenti comandi utilizzando la chiave di canale e di rete dall'output del set di dati OTBR riportato sopra:
Indice | Comando | Descrizione | Risposta prevista | ||
1 |
| Imposta il canale in modo che corrisponda all'OTBR. Sostituisci | Fine | ||
2 |
| Imposta la chiave di rete. Sostituisci con la chiave di rete dell'OTBR. Per il collegamento è necessaria solo questa chiave. | Fine | ||
3 |
| Esegui il commit del nuovo set di dati nel set di dati operativo attivo. | Fine | ||
4 |
| Attiva l'interfaccia Thread. | Fine | ||
5 |
| Abilita e collega l'operazione del protocollo Thread. | Fine | ||
Attendi 20 secondi mentre il dispositivo si connette e si configura. | |||||
6 |
| Controlla lo stato del dispositivo. | bambino | ||
A causa della natura autoconfigurante delle reti Thread e del fatto che si tratta di Full Thread Device, uno o entrambi gli FTD potrebbero diventare router. Puoi verificare il ruolo attuale in qualsiasi momento con il comando state.
Comunicazione tra i dispositivi Thread
Utilizza il comando ping per verificare che i dispositivi possano comunicare. Recupera gli indirizzi IPv6 di ogni dispositivo con 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
Da entrambi i FTD, esegui il ping dell'OTBR utilizzando il relativo indirizzo 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
Una risposta positiva conferma che la rete Thread è operativa e che i dispositivi possono comunicare. Ripeti la procedura per eseguire il ping di ogni FTD dall'OTBR (sudo ot-ctl ping ).
11. Complimenti
Hai creato una rete Thread con schede TI CC2745R10-Q1.
Ora sai che:
- Come configurare l'ambiente di build ot-ti di Texas Instruments.
- Come creare e caricare i file binari della CLI OpenThread sul LaunchPad LP-EM-CC2745R10-Q1.
- Come configurare un Raspberry Pi come OpenThread Border Router (OTBR) utilizzando ot-br-posix.
- Come creare una rete Thread sull'OTBR.
- Messa in servizio out-of-band dei dispositivi su una rete Thread.
- Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.
Per approfondire
Visita openthread.io e GitHub per una serie di risorse OpenThread, tra cui:
- Piattaforme supportate: scopri tutte le piattaforme che supportano OpenThread
- Build OpenThread: ulteriori dettagli sulla creazione e la configurazione di OpenThread
- Thread Primer: tratta tutti i concetti di Thread presentati in questo codelab
- Repository TI ot-ti: l'implementazione OpenThread di TI per i dispositivi SimpleLink, con istruzioni di compilazione e note di rilascio
- Pagina del prodotto CC2745R10-Q1: scheda tecnica del dispositivo, progetti di riferimento e altra documentazione
- LP-EM-CC2745R10-Q1 LaunchPad: guida utente della scheda di valutazione e file hardware
- Riferimento CLI OpenThread: panoramica della CLI OpenThread e del suo utilizzo
- Comandi CLI OpenThread: riferimento completo per tutti i comandi CLI OpenThread
- TI E2E Community — Thread & Zigbee: community di assistenza tecnica per i prodotti di connettività wireless Texas Instruments