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 più ampiamente disponibile agli sviluppatori, al fine di accelerare lo sviluppo di prodotti per la casa connessa e gli edifici commerciali. Grazie a un livello di astrazione della piattaforma ristretto e a un ingombro di 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.
Silicon Labs ha migliorato OpenThread per funzionare con l'hardware Silicon Labs. Questo codice sorgente è disponibile su GitHub e anche come Software Development Kit (SDK) installato con Simplicity Studio 5 (SSv5). L'SDK include uno snapshot completamente testato del codice sorgente di GitHub. Supporta una gamma più ampia di hardware rispetto alla versione GitHub e include documentazione e applicazioni di esempio non disponibili su GitHub.
Questa guida descrive come iniziare a sviluppare applicazioni OpenThread utilizzando l'SDK OpenThread di Silicon Labs e Simplicity Studio 5. L'immagine seguente mostra le schede (BRD) e la configurazione hardware con un OT Border Router (OTBR) e due dispositivi Thread utilizzati nel codelab.

Obiettivi didattici
- Come creare un progetto OpenThread utilizzando l'IDE Silicon Labs Simplicity Studio.
- Come creare e caricare i file binari della CLI OpenThread sulle schede radio Silicon Labs.
- Come configurare una Raspberry Pi 3B+ o superiore come OpenThread Border Router (OTBR) utilizzando Docker.
- Come creare una rete Thread sull'OTBR.
- Provisioning 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 radio EFR32MGxx: è possibile utilizzare qualsiasi combinazione di questi dispositivi. Questo codelab utilizza un BRD4166A come RCP e due BRD4168A come dispositivi Thread completi.
- EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A, BRD4180B)
- BRD4001A: schede madri di avviamento wireless (WSTK) per ospitare le schede radio. Ad eccezione di BRD4166A, tutte le schede radio richiedono una scheda principale di avviamento ciascuna. Cavi mini USB per collegare e alimentare le schede principali o cavo micro USB per BRD4166A.

- Raspberry Pi 3B+ o versioni successive con immagine del sistema operativo Raspbian Stretch Lite o Raspbian Stretch con desktop, connesso a internet tramite Ethernet. Lo configuriamo come router di confine OT.
- Un sistema host Windows/Linux/Mac con almeno 2 porte USB e una connessione a internet. Controlla i requisiti hardware e del sistema operativo su SSv5.
- Almeno un cavo Ethernet per collegare Raspberry Pi a internet. I WSTK supportano anche il debug e il flashing su IP, quindi, facoltativamente, è possibile utilizzare cavi Ethernet aggiuntivi per collegare il WSTK al sistema host tramite uno switch Ethernet.
Software:
- Simplicity Studio v5 installato e aggiornato sul sistema host Windows/Linux/Mac con
- Toolchain GNU ARM
- Gecko SDK Suite 3.2.0 o versioni successive e Silicon Labs OpenThread SDK.
3. Configurazione hardware
Questo codelab è stato creato utilizzando
- EFR32MG12 BRD4166A Thunderboard Sense 2 come mostrato a sinistra.
- Due EFR32MG13 BRD4168A come mostrato a destra.
- Simplicity Studio v5 installato su macOS Catalina 10.15.7 con
- SDK Gecko 3.2.0
- GNU ARM v7.2.1


Collega ogni scheda madre del Wireless Starter Kit al computer host tramite USB come mostrato nell'immagine di seguito. Queste connessioni consentiranno la programmazione e l'analisi di rete del RCP e dei dispositivi finali. Per prima cosa, utilizzeremo il computer host per programmare la scheda BRD4166A con il firmware ot-rcp e alla fine la collegheremo a Raspberry Pi. Se vuoi, i dispositivi finali possono essere collegati al computer host tramite uno switch Ethernet comune. I kit di base supportano anche la programmazione e l'analisi di rete tramite IPv4.

4. Configurazione del firmware
Puoi iniziare in due modi. Entrambe le opzioni consentono di eseguire il flashing dei firmware necessari per questo codelab.
- Progetti: (consigliato) crea, compila e carica un'applicazione di esempio. Questa opzione ti consente di personalizzare l'applicazione nel progetto.OR
- Demo: (facoltativo) carica le demo predefinite direttamente sulla scheda radio per una delle applicazioni di esempio. Gli utenti sono invitati a provare la configurazione del firmware delle demo come esercizio facoltativo. Per maggiori dettagli, consulta la sezione "Configurazione facoltativa del firmware - Demo" alla fine di questo codelab.
Per questo codelab utilizzeremo il metodo basato sul progetto.
Creare progetti utilizzando esempi
Creeremo due progetti. Il progetto ot-rcp per BRD4166A e il progetto ot-cli-ftd per i due BRD4168A. Segui questi passaggi e seleziona l'applicazione di esempio appropriata per la tua scheda.
- Apri il menu File di Studio e seleziona Nuovo > Procedura guidata per i progetti Silicon Labs. Si apre la finestra di dialogo Selezione di target, SDK e toolchain. Non modificare la toolchain Simplicity IDE / GNU predefinita supportata da OpenThread. Fai clic su Avanti.
- Schede di destinazione: mostra la scheda radio selezionata (BRD4168A) insieme alla scheda principale (BRD4001A)
- Dispositivo di destinazione: questo campo mostra il chip del microcontrollore (MCU) integrato. BRD4168A ha una MCU EFR32MG13 integrata.
- SDK: qui puoi selezionare la versione dell'SDK OT con cui stai lavorando. Le informazioni sulla suite includono il tag SDK e la build di OpenThread di Silicon Labs, ad esempio
Platform 4.0.1.0eOpenThread 2.0.1.0 (GitHub-55af6ce2c). - IDE/ Toolchain: la toolchain che verrà utilizzata per la compilazione del progetto OT. Utilizziamo GNU ARM.

- Viene visualizzata la finestra di dialogo di selezione del progetto di esempio. Vedrai un elenco di progetti di esempio. Utilizza i filtri per il tipo di tecnologia e le parole chiave Thread per cercare un esempio specifico. Assicurati di annotare il numero di versione di Gecko SDK Suite. Avrai bisogno di questo tag di versione quando configuri Raspberry Pi come router di confine. Seleziona ot-cli-ftd e poi fai clic su AVANTI.

- Si apre la finestra di dialogo Configurazione progetto. Qui puoi rinominare il progetto, modificare la posizione predefinita del file di progetto e determinare se collegare o copiare i file di progetto. I file di progetto collegati puntano all'SDK e tutte le modifiche apportate vengono eseguite nell'SDK e utilizzate per i progetti futuri. La copia delle origini del progetto ti consente di modificare una copia locale del progetto in modo che i file SDK rimangano intatti. "Collega SDK e copia le origini del progetto" è l'opzione predefinita e consigliata. Fai clic su FINE.

- Si apre la prospettiva IDE di Simplicity con Project Configurator aperto nella scheda PANORAMICA.

Il progetto viene configurato dalla scheda Componenti software installando e disinstallando i componenti e configurando quelli installati. I componenti installati vengono controllati. Fai clic su Componenti installati per visualizzare un elenco filtrato dei componenti installati dall'applicazione di esempio. Tutte le modifiche apportate vengono salvate automaticamente e i file di progetto vengono generati automaticamente. L'avanzamento viene visualizzato nell'angolo in basso a destra della prospettiva Simplicity IDE.

Per questa demo utilizzeremo la configurazione predefinita delle applicazioni di esempio. Ripeti i passaggi precedenti per creare il progetto ot-rcp per l'altra bacheca.
Compila e carica i progetti
Crea e carica i progetti ot-rcp e ot-cli-ftd.
- Dopo aver configurato il progetto, fai clic sul controllo di compilazione (icona a forma di martello) nella barra degli strumenti in alto. In alternativa, puoi fare clic con il tasto destro del mouse sul progetto e fare clic su Crea progetto.

- L'avanzamento viene visualizzato nella console e una barra di avanzamento in basso a destra. In questa finestra di output vengono visualizzati anche eventuali errori o avvisi relativi al progetto.

- Le immagini dei file binari vengono generate dopo una build del progetto riuscita. Puoi caricare l'immagine binaria dalla visualizzazione Esplora progetti. Individua il file .bin, .hex o .s37 nella sottodirectory del compilatore. Fai clic con il tasto destro del mouse sul file e seleziona Trasferisci su dispositivo. Se hai più di un dispositivo connesso, seleziona un dispositivo da programmare, quindi fai clic su Ok. Si apre Flash Programmer con il percorso del file compilato. Fai clic su PROGRAMMA.

5. Riepilogo della configurazione del firmware
A questo punto dovresti aver creato, compilato e caricato il firmware appropriato sulle schede radio. Una volta eseguito il flashing di ot-rcp su BRD4166A, scollega la scheda dal sistema host e collegala a Raspberry Pi.
Al termine di questa sezione, la configurazione dell'hardware della rete Thread avrà il seguente aspetto.

6. Configura la console seriale per i dispositivi ot-cli-ftd
Per avviare l'interfaccia della console, nella prospettiva IDE Simplicity fai clic con il tasto destro del mouse sul dispositivo J-Link nella finestra Visualizzazione dispositivi / Adattatori di debug. Scegli Avvia console. Per visualizzare un prompt sulla console, scegli la scheda Serial 1 e premi Invio. Controlla lo stato del nodo FTD.

Noterai che non abbiamo ancora una console per ot-rcp. Nel passaggio successivo configureremo Raspberry Pi come router di confine OT e configureremo la console per ot-rcp.
7. Configurare Raspberry Pi come router di confine
Silicon Labs consiglia di eseguire il deployment del container Docker dell'azienda con OTBR. L'esecuzione di OTBR in un container consente la creazione di artefatti facilmente implementabili e prototipazione e test di sviluppo rapidi.
Le immagini OTBR di Silicon Labs sono ospitate su siliconlabsinc DockerHub, con i tag. Ogni tag corrisponde a una versione di GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
I container Docker devono essere utilizzati con i plug-in RCP creati utilizzando Simplicity Studio 5 per una determinata release. Assicurati di abbinare una versione del tag contenitore alla versione di GSDK con cui stai eseguendo il test. Ad esempio, se la tua versione di GDSK era Gecko SDK Suite v4.0.1 (140) quando hai selezionato ot-rcp dalla finestra Selezione progetto di esempio, utilizza l'immagine siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Configurazione di Raspberry Pi
- Sulla scheda SD, assicurati di installare l'immagine del sistema operativo Raspbian Stretch Lite o Raspbian Stretch con desktop.
- Puoi utilizzare SSH su Raspberry Pi o scegliere di lavorare direttamente con Raspbian Desktop. Apri un terminale.
- Prima di installare Docker, assicurati di aggiornare i repository locali e il gestore di pacchetti (apt-get update e apt-get upgrade).
Installa l'immagine Docker
- Installa Docker con il seguente comando su RPi.
curl -sSL https://get.docker.com | sh
- Al termine, puoi modificare le impostazioni utente di Docker in modo che non richiedano sudo prima di ogni comando. È richiesto il riavvio.
sudo usermod -aG docker $USER
- Esegui i seguenti comandi per installare i container. Tieni presente che puoi avere un solo container Border Router in esecuzione alla volta con il tuo RCP. Inoltre, assicurati di abbinare la versione di GSDK di Simplicity Studio all'immagine Docker corretta. Ad esempio,
gsdk-4.0.1:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Configura ed esegui Docker
- Devi configurare la porta TTY che vuoi utilizzare per OTBR per connettere il tuo RCP all'avvio. Cerca la porta TTY del tuo dispositivo RCP. Il modo più semplice per farlo è cercare una voce
/tty/dev... una volta connesso il RCP. In genere, deve essere/dev/ttyUSB0o/dev/ttyACM0. - Esegui l'installazione di Docker con il comando seguente. Assicurati di sostituire il nome dell'immagine Docker con la versione GSDK corrispondente. Ad esempio,
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
-dassicura che il container venga eseguito in modalità detached.- Puoi visualizzare i log in esecuzione per il container in qualsiasi momento utilizzando il comando
docker logs. --nameè permanente finché il contenitore Docker non viene chiuso (o rimosso) correttamente.- La porta 8080 indica la porta del server web che ospita la pagina web di gestione del router di confine.
?uart-baudrate=460800è obbligatorio nelle opzioni dell'URL della radio per risolvere i problemi di frammentazione / riassemblaggio su UART, con operazioni costose come DTLS con pacchetti IPv6 lunghi.
Interagire con il nodo RCP
Una volta eseguito il docker, puoi comunicare con il nodo RCP tramite una shell interattiva utilizzando questo comando. Controlla lo stato del nodo RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Puoi ottenere un elenco degli ID dei container in esecuzione
$ docker ps -aq
Puoi controllare la finestra in cui è in esecuzione il container Docker OTBR per l'output del log del router di confine o seguire il log del container nel seguente modo:
$ docker logs [container-id] -f
(Facoltativo) Puoi arrestare, rimuovere o eliminare l'immagine se il container Docker viene caricato correttamente.
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
(Facoltativo) Per uscire dalla shell, utilizza CNTL + C.
A questo punto dovresti avere 3 console.
- Due console
ot-cli-ftdin Simplicity Studio configurate come dispositivi Full Thread. - Una shell interattiva
ot-ctlsu Raspberry Pi, configurata come router di confine OT.
Ora siamo pronti per formare una rete Thread.
8. Creare una rete Thread
Configurare RCP
Per creare la rete, iniziamo con la shell ot-ctl sull'OTBR, che viene utilizzata per comunicare con il nodo RCP. Inserisci i seguenti comandi nell'ordine mostrato di seguito:
Indice | Comando | Descrizione comando | 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 affinché venga visualizzata l'interfaccia del thread. | |||||
5 |
| Controlla lo stato del dispositivo. Dovrebbe essere il leader. | Leader | ||
6 |
| Visualizza la configurazione di rete. | Timestamp attivo: 1 | ||
Utilizzeremo il numero del canale e la chiave di rete su ot-cli-ftd per unire i due FTD a questa rete thread.
Configurare e aggiungere FTD alla nostra rete Thread (metodo out-of-band)
Con il metodo out-of-band, conosciamo tutte le informazioni di sicurezza e aggiungiamo il nodo manualmente. Nelle console Simplicity aggiungi entrambi gli FTD alla nostra rete utilizzando i seguenti comandi nell'ordine mostrato di seguito.
Indice | Comando | Descrizione comando | Risposta prevista | ||
1 |
| Imposta il canale utilizzato dall'OTBR. | Fine | ||
2 |
| Per connettere un dispositivo a una rete Thread è necessaria solo la chiave di rete. | 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 |
| Visualizza la configurazione di rete. | bambino | ||
Comunicazione tra i dispositivi Thread
Utilizzeremo il comando ping per verificare se i dispositivi possono comunicare tra loro. Per utilizzare il comando ping, abbiamo bisogno degli indirizzi IPv6 dei dispositivi. Questi possono essere ottenuti utilizzando il 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)
Esegui il ping dell'OTBR da entrambi gli FTD utilizzando l'indirizzo RLOC dell'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
La risposta indica il payload ricevuto e che la comunicazione è riuscita. Ripeti la procedura per eseguire il ping degli FTD dall'OTBR.
9. Complimenti
Hai creato una rete Thread.
Ora sai che:
- Come creare un progetto OpenThread utilizzando l'IDE Silicon Labs Simplicity Studio.
- Come creare e caricare i file binari della CLI OpenThread sulle schede radio Silicon Labs.
- Come configurare una Raspberry Pi 3B+ o superiore come OpenThread Border Router (OTBR) utilizzando Docker.
- Come creare una rete Thread sull'OTBR.
- Provisioning 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: copre tutti i concetti di Thread trattati in questo codelab
- Silicon Labs OpenThread Training: un'introduzione a OpenThread, che illustra la messa in servizio e i router di confine e un esercizio pratico per la creazione di una rete OpenThread.
- QSG170: Guida rapida di OpenThread di Silicon Labs: descrive in dettaglio la procedura per iniziare lo sviluppo di Silicon Labs Thread
- AN1256: Using the Silicon Labs RCP with the OpenThread Border Router: istruzioni di compilazione e installazione per l'host del router di confine Raspberry Pi
10. (Facoltativo) Configurazione del firmware - Demo
Le demo sono immagini firmware predefinite pronte per essere scaricate su un dispositivo compatibile. Il modo più rapido per verificare se è disponibile una demo per la tua parte in Simplicity Studio è fare clic sulla tua parte nella visualizzazione Debug Adapters (Adattatori di debug) e poi andare alla scheda EXAMPLE PROJECTS & DEMOS (PROGETTI ED ESEMPI DI DEMO) nella prospettiva Launcher. Disattiva il filtro Progetti di esempio e seleziona la casella di controllo del pulsante di opzione Thread in Tipo di tecnologia.

Le immagini dell'applicazione demo precompilate fornite con l'SDK OpenThread sono compatibili con le seguenti schede:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
Questo elenco potrebbe essere aggiornato nelle versioni future dell'SDK per includere altre schede radio. Per un elenco completo delle parti supportate, consulta le note di rilascio dell'SDK OpenThread di Silicon Labs nella sezione Documentazione.
Carica i seguenti demo sulle schede corrispondenti. Per eseguire il flashing, seleziona la scheda in Debug Adapters (Adattatori di debug) a sinistra e fai clic su RUN (Esegui) per le applicazioni di esempio corrispondenti. Una finestra popup mostrerà l'avanzamento del flash.
- BRD4166A: ot-rcp. Questo dispositivo fungerà da coprocessore radio per il router di confine OT. Utilizzeremo questo dispositivo per creare una rete Thread e registrare gli altri due dispositivi sulla rete Thread. In qualità di router di confine, questo dispositivo funge anche da gateway per i dispositivi della rete Thread per comunicare su internet.
- Due BRD4168A: ot-cli-ftd. Questi due dispositivi fungeranno da dispositivi Thread completi. Si uniranno alla rete Thread creata dall'OTBR.