Créer un réseau Thread avec les cartes EFR32 Silicon Labs et OpenThread à l'aide de Simplicity Studio v5

1. Introduction

26b7f4f6b3ea0700.png

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.

Configuration matérielle EFR32MG

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 :

  1. 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)
    Si vous recommencez, vous pouvez vous procurer l'un des kits de démarrage Thread EFR32 équipés des cartes indiquées ci-dessus.
  2. 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.

WSTK AEM

  1. 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.
  2. 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.
  3. 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

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, comme indiqué à gauche
  2. Deux EFR32MG13 BRD4168A, comme indiqué à droite.
  3. Simplicity Studio v5 est installé sur une version 10.15.7 de macOS Catalina avec
    1. SDK Gecko 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

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.

Connexions

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.

  1. Projets: (recommandé) créez, compilez et flashez un exemple d'application. Cette option vous permet de personnaliser l'application dans le projet.OU
  2. 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.

  1. 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 et OpenThread 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.

Assistant de création de projet

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

Étape 2 de l'assistant de création de projet

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

Étape 3 de l'assistant de création de projet

  1. L'IDE Simplicité Perspective s'ouvre sur l'onglet VUE D'ENSEMBLE de Project Configurator.

Présentation du projet

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

Composants logiciels

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.

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

Bouton "Créer un projet"

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

Fenêtre de sortie de la compilation du projet

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

Flash

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.

Configuration EFR32MG

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.

Vue de la console FTD Studio

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.

Version de GSDK

Configuration de Raspberry Pi

  1. Sur votre carte SD, veillez à flasher l'image ROSbian Stretch Lite ou Raspbian Stretch with Desktop.
  2. Vous pouvez vous connecter en SSH au Raspberry Pi ou choisir d'utiliser directement le bureau Raspbian. Ouvrez un terminal.
  3. 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

  1. Installez Docker avec la commande suivante sur votre RPi :
    curl -sSL https://get.docker.com | sh
    
  2. 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
    
  3. 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

  1. 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.
  2. 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.

  1. Deux consoles ot-cli-ftd dans Simplicity Studio, configurées en tant qu'appareils Thread entièrement.
  2. 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

dataset init new

Créez une configuration réseau.

Terminée

2

dataset commit active

Validez le nouvel ensemble de données dans l'ensemble de données opérationnel actif.

Terminée

3

ifconfig up

Activer l'interface Thread

Terminée

4

thread start

Activer et associer l'opération du protocole Thread.

Terminée

Attendez 10 secondes que l'interface de thread soit opérationnelle.

5

state

Vérifiez l'état de l'appareil. Il devrait s'agir du leader.
Autres états possibles: hors connexion, désactivé, dissocié,
enfant, routeur ou responsable

Leader
Terminé

6

dataset

Affichez la configuration du réseau.
Vos valeurs seront différentes de celles de cet atelier de programmation.
Notez le canal, la clé réseau,
le nom du réseau et l'ID PAN.

?









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

dataset channel 20

Définissez le canal utilisé par l'OTBR.

Terminée

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Seule la clé réseau est nécessaire pour qu'un appareil puisse être connecté à un réseau Thread.

Terminée

3

dataset commit active

Validez le nouvel ensemble de données dans l'ensemble de données opérationnel actif.

Terminée

4

ifconfig up

Activer l'interface Thread

Terminée

5

thread start

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

state

Affichez la configuration du réseau.

enfant
OK

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:

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

Démonstrations Studio

Les images d'application de démonstration précompilées fournies avec le SDK OpenThread sont compatibles avec les cartes suivantes:

  1. BRD4161a
  2. BRD4166a
  3. BRD4168a
  4. BRD4180a
  5. 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.

  1. 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.
  2. 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.