1. Introduction
OpenThread (OT) est une implémentation Open Source de Thread de Google. Google a publié OpenThread pour permettre aux développeurs de bénéficier de la technologie de mise en réseau des produits Google Nest, et ainsi accélérer le développement des produits pour les maisons connectées et les bâtiments commerciaux. Grâce à une couche d'abstraction de plate-forme étroite et une faible empreinte mémoire, OpenThread est hautement portable. Il est compatible avec les conceptions système sur puce (SoC) et les coprocesseurs réseau (NCP).
La spécification Thread définit un protocole de communication d'appareil à appareil fiable, sécurisé et basse consommation basé sur le protocole IPv6 pour les applications à usage domestique et commercial.
Silicon Labs a amélioré OpenThread pour fonctionner avec le matériel Silicon Labs. Ce code source est disponible sur GitHub et sous forme de kit de développement logiciel (SDK) installé avec Simplicity Studio 5 (SSv5). Le SDK inclut un instantané entièrement testé du code source de GitHub. Il est compatible avec une gamme de matériel plus vaste que la version GitHub, et comprend de la documentation et des exemples d'applications non disponibles sur GitHub.
Ce guide explique comment développer des applications OpenThread à l'aide du SDK OpenThread Silicon Labs et de Simplicity Studio 5. L'image ci-dessous présente les cartes (BRD) et le matériel configurés avec un routeur de bordure OTBR et deux appareils Thread utilisés dans cet atelier de programmation.
Points abordés
- Créer un projet OpenThread à l'aide de l'IDE de Silicon Labs Simplicity Studio
- Créer et flasher des binaires de la CLI OpenThread sur les tableaux d'options Silicon Labs
- Configurer un Raspberry Pi 3B ou une version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
- Créer un réseau Thread sur l'OTBR
- Mise hors service des bandes sur les appareils sur un réseau Thread
- Vérifier la communication Thread entre les nœuds à l'aide de la commande ping
2. Prérequis
Matériel :
- 3 cartes radio EFR32MGxx. Vous pouvez utiliser n'importe quelle combinaison de ces appareils. Cet atelier de programmation utilise le code RCP 4166A en tant que RCP et deux appareils Brd4168A en tant que périphériques Thread.
- EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
- EFR32MG13 (BRD4168A)
- EFR32MG21 (BRD4180A, BRD4180B)
- BRD4001A: carte principale de démarrage sans fil (WSTK) pour héberger les cartes radio. À l'exception du BRD4166A, toutes les cartes radio ont besoin d'une carte principale de démarrage. Câbles mini USB pour connecter et alimenter les cartes principales ou le câble micro USB pour BRD4166A.
- Raspberry Pi 3B+ ou version ultérieure avec Raspbian Stretch Lite OS image ou Raspbian Stretch with Desktop, connecté à Internet via Ethernet. Nous le configurons en tant que routeur de bordure OT.
- Un système d'hôte Windows/Linux/Mac doté d'au moins deux ports USB et une connexion Internet. Vérifiez la configuration matérielle et l'OS requises sur la page SSv5.
- Au moins un câble Ethernet pour connecter le Raspberry Pi à Internet. Les WSTK sont également compatibles avec le débogage et le flash sur IP. Vous pouvez donc éventuellement utiliser des câbles Ethernet supplémentaires pour connecter votre WSTK à votre système hôte via un commutateur Ethernet.
Logiciel :
- Simplicité Studio v5 installée et mise à jour sur le système d'hébergement Windows/Linux/Mac avec
- Chaîne d'outils GNU ARM
- Gecko SDK Suite 3.2.0 (ou version ultérieure) et Silicon Labs OpenThread SDK.
3. Configuration du matériel
Cet atelier de programmation a été créé avec
- EFR32MG12 BRD4166A Thunderboard Sense 2, comme indiqué à gauche
- Deux EFR32MG13 BRD4168A, comme indiqué à droite.
- Simplicity Studio v5 est installé sur une version 10.15.7 de macOS Catalina avec
- SDK Gecko 3.2.0
- GNU ARM v7.2.1
Connectez chaque carte principale du kit de démarrage sans fil à l'ordinateur hôte à l'aide d'un câble USB, comme illustré ci-dessous. Ces connexions permettront de programmer et d'analyser le réseau RCP et les appareils finaux. Nous allons d'abord utiliser l'ordinateur hôte pour programmer le processeur BRD4166A avec le micrologiciel ot-rcp, puis le connecter au Raspberry Pi. Vous pouvez éventuellement connecter les appareils finaux à l'ordinateur hôte via un commutateur Ethernet commun. Les kits de démarrage sont également compatibles avec la programmation et l'analyse réseau via IPv4.
4. Configuration du micrologiciel
Pour commencer, vous pouvez procéder de deux façons. Ces deux options vous permettent de flasher les micrologiciels requis pour cet atelier de programmation.
- Projets: (recommandé) créez, compilez et flashez un exemple d'application. Cette option vous permet de personnaliser l'application dans le projet.OU
- Démonstrations (facultatif) : flashez les versions de démonstration prédéfinies directement sur la carte radio pour les exemples d'applications. Les utilisateurs sont invités à essayer le micrologiciel Demos configuré en tant qu'exercice facultatif. Pour en savoir plus, consultez la section "Configuration facultative du micrologiciel – Démonstrations" à la fin de cet atelier de programmation.
Nous utiliserons la méthode basée sur le projet pour cet atelier de programmation.
Créer des projets à l'aide d'exemples
Nous allons créer deux projets. Le projet ot-rcp
pour BRD4166A et le projet ot-cli-ftd
pour les deux BRD4168A. Veuillez suivre cette procédure et sélectionner l'exemple d'application correspondant à votre tableau.
- Ouvrez le menu Fichier de Studio et sélectionnez Nouveau > Assistant de projet Silicon Labs. La boîte de dialogue "Target", "SDK" et "Toolchain Selection" s'ouvre. Ne modifiez pas la chaîne d'outils IDE / GNU Simplicity par défaut compatible avec OpenThread. Cliquez sur "Suivant".
- Cartes cibles: affiche la carte d'option sélectionnée (BRD4168A) avec la carte principale (BRD4001A)
- Appareil cible: ce champ montre la puce du microcontrôleur (MCU). Le BRD4168A dispose d'une unité MCU EFR32MG13.
- SDK: dans cet onglet, vous pouvez sélectionner la version du SDK pour laquelle vous travaillez. Les informations de la suite incluent la balise SDK et le build OpenThread Silicon Labs, par exemple
Platform 4.0.1.0
etOpenThread 2.0.1.0 (GitHub-55af6ce2c)
. - IDE/ Chaîne d'outils: chaîne d'outils qui sera utilisée pour compiler le projet OT. Nous utilisons GNU ARM.
- La boîte de dialogue "Exemple de sélection de projet" s'ouvre. Une liste d'exemples de projets s'affiche. Recherchez un exemple spécifique en utilisant le filtre Thread (Type de technologie) et les mots clés. Notez bien le numéro de version de la suite SDK Gecko. Vous aurez besoin de cette balise de version lorsque vous configurerez Raspberry Pi en tant que routeur de bordure. Sélectionnez ot-cli-ftd, puis cliquez sur SUIVANT.
- La boîte de dialogue "Project Configuration" (Configuration du projet) s'ouvre. Vous pouvez renommer votre projet, modifier son emplacement par défaut et déterminer si vous l'associerez ou le copierez. Les fichiers de projet associés pointent vers le SDK et toutes les modifications que vous apportez dans le SDK sont utilisées pour de futurs projets. La copie des sources du projet vous permet de modifier une copie locale du projet afin de conserver les fichiers du SDK. L'option Associer le SDK et copier les sources du projet est sélectionnée par défaut. Cliquez sur TERMINER.
- L'IDE Simplicité Perspective s'ouvre sur l'onglet VUE D'ENSEMBLE de Project Configurator.
Pour configurer le projet depuis l'onglet Composants logiciels, installez et désinstallez des composants, puis configurez les composants installés. Les composants installés sont vérifiés. Cliquez sur Components installés pour afficher une liste filtrée des composants installés par l'exemple d'application. Toutes les modifications que vous apportez sont enregistrées automatiquement, et les fichiers de projet sont générés automatiquement. La progression est affichée en bas à droite de la perspective de l'IDE de simplicité.
Pour cette démonstration, nous allons utiliser la configuration par défaut des exemples d'applications. Répétez les étapes ci-dessus afin de créer le projet ot-rcp
pour votre autre carte.
Compiler et flasher les projets
Créez et flashez les projets ot-rcp
et ot-cli-ftd
.
- Une fois votre projet configuré, cliquez sur l'icône Build control (marteau) dans la barre d'outils supérieure. Vous pouvez également effectuer un clic droit sur le projet et créer un projet.
- La progression est affichée dans la console, ainsi qu'une barre de progression en bas à droite. Les erreurs ou avertissements liés à votre projet s'affichent également dans cette fenêtre de sortie.
- Les images binaires sont générées après la compilation réussie d'un projet. Vous pouvez flasher l'image binaire dans la vue de l'explorateur de projets. Recherchez le fichier .bin, .hex ou .s37 dans le sous-répertoire du compilateur. Effectuez un clic droit sur le fichier, puis sélectionnez Flasher sur l'appareil. Si plusieurs appareils sont connectés, puis sélectionnez-en un pour votre programmation, cliquez sur OK. Le programmeur Flash s'ouvre et affiche le chemin d'accès au fichier. Cliquez sur PROGRAMME.
5. Résumé de la configuration du micrologiciel
À ce stade, vous devriez avoir créé, compilé et flashé le micrologiciel approprié sur les cartes mères. Une fois que ot-rcp
a flashé sur BRD4166A, débranchez-le du système hôte et connectez cette carte à la Raspberry Pi.
Une fois cette section terminée, votre matériel réseau Thread ressemblera à cet exemple.
6. Configurer la console série pour les appareils ot-cli-ftd
Pour lancer l'interface de la console, dans la perspective de l'IDE de simplicité, effectuez un clic droit sur votre appareil J-Link dans la fenêtre "Appareils" ou "Adaptateurs de débogage". Sélectionnez Launch Console (Lancer la console). Pour afficher une invite sur la console, sélectionnez l'onglet Série 1 et appuyez sur Entrée. Vérifiez l'état du nœud FTD.
Vous remarquerez que la console ot-rcp
n'est pas encore disponible. À l'étape suivante, nous configurerons Raspberry Pi en tant que routeur de bordure OT et configurerons la console pour ot-rcp
.
7. Configurer Raspberry Pi en tant que routeur de bordure
Silicon Labs recommande de déployer le conteneur Docker de l'entreprise via la technologie OTBR. L'exécution de l'OTBR dans un conteneur permet de créer des artefacts faciles à déployer, ainsi que de créer un prototypage et des tests rapides.
Les images OTBR de Silicon Labs sont hébergées sur siliconlabsinc DockerHub et comportent des tags. Chaque balise correspond à une version GSDK:
https://hub.docker.com/r/siliconlabsinc/openthread-border-router/tags
Les conteneurs Docker doivent être utilisés avec des RCP créés à l'aide de Simplicity Studio 5 pour une version donnée. Assurez-vous que la version du tag du conteneur correspond à la version du GSDK que vous testez. Par exemple, si votre version de GDSK est Gecko SDK Suite v4.0.1 (140)
lorsque vous avez sélectionné ot-rcp
dans la fenêtre Exemple de sélection de projet, utilisez l'image siliconlabsinc/openthread-border-router:gsdk-4.0.1
.
Configuration de Raspberry Pi
- Sur votre carte SD, veillez à flasher l'image ROSbian Stretch Lite ou Raspbian Stretch with Desktop.
- Vous pouvez vous connecter en SSH au Raspberry Pi ou choisir d'utiliser directement le bureau Raspbian. Ouvrez un terminal.
- Assurez-vous de mettre à jour vos dépôts locaux et votre gestionnaire de packages (apt-get update et apt-get Upgrade) avant d'installer Docker.
Installer l'image Docker
- Installez Docker avec la commande suivante sur votre RPi :
curl -sSL https://get.docker.com | sh
- Une fois que vous avez terminé, vous pouvez modifier les paramètres utilisateur de Docker afin qu'il ne nécessite pas sudo avant chaque commande. Redémarrage requis.
sudo usermod -aG docker $USER
- Exécutez les commandes suivantes pour installer les conteneurs. Notez que vous ne pouvez exécuter qu'un seul conteneur de routeur de bordure à la fois avec votre RCP. Assurez-vous également que votre version de GSDK Simplicity Studio correspond à la bonne image Docker. Exemple :
gsdk-4.0.1
:docker pull siliconlabsinc/openthread-border-router:gsdk-4.0.1
Configurer et exécuter Docker
- Vous devez configurer le port TTY que vous souhaitez utiliser pour que l'OTBR connecte votre RCP au démarrage. Recherchez le port TTY de votre appareil RCP. Pour ce faire, le moyen le plus simple consiste à rechercher une entrée
/tty/dev
... une fois le RCP connecté. Il doit généralement correspondre à/dev/ttyUSB0
ou/dev/ttyACM0
. - Exécutez votre installation Docker à l'aide de la commande suivante. Veillez à remplacer le nom de votre image Docker par la version GSDK correspondante. Par exemple,
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
garantit que le conteneur s'exécute en mode dissocié.- Vous pouvez consulter les journaux du conteneur en cours d'exécution à tout moment à l'aide de la commande
docker logs
. --name
est persistant jusqu'à ce que le conteneur Docker soit correctement fermé (ou supprimé).- Le port 8080 indique le port du serveur Web qui héberge la page Web de gestion du routeur de bordure.
?uart-baudrate=460800
est nécessaire dans les options des URL radio pour contourner les problèmes de fragmentation / remontage sur UART, avec des opérations coûteuses telles que DTLS avec de longs paquets IPv6.
Interagir avec le nœud RCP
Une fois le Docker exécuté, vous pouvez communiquer avec le nœud RCP via une interface système interactive à l'aide de cette commande. Vérifiez l'état du nœud RCP.
$ docker exec -ti otbr sh -c "sudo ot-ctl" > state disabled Done
Vous pouvez obtenir la liste des ID de conteneurs en cours d'exécution
$ docker ps -aq
Vous pouvez vérifier la fenêtre d'exécution du conteneur Docker OTBR pour générer la sortie du journal du routeur de bordure ou suivre le journal du conteneur comme suit:
$ docker logs [container-id] -f
Vous pouvez également arrêter, supprimer ou supprimer votre image si le conteneur Docker est chargé correctement.
$ docker stop otbr
$ docker rm otbr
$ docker kill otbr
(Facultatif) Pour quitter le shell, utilisez CNTL + C.
À ce stade, vous devez avoir trois consoles.
- Deux consoles
ot-cli-ftd
dans Simplicity Studio, configurées en tant qu'appareils Thread entièrement. - Une interface système interactive
ot-ctl
sur le Raspberry Pi configuré en tant que routeur de bordure OT.
Nous sommes maintenant prêts à créer un réseau Thread.
8. Créer un réseau Thread
Configurer le protocole RCP
Pour créer le réseau, nous commençons par l'interface système ot-ctl
sur l'OTBR, qui permet de communiquer avec le nœud RCP. Saisissez les commandes suivantes dans l'ordre indiqué ci-dessous:
Index | Commande | Description de la commande | Réponse attendue | ||
1 |
| Créez une configuration réseau. | Terminée | ||
2 |
| Validez le nouvel ensemble de données dans l'ensemble de données opérationnel actif. | Terminée | ||
3 |
| Activer l'interface Thread | Terminée | ||
4 |
| Activer et associer l'opération du protocole Thread. | Terminée | ||
Attendez 10 secondes que l'interface de thread soit opérationnelle. | |||||
5 |
| Vérifiez l'état de l'appareil. Il devrait s'agir du leader. | Leader | ||
6 |
| Affichez la configuration du réseau. | ? |
Nous utiliserons le numéro de canal et la clé réseau de ot-cli-ftd
pour joindre les deux FTD à ce réseau thread.
Configurer et ajouter FTD à notre réseau Thread (méthode hors bande)
Avec la méthode hors bande, nous connaissons toutes les informations de sécurité et ajoutons le nœud manuellement. Dans les consoles Simplicity, ajoutez les deux FTD à notre réseau à l'aide des commandes suivantes, dans l'ordre indiqué ci-dessous.
Index | Commande | Description de la commande | Réponse attendue | ||
1 |
| Définissez le canal utilisé par l'OTBR. | Terminée | ||
2 |
| Seule la clé réseau est nécessaire pour qu'un appareil puisse être connecté à un réseau Thread. | Terminée | ||
3 |
| Validez le nouvel ensemble de données dans l'ensemble de données opérationnel actif. | Terminée | ||
4 |
| Activer l'interface Thread | Terminée | ||
5 |
| Activer et associer l'opération du protocole Thread. | Terminée | ||
Patientez 20 secondes, le temps que l'appareil se connecte et se configure automatiquement. | |||||
6 |
| Affichez la configuration du réseau. | enfant |
Communication entre les appareils Thread
Nous utiliserons la commande ping
pour vérifier si les appareils peuvent communiquer entre eux. Pour utiliser la commande ping, nous avons besoin des adresses IPv6 des appareils. Vous pouvez les obtenir à l'aide de la commande 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)
Depuis les deux FTD, pinguez l'OTBR en utilisant l'adresse RLOC de l'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 réponse indique la charge utile reçue et que la communication a réussi. Répétez le processus pour pinguer les FTD depuis l'OTBR.
9. Félicitations
Vous avez créé un réseau Thread.
Vous savez désormais:
- Créer un projet OpenThread à l'aide de l'IDE de Silicon Labs Simplicity Studio
- Créer et flasher des binaires de la CLI OpenThread sur les tableaux d'options Silicon Labs
- Configurer un Raspberry Pi 3B ou une version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
- Créer un réseau Thread sur l'OTBR
- Mise hors service des bandes sur les appareils sur un réseau Thread
- Vérifier la communication Thread entre les nœuds à l'aide de la commande ping
Documentation complémentaire
Rendez-vous sur openthread.io et GitHub pour accéder à diverses ressources OpenThread, y compris:
- Plates-formes compatibles : découvrez toutes les plates-formes compatibles avec OpenThread.
- Build OpenThread : informations supplémentaires sur la création et la configuration d'OpenThread
- Thread Prime : couvre tous les concepts de Thread présentés dans cet atelier de programmation.
- Silicon Labs OpenThread Training : présentation d'OpenThread, traitant de la mise en service et des routeurs de bordure, et d'un exercice pratique sur la création d'un réseau OpenThread.
- QSG170 : Guide de démarrage rapide de Silicon Labs OpenThread : décrit en détail le processus de démarrage pour le développement de threads Silicon Labs.
- AN1256: utiliser le protocole RCP de Silicon Labs avec le routeur de bordure OpenThread – Instructions de compilation et d'installation pour l'hôte du routeur de bordure Raspberry Pi
10. Configuration du micrologiciel facultative : démonstrations
Les démonstrations sont des images de micrologiciels prêtes à être téléchargées sur un appareil compatible. Le moyen le plus rapide de vérifier si une démonstration est disponible pour vous dans Simplicity Studio consiste à cliquer sur votre partie dans la vue "Debug Adapters" (Adaptateurs de débogage), puis à accéder à l'onglet EXAMPLES PROJECTS & DEMOS dans l'onglet "Launcher Perspective". Désactivez le filtre "Exemples de projets" et cochez la case d'option "Thread" sous "Type de technologie".
Les images d'application de démonstration précompilées fournies avec le SDK OpenThread sont compatibles avec les cartes suivantes:
- BRD4161a
- BRD4166a
- BRD4168a
- BRD4180a
- BRD4304a
Cette liste pourra être mise à jour dans les prochaines versions du SDK afin d'inclure davantage de cases d'option. Pour obtenir la liste complète des pièces compatibles, veuillez consulter les notes de version du SDK OpenThreads de Silicon Labs.
Flashez les démos suivantes sur les tableaux respectifs. Pour flasher, sélectionnez votre tableau sous "Adaptateurs de débogage" à gauche, puis cliquez sur RUN pour exécuter les exemples d'applications correspondants. Une fenêtre pop-up affiche la progression du flash.
- BRD4166A : ot-rcp : cet appareil fait office de processeur de radio par radio pour le routeur de bordure OT. Nous utiliserons cet appareil pour créer un réseau Thread et intégrer les deux autres appareils au réseau Thread. En tant que routeur de bordure, cet appareil sert également de passerelle aux appareils du réseau Thread pour communiquer via Internet.
- Deux appareils BRD4168A : ot-cli-ftd : ces deux appareils fonctionnent comme des appareils Thread complets. Ils rejoindront le réseau Thread créé par l'OTBR.