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 disponibile agli sviluppatori la tecnologia di networking utilizzata nei prodotti Google Nest in modo da accelerare lo sviluppo di prodotti per la casa connessa e gli edifici commerciali. Con uno stretto livello di astrazione della piattaforma e un ingombro ridotto di memoria, OpenThread è altamente portatile. Supporta sia la progettazione SoC (system-on-chip) che il coprocessore di rete (NCP).

La specifica dei thread definisce un protocollo di comunicazione da dispositivo a dispositivo affidabile, sicuro e a basso consumo basato su IPv6 per le applicazioni di edilizia domestica e commerciale.

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 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 seguente mostra le schede (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 l'IDE Simplicity Studio di Silicon Labs.
  • Come creare ed eseguire il flashing di programmi binari dell'interfaccia a riga di comando OpenThread alle schede radio Silicon Labs.
  • Come configurare un Raspberry Pi 3B o versioni successive come router di confine OpenThread (OTBR) utilizzando Docker.
  • Come creare una rete Thread sull'OTBR.
  • Messa fuori servizio della banda dei 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 BRD4168As come dispositivi Full Thread.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Se stai ricominciando da zero, puoi acquistare uno degli starter kit Thread EFR32, che contengono le schede elencate sopra.
  2. BRD4001A: Schede principali di avviamento wireless (WSTK) per ospitare le schede radio. Fatta eccezione per BRD4166A, tutte le schede radio richiedono una scheda principale di avviamento ciascuna. Cavi mini USB per collegare e alimentare le schede principali o il cavo micro USB per BRD4166A.

AST WSTK

  1. Un Raspberry Pi 3B o versioni successive con Raspbian Stretch Lite OS o Raspbian Stretch con desktop connesso a Internet tramite Ethernet. La configuriamo come router di confine OT.
  2. Un sistema host Windows/Linux/Mac con almeno 2 porte USB e una connessione a Internet. Controlla i requisiti hardware e del sistema operativo indicati in SSv5.
  3. 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
    • Catena portautensili GNU ARM
    • Gecko SDK Suite 3.2.0 o versioni successive e Silicon Labs OpenThread SDK.

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. Simplicity Studio v5 installato su una macOS Catalina 10.15.7 con
    1. SDK Gecko 3.2.0
    2. BRACCIO GNU v7.2.1

BRD4168A

Collega ogni scheda principale del kit iniziale wireless al computer host via USB come mostrato nell'immagine di seguito. Queste connessioni consentiranno la programmazione e l'analisi di rete dell'RCP e dei dispositivi finali. Utilizzeremo prima 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 della rete su IPv4.

Connessioni

4. Configurazione firmware

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

  1. Progetti: (consigliato) crea, crea e esegui il flashing di un'applicazione di esempio. Questa opzione ti permette di personalizzare l'applicazione nel progetto.OPPURE
  2. (Facoltativo) Fai lampeggiare le demo predefinite direttamente sulla scheda radio per una qualsiasi delle applicazioni di esempio. Consigliamo agli utenti di provare il firmware delle demo configurato come esercizio facoltativo. Per informazioni dettagliate, consulta la sezione "Configurazione firmware opzionale - 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 lavagna.

  1. Apri il menu File di Studio e seleziona Nuovo > Procedura guidata progetto Silicon Labs. Vengono visualizzate le finestre di dialogo Destinazione, SDK e Selezione strumenti. Non modificare la catena degli strumenti SIDEy IDE / GNU predefinita supportata da OpenThread. Fai clic su Avanti.
    • Scheda di destinazione: mostra la scheda di opzione selezionata (BRD4168A) insieme alla scheda principale (BRD4001A)
    • Dispositivo di destinazione: questo campo mostra il chip del microcontroller (MCU) integrato. Il BRD4168A ha un MCU EFR32MG13 integrato.
    • SDK: qui puoi selezionare la versione dell'OT di cui stai lavorando. Le informazioni sulla suite includono il tag SDK e la build di 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 BRACCIO GNU.

Procedura guidata nuovo progetto

  1. Si apre la finestra di dialogo Selezione di esempio del progetto. Vedrai un elenco di progetti di esempio. Utilizza il filtro Tipo di tecnologia Thread e i filtri delle parole chiave per cercare un esempio specifico. Assicurati di prendere nota del numero di versione Gecko SDK Suite. Questo tag di versione ti servirà durante la configurazione di Raspberry Pi come router di confine. Seleziona ot-cli-ftd e fai clic su AVANTI.

Passaggio 2 della procedura guidata Nuovo progetto

  1. Si apre la finestra di dialogo Configurazione progetto. Qui puoi rinominare il progetto, cambiare la posizione del file del progetto predefinito e stabilire se intendi collegare o copiare i file di progetto. I file di progetto collegati rimandano all'SDK e le eventuali modifiche che apporti vengono apportate nell'SDK e utilizzate per progetti futuri. La copia delle origini dei progetti consente di modificare una copia locale del progetto in modo che i file SDK rimangano invariati. L'opzione predefinita è "Collega SDK e copia le origini di progetto", scelta consigliata. Fai clic su TERMINA.

Passaggio 3 della procedura guidata Nuovo progetto

  1. Si apre l'Simplicity IDE Perspective con il configuratore di progetti aperto nella scheda PANORAMICA.

Panoramica del progetto

Il progetto viene configurato nella scheda Componenti software installando e disinstallando i componenti e configurando i componenti installati. I componenti installati sono selezionati. Fai clic su Componenti installati per visualizzare un elenco filtrato dei componenti installati dall'applicazione di esempio. Tutte le modifiche che apporti vengono salvate automaticamente e i file di progetto vengono generati automaticamente. L'avanzamento è indicato nell'angolo in basso a destra del punto di vista 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.

Creazione e Flash dei progetti

Crea e Flash sia i progetti ot-rcp che ot-cli-ftd.

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

Pulsante Crea progetto

  1. L'avanzamento viene visualizzato nella console e in una barra di avanzamento in basso a destra. Eventuali errori o avvisi relativi al tuo 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 Explorer progetti. Individua il file .bin, .hex o .s37 nella sottodirectory del compilatore. Fai clic con il tasto destro del mouse sul file e seleziona Flash sul dispositivo. Se ci sono più dispositivi collegati, seleziona un dispositivo da programmare e fai clic su OK. Viene aperto il programmatore Flash con il percorso del file completato. Fai clic su PROGRAMMA.

Flash

5. Riepilogo della configurazione del firmware

A questo punto, dovresti aver creato, compilato e fatto lampeggiare il firmware appropriato sulle schede radio. Una volta che ot-rcp è stato flasha BRD4166A, scollegalo dal sistema host e collega questa scheda al Raspberry Pi.

Dopo aver completato questa sezione, la configurazione dell'hardware della tua rete Thread sarà simile a questa.

Configurazione di EFR32MG

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

Per avviare l'interfaccia della console, nella vista implicit SIDE fai clic con il tasto destro del mouse sul dispositivo J-Link nella finestra Visualizza dispositivi / Adattatori di debug. Scegli Avvia console. Per ricevere un messaggio nella console, scegli la scheda Serial 1 (Serial 1) e premi Invio. Controlla lo stato del nodo FTD.

Visualizzazione della console di Studio FTD

Noterai 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. Configurazione di Raspberry Pi come router di confine

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

Le immagini OTBR di Silicon Labs sono ospitate su siliconlabsinc DockerHub con tag. Ogni tag corrisponde a una versione GSDK:

https://hub.docker.com/r/siliconlabsinc/openthread-Border-router/tags

I container Docker devono essere utilizzati con RCP creati usando Simplicity Studio 5 per una determinata release. Assicurati che la versione del tag contenitore corrisponda 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 nella finestra Selezione progetto di esempio, utilizza l'immagine siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Versione GSDK

Configurazione Raspberry Pi

  1. Nella scheda SD, assicurati di eseguire il flashing dell'immagine Rasbian 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. Assicurati di aggiornare i repository e il gestore di pacchetti locali (apt-get update e apt-get upgrade prima di installare Docker).

Installa immagine Docker

  1. Installa Docker con il seguente comando sul tuo RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Al termine, puoi modificare le impostazioni utente Docker in modo che non richiedano una configurazione prima di ogni comando. È richiesto il riavvio.
    sudo usermod -aG docker $USER
    
  3. Esegui questi comandi per installare i container. Tieni presente che puoi utilizzare un solo container router di confine alla volta con il tuo RCP. Inoltre, assicurati che la versione del tuo SDK Simplicity Studio GSDK 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. In genere deve essere /dev/ttyUSB0 o /dev/ttyACM0.
  2. Esegui l'installazione 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 assicura che il container venga eseguito in modalità disconnessa.
    • Puoi visualizzare i log in esecuzione per il container in qualsiasi momento usando il comando docker logs.
    • L'elemento --name è appiccicoso finché il contenitore 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.
    • ?uart-baudrate=460800 è obbligatorio nelle opzioni URL radio per aggirare i problemi di frammentazione / riassemblaggio 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 visualizzare un elenco degli ID dei container in esecuzione

$ docker ps -aq

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

$ docker logs [container-id] -f

Facoltativamente, puoi arrestare, rimuovere o terminare l'immagine se il container Docker è caricato correttamente.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

(Facoltativo) Per uscire dalla shell, utilizza CNTL + C.

A questo punto dovresti avere tre console.

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

Ora siamo pronti per creare una rete Thread.

8. Crea una rete Thread

Configura 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

dataset init new

Crea una nuova configurazione di rete.

Completata

2

dataset commit active

Esegui il commit di un nuovo set di dati nel set di dati operativi.

Completata

3

ifconfig up

Attiva l'interfaccia Thread.

Completata

4

thread start

Abilita e collega il protocollo del protocollo Thread.

Completata

Attendi 10 secondi che l'interfaccia Thread sia attiva.

5

state

Controlla lo stato del dispositivo. Deve essere il leader.
Altri stati possibili: offline, disattivato, scollegato,
bambino, 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 del PAN.

Timestamp attivo: 1
Canale: 20
Maschera canale: 0x07fff800
ID PAN esterno: fd5c:c6b:3a17:40b9::/64
Chiave di rete: 81ee f
c
7 f



Utilizzeremo il numero del canale e la chiave di rete sul 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 i FTD alla nostra rete utilizzando i comandi seguenti nell'ordine mostrato di seguito.

Indice

Comando

Descrizione comando

Risposta prevista

1

dataset channel 20

Imposta il canale utilizzato dall'OTBR.

Completata

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

È necessaria solo la chiave di rete per collegare un dispositivo a una rete Thread.

Completata

3

dataset commit active

Esegui il commit di un nuovo set di dati nel set di dati operativi.

Completata

4

ifconfig up

Attiva l'interfaccia Thread.

Completata

5

thread start

Abilita e collega il protocollo del protocollo Thread.

Completata

Attendi 20 secondi mentre il dispositivo si unisce 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 sono necessari gli indirizzi IPv6 dei dispositivi. Puoi ottenere queste informazioni 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)

Da entrambi i FTD che inviano un ping all'OTBR 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 il ping dei FTD dall'OTBR.

9. Congratulazioni

Hai creato una rete Thread.

Ora sai:

  • Come creare un progetto OpenThread utilizzando l'IDE Simplicity Studio di Silicon Labs.
  • Come creare ed eseguire il flashing di programmi binari dell'interfaccia a riga di comando OpenThread alle schede radio Silicon Labs.
  • Come configurare un Raspberry Pi 3B o versioni successive come router di confine OpenThread (OTBR) utilizzando Docker.
  • Come creare una rete Thread sull'OTBR.
  • Messa fuori servizio della banda dei 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 varietà di risorse di OpenThread, tra cui:

10. Configurazione firmware facoltativa - Demo

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

Demo di Studio

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

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

Questo elenco potrebbe essere aggiornato nelle prossime versioni 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.

Fai lampeggiare le seguenti demo sulle rispettive lavagne. Per eseguire il flashing, seleziona la tua lavagna sotto 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 per il router di confine OT. Utilizzeremo questo dispositivo per creare una rete Thread e integrare gli altri due dispositivi sulla rete Thread. Essendo un router di confine, questo dispositivo funge anche da gateway per i dispositivi nella rete Thread per comunicare su Internet.
  2. Due BRD4168A: ot-cli-ftd: questi due dispositivi funzioneranno come dispositivi Full Thread. Si uniranno alla rete Thread creata dall'OTBR.