Creare una rete Thread con le schede Silicon Labs EFR32 e OpenThread utilizzando Simplicity Studio v5

1. Introduzione

26b7f4f6b3ea0700.png

OpenThread (OT) di Google è un'implementazione open source di Thread. Google ha rilasciato OpenThread per rendere la tecnologia di networking utilizzata nei prodotti Google Nest più ampiamente disponibile per gli sviluppatori, così da accelerare lo sviluppo di prodotti per la casa connessa e gli edifici commerciali. Con uno stretto livello di astrazione della piattaforma e una piccola quantità di memoria, OpenThread è altamente portabile. Supporta i design system-on-chip (SoC) e network co-processor (NCP).

La specifica del thread definisce un protocollo di comunicazione da dispositivo a dispositivo wireless basato su IPv6, sicuro, sicuro e a basso consumo per le applicazioni per la casa e gli edifici commerciali.

Silicon Labs ha migliorato OpenThread per supportare l'hardware Silicon Labs. Questo codice sorgente è disponibile su GitHub e anche come SDK (Software Development Kit) installato con Simplicity Studio 5 (SSv5). L'SDK include uno snapshot completamente testato del codice sorgente GitHub. Supporta una gamma più ampia di hardware rispetto alla versione GitHub e include documentazione ed 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 di seguito mostra le lavagne (BRD) e l'hardware configurato con un router di confine OT (OTBR) e due dispositivi Thread utilizzati nel codelab.

Configurazione hardware EFR32MG

Obiettivi didattici

  • Come creare un progetto OpenThread utilizzando IDE Silicon Labs Simplicity Studio.
  • Come creare ed eseguire il flashing di programmi binari dell'interfaccia a riga di comando di OpenThread su schede radio Silicon Labs.
  • Come configurare Raspberry Pi 3B o versioni successive come router OTBR (OpenThread Border) usando Docker.
  • Come creare una rete Thread sull'OTBR.
  • Messa fuori servizio di dispositivi su una rete Thread.
  • Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.

2. Prerequisiti

Hardware:

  1. 3 schede radio EFR32MGxx: è possibile utilizzare qualsiasi combinazione di questi dispositivi. Questo codelab utilizza un BRD4166A come RCP e due BRD4168A come dispositivi Full Thread.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Se inizi da zero, puoi acquistare uno degli Estarter Thread EFR32 contenenti le bacheche elencate sopra.
  2. BRD4001A: Schede principali di avvio wireless (WSTK) per ospitare le schede radio. Ad eccezione di BRD4166A, tutte le schede radio richiedono una scheda principale iniziale. Cavi mini USB per collegare e alimentare le schede principali o il cavo micro USB per BRD4166A.

WSTK AEM

  1. Un Raspberry Pi 3B+ o superiore con immagine di un sistema operativo Raspbian Stretch Lite o Raspbian Stretch con Desktop connesso a Internet tramite Ethernet. Lo configuriamo come router di confine OT.
  2. Un sistema host Windows/Linux/Mac con almeno due porte USB e una connessione a Internet. Controlla i requisiti hardware e del sistema operativo su SSv5.
  3. Almeno un cavo Ethernet per connettere il Raspberry Pi a Internet. I server WSTK supportano anche debug e flashing su IP, quindi, facoltativamente, possono essere utilizzati cavi Ethernet aggiuntivi per connettere il WSTK al sistema host tramite uno switch Ethernet.

Software:

  • Semplic Studio Studio v5 installato e aggiornato nel sistema host Windows/Linux/Mac con
    • Portachiavi GNU ARM
    • Gecko SDK Suite 3.2.0 o versioni successive e l'SDK OpenThread di Silicon Labs.

3. Configurazione hardware

Questo codelab è stato creato utilizzando

  1. EFR32MG12 BRD4166A Thunderboard Sense 2 come mostrato a sinistra.
  2. Due EFR32MG13 BRD4168A come mostrato a destra.
  3. Semplicità Studio v5 installata su macOS Catalina 10.15.7 con
    1. SDK Gecko 3.2.0
    2. ARM GNU v7.2.1

BRD4168A

Collega ogni scheda principale 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 dei dispositivi RCP e finali. Innanzitutto, useremo il computer host per programmare il BRD4166A con il firmware ot-rcp e infine lo collegheremo al Raspberry Pi. Facoltativamente, i dispositivi finali possono essere collegati al computer host tramite uno switch Ethernet comune. Gli starter kit supportano anche la programmazione e l'analisi di rete su IPv4.

Connessioni

4. Configurazione del firmware

Puoi iniziare in due modi. Entrambe le opzioni ti consentono di eseguire il flashing dei firmware richiesti per questo codelab.

  1. Progetti: (consigliato) creare, creare e Flash un'applicazione di esempio. Questa opzione consente di personalizzare l'applicazione nel progetto.OR
  2. Demo: (Facoltativo) esegui il flashing delle demo preconfigurate direttamente sulla scheda di opzione per tutte le applicazioni di esempio. Consigliamo agli utenti di provare il firmware delle demo come esercizio facoltativo. Fai riferimento alla sezione "Configurazione firmware opzionale - Demo" alla fine di questo codelab per informazioni dettagliate.

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. Svolgi questi passaggi e seleziona l'applicazione di esempio appropriata per la tua scheda.

  1. Apri il menu File di Studio e seleziona New > Silicon Labs Project Guide. Si apre la finestra di dialogo Target, SDK e Toolchain. Non modificare la catena di strumenti predefinita SIDEy IDE / GNU supportata da OpenThread. Fai clic su Avanti.
    • Tabelle di destinazione: mostra la scheda di opzione selezionata (BRD4168A) insieme alla scheda principale (BRD4001A)
    • Dispositivo di destinazione: questo campo mostra il chip di microcontroller (MCU) integrato. Il BRD4168A ha un MCU EFR32MG13 integrato.
    • SDK: qui puoi selezionare la versione dell'SDK di OT a cui stai lavorando. Le informazioni sulla suite includono il tag SDK e la build Silicon Labs di OpenThread, ad esempio Platform 4.0.1.0 e OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: la toolchain che verrà utilizzata per compilare il progetto OT. Utilizziamo GNU ARM.

Procedura guidata nuovo progetto

  1. Si apre la finestra di dialogo di selezione di progetto di esempio. Vedrai un elenco di progetti di esempio. Per trovare un esempio specifico, puoi utilizzare i filtri del tipo di tecnologia Thread e delle parole chiave. Assicurati di prendere nota del numero di versione Gecko SDK Suite. Questo tag di versione è necessario quando configuri Raspberry Pi come router di confine. Seleziona ot-cli-ftd, quindi fai clic su AVANTI.

Passaggio 2 della procedura guidata nuovo progetto

  1. Viene visualizzata la finestra di dialogo Configurazione progetto. Qui puoi rinominare il progetto, modificare la posizione predefinita del file di progetto e stabilire se collegare o copiare i file di progetto. I file di progetto collegati rimandano all'SDK ed eventuali modifiche apportate vengono apportate all'interno dell'SDK e utilizzate per i progetti futuri. Copiando le origini dei progetti, puoi modificare una copia locale del progetto in modo che i file SDK rimangano invariati. "Collega SDK e copia le origini dei progetti' è l'opzione predefinita e consigliata. Fai clic su FINE.

Passaggio 3 della procedura guidata nuovo progetto

  1. Si apre l'interfaccia Prospettiva Semplicità con il Configuratore progetto aperto nella scheda PANORAMICA.

Panoramica del progetto

Il progetto viene configurato dalla scheda Componenti software installando e disinstallando i componenti e configurando i componenti 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 SIDEy IDE.

Componenti software

Per questa demo utilizzeremo la configurazione predefinita delle applicazioni di esempio. Ripeti i passaggi precedenti per creare il progetto ot-rcp per l'altra lavagna.

Crea e implementa i progetti Flash

Crea e esegui il flashing di progetti ot-rcp e ot-cli-ftd.

  1. Dopo aver configurato il progetto, fai clic su Controllo build (icona martello) nella barra degli strumenti in alto. In alternativa, puoi fare clic con il pulsante destro del mouse sul progetto e fare clic su Crea progetto.

Pulsante Crea progetto

  1. L'avanzamento viene visualizzato nella Console e nella barra di avanzamento in basso a destra. Eventuali errori o avvisi relativi al progetto verranno visualizzati anche in questa finestra di output.

Finestra di output della build del progetto

  1. Le immagini binarie vengono generate dopo la creazione di un progetto riuscito. Puoi eseguire il flashing dell'immagine binaria dalla vista Esplorazione progetto. Individua il file .bin, .hex o .s37 nella sottodirectory del compilatore. Fai clic con il pulsante destro del mouse sul file e seleziona Flash-device. Se hai collegato più di un dispositivo, seleziona un dispositivo da programmare e fai clic su OK. Il programmatore Flash si apre con il percorso del file completato. Fai clic su PROGRAM.

Flash

5. Riepilogo configurazione firmware

A questo punto, dovresti aver creato, compilato e flashato il firmware appropriato sulle schede radio. Quando ot-rcp lampeggia in BRD4166A, scollegalo dal sistema host e collega la scheda a Raspberry Pi.

Dopo aver completato questa sezione, l'impostazione dell'hardware della rete Thread sarà simile a questa.

Configurazione EFR32MG

6. Configura la console seriale per i dispositivi ot-cli-ftd

Per avviare l'interfaccia di Console, dal punto di vista della semplicità IDE, fai clic con il pulsante destro del mouse sul dispositivo J-Link nella finestra Visualizzatori / Adattatori di debug dei dispositivi. Scegli Launch Console (Avvia console). Per visualizzare un messaggio nella console, scegli la scheda Serial 1 e premi Invio. Controlla lo stato del nodo FTD.

Visualizzazione della console di Studio FTD

Vedrai che non abbiamo ancora una console per ot-rcp. Nel passaggio successivo configureremo il Raspberry Pi come router di confine OT e configureremo la console per ot-rcp.

7. Configura Raspberry Pi come router di confine

Silicon Labs consiglia di eseguire il deployment del container Docker dell'azienda con la OTBR. L'esecuzione dell'OTBR in un container consente la creazione di artefatti di cui è facile eseguire il deployment e la prototipazione e i test di sviluppo rapidi.

Le immagini OTBR di Silicon Labs sono ospitate su siliconlabsinc DockerHub, con i tag. Ogni tag corrisponde a una versione dell'SDK:

https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tag

I container Docker devono essere utilizzati con RCP creati utilizzando Simplicity Studio 5 per una determinata release. Assicurati di far corrispondere una versione del tag contenitore alla versione GSDK con cui stai eseguendo il test. Ad esempio, se la versione di GDSK era Gecko SDK Suite v4.0.1 (140) quando hai selezionato ot-rcp dalla finestra Example Project Selection, utilizza l'immagine siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Versione GSDK

Configurazione di Raspberry Pi

  1. Sulla scheda SD, assicurati di eseguire il flashing dell'immagine di Raspbian Stretch Lite OS o di Raspbian Stretch con desktop.
  2. Puoi usare SSH su Raspberry Pi o scegliere di lavorare direttamente con Raspbian Desktop. Apri un terminale.
  3. Prima di installare Docker, assicurati di aggiornare i tuoi repository locali e il gestore di pacchetti (apt-get update e apt-get upgrade).

Installa immagine Docker

  1. Installa Docker con il seguente comando sul tuo RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Al termine, potrai modificare le impostazioni utente Docker in modo che non richieda sudo prima di ogni comando. Riavvio obbligatorio.
    sudo usermod -aG docker $USER
    
  3. Per installare i container, esegui i comandi indicati di seguito. Tieni presente che con il tuo RCP puoi eseguire un solo container Border Router alla volta. Inoltre, assicurati che la versione di Gimplicity Studio di Simplicity Studio corrisponda all'immagine Docker corretta. Ad esempio, gsdk-4.0.1:
    docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
    

Configura ed esegui Docker

  1. Devi configurare la porta TTY che vuoi utilizzare per consentire all'OTBR di connettere il tuo RCP all'avvio. Cerca la porta TTY del dispositivo RCP. Il modo più semplice per farlo è cercare una voce /tty/dev... dopo aver collegato l'RCP. Solitamente deve essere /dev/ttyUSB0 o /dev/ttyACM0.
  2. 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
    
    • -d garantisce che il container venga eseguito in modalità disconnessa.
    • Puoi visualizzare i log in esecuzione per il container in qualsiasi momento utilizzando il comando docker logs.
    • --name rimane attivo finché il container docker non viene chiuso correttamente (o rimosso).
    • La porta 8080 indica la porta del server web che ospita la pagina web di gestione del router di confine.
    • È necessario ?uart-baudrate=460800 nelle opzioni URL radio per aggirare i problemi di frammentazione/rimontaggio su UART, con operazioni costose come DTLS con pacchetti IPv6 lunghi.

Interagire con il nodo RCP

Quando il docker è in esecuzione, 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 container in esecuzione

$ docker ps -aq

Puoi controllare la finestra che esegue il container Docker OTBR per l'esecuzione dell'output del log del router Border o seguire il log del container come segue:

$ docker logs [container-id] -f

Se vuoi, puoi interrompere, rimuovere o terminare l'immagine se il container docker è stato 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.

  1. Due console ot-cli-ftd in Simplicity Studio configurate come dispositivi Full Thread.
  2. Una shell interattiva ot-ctl su Raspberry Pi, configurata come router di confine OT.

Ora siamo pronti a formare una rete Thread.

8. Creare una rete Thread

Configura RCP

Per creare la rete, iniziamo con ot-ctl shell 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

dataset init new

Crea una nuova configurazione di rete.

Fine

2

dataset commit active

Esegui il commit di un nuovo set di dati nel set di dati operativo attivo.

Fine

3

ifconfig up

Attiva l'interfaccia Thread.

Fine

4

thread start

Abilita e collega l'operazione di protocollo Thread.

Fine

Attendi 10 secondi affinché l'interfaccia dei thread sia attiva.

5

state

Controlla lo stato del dispositivo. Deve essere l'elemento leader.
Altri stati possibili: offline, disattivato, scollegato,
secondario, router o leader

Leader
Fine

6

dataset

Visualizza la configurazione di rete.
I valori saranno diversi da questo codelab.
Prendi nota del canale, della chiave di rete, del
nome della rete e dell'ID PAN.

Timestamp attivo: 1
Canale: 20
Maschera canale: 0x07fff800
ID PAN esterno: 39ba71f7fc367160
Prefisso locale mesh: fd5c:c6b:3a17:40b9::/64
Chiave di rete: 81ae28
18:8
7:

Utilizzeremo il numero del canale e la chiave di rete nell'ot-cli-ftd per unire i due FTD a questa rete di thread.

Configurare e aggiungere il valore FTD alla nostra rete Thread (metodo fuori banda)

Con il metodo out-of-band, conosciamo tutte le informazioni di sicurezza e aggiungiamo il nodo manualmente. Nelle console di semplicità, aggiungi gli FTD alla nostra rete utilizzando i seguenti comandi nell'ordine indicato di seguito.

Indice

Comando

Descrizione comando

Risposta prevista

1

dataset channel 20

Imposta il canale utilizzato dalla OTBR.

Fine

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Per collegare un dispositivo a una rete Thread è necessario solo la chiave di rete.

Fine

3

dataset commit active

Esegui il commit di un nuovo set di dati nel set di dati operativo attivo.

Fine

4

ifconfig up

Attiva l'interfaccia Thread.

Fine

5

thread start

Abilita e collega l'operazione di protocollo Thread.

Fine

Attendi 20 secondi mentre il dispositivo si connette e si configura da solo.

6

state

Visualizza la configurazione di rete.

figlio
Fine

Comunicazione tra 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. Per ottenere queste informazioni, utilizza 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)

Da entrambe le unità FTD, invia un ping all'OTBR utilizzando l'indirizzo RLOC di 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 ha esito positivo. Ripeti la procedura per inviare un ping agli FTD dall'OTBR.

9. Complimenti

Hai creato una rete Thread.

Ora sai:

  • Come creare un progetto OpenThread utilizzando IDE Silicon Labs Simplicity Studio.
  • Come creare ed eseguire il flashing di programmi binari dell'interfaccia a riga di comando di OpenThread su schede radio Silicon Labs.
  • Come configurare Raspberry Pi 3B o versioni successive come router OTBR (OpenThread Border) usando Docker.
  • Come creare una rete Thread sull'OTBR.
  • Messa fuori servizio di dispositivi su una rete Thread.
  • Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.

Per approfondire

Dai un'occhiata a openthread.io e GitHub per una serie di risorse OpenThread, tra cui:

10. Configurazione firmware facoltativa - Demo

Le demo sono immagini di firmware preconfigurate pronte per essere scaricate su un dispositivo compatibile. Il modo più rapido per scoprire se è disponibile una demo per la tua parte in Simplicity Studio è fare clic sulla tua parte nella visualizzazione Adattatori di debug e quindi accedere alla scheda PROGETTI ESEMPIO e DEMO in Prospettiva di avvio. Disattiva il filtro Progetti di esempio e seleziona la casella di controllo Thread in Tipo di tecnologia.

Demo di Studio

Le immagini demo dell'applicazione precompilate fornite con l'SDK OpenThread sono compatibili con le seguenti lavagne:

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. BRD4304a

Questo elenco potrebbe essere aggiornato nelle future release 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 documentazione.

Mostra le demo seguenti sulle rispettive lavagne. Per lampeggiare, seleziona la tua scheda nella sezione Adattatori di debug a sinistra e fai clic su ESEGUI per le applicazioni di esempio corrispondenti. Viene visualizzata una finestra popup che mostra l'avanzamento del flash.

  1. BRD4166A: ot-rcp: questo dispositivo funzionerà come processore radio co sul router OT Border. Utilizzeremo questo dispositivo per creare una rete Thread e integrare gli altri due dispositivi nella rete Thread. In quanto router di confine, questo dispositivo funge anche da gateway per la comunicazione su Internet dei dispositivi della rete Thread.
  2. Due BRD4168A: ot-cli-ftd: questi due dispositivi agiranno come dispositivi Full Thread. Faranno parte della rete Thread creata dall'OTBR.