1. Introduzione
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.
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:
- 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)
- 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.
- 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.
- 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.
- 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
- 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 versione 7.2.1
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.
4. Configurazione del firmware
Puoi iniziare in due modi. Entrambe le opzioni ti consentono di eseguire il flashing dei firmware richiesti per questo codelab.
- Progetti: (consigliato) crea, crea e esegui il flashing di un'applicazione di esempio. Questa opzione ti consente di personalizzare l'applicazione nel progetto.OPPURE
- 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.
- 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
eOpenThread 2.0.1.0 (GitHub-55af6ce2c)
. - IDE/ Toolchain: la toolchain verrà utilizzata per compilare il progetto OT. Usiamo GNU ARM.
- 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.
- 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.
- Il punto di vista dell'IDE Simplicity si apre con Project Configurator aperto nella scheda PANORAMICA.
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.
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
.
- 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.
- 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.
- 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.
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.
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.
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
.
Configurazione di Raspberry Pi
- Sulla scheda SD, assicurati di eseguire il flashing dell'immagine del sistema operativo di Raaspbian Stretch Lite o di Raspbian Stretch con Desktop.
- Puoi accedere tramite SSH a Raspberry Pi o scegliere di lavorare direttamente con Raspbian Desktop. Apri un terminale.
- 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
- Installa Docker con il seguente comando nella tua RPi.
curl -sSL https://get.docker.com | sh
- 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
- 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
- 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
. - 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.
- Due console
ot-cli-ftd
in Simplicity Studio, configurate come dispositivi Full Thread. - 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 |
| Crea una nuova configurazione di rete. | Fine | ||
2 |
| Esegui il commit del nuovo set di dati per il 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é l'interfaccia del thread diventi attiva. | |||||
5 |
| Controlla lo stato del dispositivo. Dovrebbe essere la variante leader. | Leader | ||
6 |
| Visualizza la configurazione di rete. | Timestamp attivo: 1 |
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 |
| Imposta il canale utilizzato dall'OTBR. | Fine | ||
2 |
| Per collegare un dispositivo a una rete Thread, è necessaria solo la chiave di rete. | Fine | ||
3 |
| Esegui il commit del nuovo set di dati per il 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 da solo. | |||||
6 |
| Visualizza la configurazione di rete. | figlio |
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:
- Piattaforme supportate: scopri tutte le piattaforme che supportano OpenThread
- Creare OpenThread: ulteriori dettagli su come creare e configurare OpenThread.
- Thread Primer: tratta tutti i concetti relativi ai thread presentati in questo codelab
- Formazione su OpenThread di Silicon Labs: un'introduzione a OpenThread, illustra la messa in servizio e i router di confine, oltre a un esercizio pratico sulla creazione di una rete OpenThread.
- QSG170: Guida rapida di Silicon Labs per OpenThread: illustra in dettaglio il processo introduttivo per lo sviluppo di Silicon Labs Thread.
- AN1256: utilizzo dell'RCP di Silicon Labs con il router di confine OpenThread: istruzioni per la creazione e l'installazione dell'host del router di confine Raspberry Pi
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.
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 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.
- 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.
- 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.