Crea una rete Thread con schede EFR32 di Silicon Labs 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 più ampiamente disponibile la tecnologia di networking utilizzata nei prodotti Google Nest per gli sviluppatori, in modo da accelerare lo sviluppo di prodotti per la casa connessa e gli edifici commerciali. Grazie a un livello di astrazione della piattaforma stretto e a un utilizzo ridotto della memoria, OpenThread è altamente portabile. Supporta sia le progettazioni system-on-chip (SoC) sia quelle con co-processore di rete (NCP).

La specifica Thread definisce un protocollo di comunicazione tra dispositivi wireless affidabile, sicuro e a basso consumo energetico basato su IPv6 per applicazioni in edifici domestici e commerciali.

Silicon Labs ha migliorato OpenThread in modo che funzioni 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 di hardware più ampia 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 l'hardware configurato con un router di confine OT (OTBR) e due dispositivi Thread utilizzati nel codelab.

Configurazione dell'hardware EFR32MG

Obiettivi didattici

  • Come creare un progetto OpenThread utilizzando l'IDE di Silicon Labs Simplicity Studio.
  • Come creare e eseguire il flashing di file binari OpenThread CLI alle schede radio Silicon Labs.
  • Come configurare un Raspberry Pi 3B+ o versioni successive come router di confine OpenThread (OTBR) usando Docker.
  • Come creare una rete Thread su OTBR.
  • Messa in servizio fuori banda di dispositivi su una rete Thread.
  • Come verificare la comunicazione Thread tra i nodi utilizzando il comando ping.

2. Prerequisiti

Articoli di ferramenta:

  1. 3 schede radio EFR32MGxx - è possibile usare 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)
    di Gemini Advanced. Se inizi da zero, puoi acquistare uno dello starter kit EFR32 Thread che include 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 ciascuna una scheda principale di avviamento. Cavi mini USB per collegare e alimentare le schede principali o cavo micro USB per BRD4166A.

AEM WSTK

  1. Raspberry Pi 3B o versioni successive con immagine 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 dispositivi WSTK supportano anche il debug e il flashing su IP, quindi, facoltativamente, è possibile utilizzare cavi Ethernet aggiuntivi per collegare il dispositivo WSTK al sistema host tramite uno switch Ethernet.

Software:

  • Simplicity Studio v5 installato e aggiornato sul sistema host Windows/Linux/Mac con
    • Catena di strumenti GNU ARM
    • Gecko SDK Suite 3.2.0 o versione successiva e SDK OpenThread di Silicon Labs.

3. Configurazione hardware

Questo codelab è stato creato

  1. EFR32MG12 BRD4166A Thunderboard Sense 2 come mostrato a sinistra.
  2. Due EFR32MG13 BRD4168A come mostrato a destra.
  3. Simplicity Studio v5 installato su macOS Catalina 10.15.7 con
    1. SDK Gecko 3.2.0
    2. GNU ARM versione 7.2.1

BRD4168A

Collega ciascuna scheda principale del Wireless Starter Kit al computer host tramite USB, come mostrato nell'immagine di seguito. Tali connessioni consentono la programmazione e l'analisi della rete dell'RCP e dei dispositivi finali. Prima useremo il computer host per programmare il BRD4166A con il firmware ot-rcp e alla fine 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 tramite 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) crea, crea e esegui il flashing di un'applicazione di esempio. Questa opzione ti consente di personalizzare l'applicazione nel progetto.OPPURE
  2. Demo: (facoltativo) esegui il flashing delle demo predefinite sulla scheda radio per qualsiasi applicazione di esempio. Gli utenti sono invitati a provare il firmware di Demos configurato come esercizio opzionale. Consulta la sezione "Configurazione facoltativa del firmware - Demo" alla fine di questo codelab per maggiori dettagli.

Per questo codelab utilizzeremo il metodo basato su progetto.

Crea 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. Si apre la finestra di dialogo Target, SDK e Selezione della catena degli strumenti. Non modificare la toolchain predefinita IDE / GNU Simplicity 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 microcontroller (MCU) integrato. Il BRD4168A dispone di una MCU EFR32MG13 integrata.
    • SDK: qui puoi selezionare la versione dell'SDK OT che stai utilizzando. Le informazioni sulla suite includono il tag dell'SDK e la build di OpenThread di Silicon Labs, ad esempio Platform 4.0.1.0 e OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: la toolchain verrà utilizzata per compilare il progetto OT. Usiamo GNU ARM.

Nuova procedura guidata per il progetto

  1. Si apre la finestra di dialogo Selezione progetto di esempio. Noterai un elenco di progetti di esempio. Utilizza i filtri per tipo di tecnologia Thread e parole chiave per cercare un esempio specifico. Assicurati di prendere nota del numero di versione di Gecko SDK Suite. Ti servirà quando configuri il Raspberry Pi come router di confine. Seleziona ot-cli-ftd, poi fai clic su AVANTI.

Passaggio 2 della nuova procedura guidata di progetto

  1. Si apre la finestra di dialogo Configurazione progetto. Qui puoi rinominare il progetto, modificare la posizione predefinita del file di progetto e stabilire se collegherai o copierai ai file di progetto. I file di progetto collegati rimandano all'SDK e le eventuali modifiche apportate vengono apportate all'SDK e utilizzate per progetti futuri. Se copi le origini del progetto, puoi modificare una copia locale del progetto in modo che i file dell'SDK rimangano intatti. "Collega l'SDK e copia le origini del progetto" è l'impostazione predefinita e consigliata. Fai clic su TERMINA.

Passaggio 3 della nuova procedura guidata di progetto

  1. Il punto di vista dell'IDE Simplicity si apre con Project Configurator 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 viene mostrato nell'angolo in basso a destra della prospettiva dell'IDE Simplicity.

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 bacheca.

Crea ed esegui il flashing dei progetti

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

  1. Una volta configurato il progetto, fai clic su Controllo build (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 scegliere Crea progetto.

Pulsante Crea progetto

  1. L'avanzamento viene visualizzato nella console e una 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 corretta compilazione del progetto. Puoi eseguire il flashing dell'immagine binaria dalla vista Project Explorer. Individua il file .bin, .hex o .s37 nella sottodirectory del compilatore. Fai clic con il pulsante destro del mouse sul file e seleziona Flash to Device. Se hai connesso più di un dispositivo, seleziona un dispositivo da programmare e fai clic su Ok. Si apre il programmatore Flash con il percorso dei file compilato. Fai clic su PROGRAMMA.

Flash

5. Riepilogo della configurazione del firmware

A questo punto dovresti aver creato, compilato e eseguito il flashing del firmware appropriato sulle schede radio. Dopo aver eseguito il flashing di ot-rcp su BRD4166A, disconnettilo dal sistema host e collega questa scheda a Raspberry Pi.

Dopo aver completato questa sezione, la configurazione dell'hardware di 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 prospettiva dell'IDE Simplicity fai clic con il tasto destro del mouse sul tuo dispositivo J-Link nella finestra Visualizzazione dispositivi / Adattatori di debug. Scegli Avvia Console. Per ricevere un messaggio nella console, scegli la scheda Seriale 1 e premi Invio. Controlla lo stato del nodo FTD.

Visualizzazione console FTD Studio

Noterai che non disponiamo ancora di 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 l'OTBR. L'esecuzione dell'OTBR in un container consente di creare artefatti di facile deployment, nonché prototipazione e test rapidi per lo sviluppo.

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

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

I container Docker devono essere utilizzati con RCP creati utilizzando Simplicity Studio 5 per una determinata release. Assicurati di abbinare la versione del tag contenitore alla versione GSDK che stai utilizzando per il test. Ad esempio, se la versione GDSK era Gecko SDK Suite v4.0.1 (140) quando hai selezionato ot-rcp nella finestra Selezione progetto di esempio, usa 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 del sistema operativo di Raaspbian Stretch Lite o di Raspbian Stretch con Desktop.
  2. Puoi accedere tramite SSH a Raspberry Pi o scegliere di lavorare direttamente con Raspbian Desktop. Apri un terminale.
  3. Assicurati di aggiornare i repository locali e il gestore di pacchetti (apt-get update e apt-get upgrade prima di installare Docker).

Installa immagine Docker

  1. Installa Docker con il seguente comando nella tua RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Al termine, puoi modificare le impostazioni utente Docker in modo da non richiedere sudo prima di ogni comando. È necessario riavviare.
    sudo usermod -aG docker $USER
    
  3. Esegui i comandi seguenti per installare i container. Tieni presente che puoi avere un solo container router di confine in esecuzione alla volta con il tuo RCP. Inoltre, assicurati di abbinare la versione dell'SDK 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

  1. Devi configurare la porta TTY che vuoi utilizzare affinché l'OTBR colleghi l'RCP all'avvio. Cerca la porta TTY del dispositivo RCP. Il modo più semplice per farlo è cercare una voce /tty/dev... una volta collegato l'RCP. In genere dovrebbe essere /dev/ttyUSB0 o /dev/ttyACM0.
  2. Esegui l'installazione di Docker con questo comando. 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à scollegata.
    • Puoi visualizzare i log in esecuzione per il container in qualsiasi momento utilizzando il comando docker logs.
    • --name rimane fisso fino a quando 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.
    • È richiesto ?uart-baudrate=460800 nelle opzioni dell'URL radio per evitare i problemi di frammentazione / riassemblaggio tramite UART, con operazioni costose come DTLS con lunghi pacchetti IPv6.

Interagisci 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 di ID container in esecuzione

$ docker ps -aq

Puoi controllare la finestra che esegue il container Docker OTBR per eseguire l'output del 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 3 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 è tutto pronto per formare una rete Thread.

8. Crea una rete Thread

Configura RCP

Per creare la rete, iniziamo con la shell ot-ctl sull'OTBR, utilizzata per comunicare con il nodo RCP. Inserisci i comandi seguenti 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 del nuovo set di dati per il set di dati operativo attivo.

Fine

3

ifconfig up

Attiva l'interfaccia Thread.

Fine

4

thread start

Abilita e collega l'operazione del protocollo Thread.

Fine

Attendi 10 secondi affinché l'interfaccia del thread diventi attiva.

5

state

Controlla lo stato del dispositivo. Dovrebbe essere la variante leader.
Altri stati possibili: offline, disattivato, scollegato,
figlio, router o leader

Leader
Done

6

dataset

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

Timestamp attivo: 1
Canale: 20: 1
Canale: 20
Canale: 20
Canale: 20

Mask canale: 20
Mask canale: 0x07fff800

Mask canale: 0x07fff800

ID PAN

Utilizzeremo il numero di canale e la chiave di rete su ot-cli-ftd per unire i due FTD a questa rete Thread.

Configurazione e aggiunta di 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 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.

Fine

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

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

Fine

3

dataset commit active

Esegui il commit del nuovo set di dati per il set di dati operativo attivo.

Fine

4

ifconfig up

Attiva l'interfaccia Thread.

Fine

5

thread start

Abilita e collega l'operazione del 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, sono necessari gli indirizzi IPv6 dei dispositivi. Puoi ottenerle con 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 gli FTD, invia un ping all'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

La risposta indica il payload ricevuto e che la comunicazione è riuscita. 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 l'IDE di Silicon Labs Simplicity Studio.
  • Come creare e eseguire il flashing di file binari OpenThread CLI alle schede radio Silicon Labs.
  • Come configurare un Raspberry Pi 3B+ o versioni successive come router di confine OpenThread (OTBR) usando Docker.
  • Come creare una rete Thread su OTBR.
  • Messa in servizio fuori banda 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 trovare una serie di risorse OpenThread, tra cui:

10. Configurazione firmware facoltativa - Demo

Le demo sono immagini firmware predefinite pronte per essere scaricate su un dispositivo compatibile. Il modo più rapido per sapere se per te è disponibile una demo in Simplicity Studio è fare clic sulla tua parte nella visualizzazione Debug Adapters e andare alla sezione ESEMPIO DI PROGETTI E Scheda DEMOS in Launcher Perspective. Disattiva il filtro Progetti di esempio e seleziona la casella di controllo Thread radio in 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 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.

Inserisci le seguenti demo sulle rispettive schede. Per lampeggiare, seleziona la tua lavagna sotto Adattatori di debug a sinistra e fai clic su ESEGUI per le applicazioni di esempio corrispondenti. Verrà visualizzata una finestra popup che mostrerà l'avanzamento del flash.

  1. BRD4166A: ot-rcp: questo dispositivo funzionerà come processore Radio Co del router di confine OT. Utilizzeremo questo dispositivo per creare una rete Thread e per eseguire l'onboarding degli 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 con tecnologia Full Thread. Entreranno a far parte della rete Thread creata dall'OTBR.