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

1. Introduction

26b7f4f6b3ea0700.png

OpenThread (OT) de Google est une implémentation Open Source de Thread. Google a lancé OpenThread pour rendre la technologie réseau utilisée dans les produits Google Nest plus largement accessible aux développeurs, afin d’accélérer le développement de produits pour la maison connectée et les bâtiments commerciaux. Avec une couche d'abstraction de plate-forme étroite et une petite quantité de mémoire, OpenThread est hautement portable. Il est compatible avec les conceptions système sur puce (SoC) et à coprocesseur réseau (NCP).

La spécification Thread définit un protocole de communication sans fil d'appareil à appareil fiable, sécurisé et à faible consommation d'énergie basé sur le protocole IPv6 pour les applications de bâtiment domestiques et professionnelles.

Silicon Labs a amélioré la compatibilité d'OpenThread 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 GitHub. Elle est compatible avec une plus grande variété de matériel que la version GitHub, et inclut de la documentation et des exemples d'applications non disponibles sur GitHub.

Ce guide explique comment commencer à développer des applications OpenThread à l’aide du SDK OpenThread de Silicon Labs et de Simplicity Studio 5. L'image ci-dessous montre les cartes (BRD) et le matériel configuré avec un routeur de bordure OTBR et deux appareils Thread utilisés dans l'atelier de programmation.

Configuration du matériel EFR32MG

Points abordés

  • Comment créer un projet OpenThread à l'aide de l'IDE Silicon Labs Simplicity Studio.
  • Comment construire et flasher des binaires CLI OpenThread sur les cartes radio Silicon Labs.
  • Comment 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 en service hors bande des 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 : n'importe quelle combinaison de ces dispositifs peut être utilisée. Cet atelier de programmation utilise un BRD4166A en tant que RCP et deux BRD4168As en tant qu'appareils en thread complet.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Si vous repartez de zéro, vous pouvez vous procurer l'un des kits de démarrage Thread EFR32 qui contient les cartes listées ci-dessus.
  2. BRD4001A: Cartes principales de démarrage sans fil (WSTK) pour héberger les cartes radio À l'exception du modèle BRD4166A, toutes les cartes radio ont besoin d'une carte mère de démarrage. Câbles mini-USB pour connecter et alimenter la carte mère, ou câble micro USB pour BRD4166A.

WSTK AEM

  1. Un Raspberry Pi 3B ou supérieur avec une image de système d'exploitation Raspbian Stretch Lite ou Raspbian Stretch sur un ordinateur connecté à Internet via Ethernet Nous le configurons en tant que routeur de bordure OT.
  2. Un système hôte Windows/Linux/Mac avec au moins deux ports USB et une connexion Internet Vérifiez la configuration requise pour le matériel et l'OS sur SSv5.
  3. Au moins un câble Ethernet pour connecter le Raspberry Pi à Internet Les WSTK prennent également en charge le débogage et le flash sur IP. Vous pouvez donc éventuellement utiliser des câbles Ethernet supplémentaires pour connecter le WSTK à votre système hôte via un commutateur Ethernet.

Logiciels :

  • Simplicity Studio v5 est installé et mis à jour sur le système hôte Windows/Linux/Mac avec
    • Chaîne d'outils GNU ARM
    • Suite SDK Gecko 3.2.0 ou version ultérieure et SDK OpenThread de Silicon Labs.

3. Configuration du matériel

Cet atelier de programmation a été créé

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, comme illustré à gauche.
  2. Deux modèles EFR32MG13 BRD4168A, comme illustré à droite.
  3. Simplicity Studio v5 installé sur macOS Catalina 10.15.7 avec
    1. SDK Gecko 3.2.0
    2. GNU ARM v7.2.1

BRD4168A

Connectez chaque carte mère du kit de démarrage sans fil à l'ordinateur hôte à l'aide d'un câble USB, comme indiqué dans l'image ci-dessous. Ces connexions permettront la programmation et l’analyse du réseau du RCP et des appareils finaux. Nous allons d'abord utiliser l'ordinateur hôte pour programmer le BRD4166A à l'aide du micrologiciel ot-rcp, puis le connecter au Raspberry Pi. Les appareils d'extrémité peuvent éventuellement être connectés à l'ordinateur hôte via un commutateur Ethernet commun. Les kits de démarrage prennent également en charge la programmation et l'analyse réseau sur IPv4.

Connexions

4. Configuration du micrologiciel

Il existe deux façons de commencer. Les 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 démos prédéfinies directement sur la carte radio pour les exemples d'application. Les utilisateurs sont invités à essayer le micrologiciel Demos configuré en tant qu'exercice facultatif. Veuillez consulter la section "Configuration facultative du micrologiciel – Démonstrations" à la fin de cet atelier de programmation.

Pour cet atelier de programmation, nous utiliserons la méthode basée sur les projets.

Créer des projets à l'aide d'exemples

Nous allons créer deux projets. Le projet ot-rcp pour le modèle BRD4166A et le projet ot-cli-ftd pour les deux appareils BRD4168A. Suivez ces étapes et sélectionnez l'exemple d'application approprié pour votre tableau.

  1. Ouvrez le menu Fichier de Studio et sélectionnez Nouveau > Assistant de projet Silicon Labs La boîte de dialogue de sélection de la cible, du SDK et de la chaîne d'outils s'ouvre. Ne modifiez pas la chaîne d'outils Simplicity IDE / GNU par défaut compatible avec OpenThread. Cliquez sur "Suivant".
    • Cartes cibles: affiche la carte radio sélectionnée (BRD4168A) ainsi que la carte mère (BRD4001A)
    • Target Device (Appareil cible) : ce champ indique la puce de microcontrôleur (MCU) intégrée. Le BRD4168A est équipé d'un MCU EFR32MG13.
    • SDK: vous pouvez sélectionner ici la version du SDK d'OT avec laquelle vous travaillez. Les informations sur la suite incluent le tag SDK et le build Silicon Labs d'OpenThread, par exemple Platform 4.0.1.0 et OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Toolchain: 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 "Example Project Selection" s'ouvre. Une liste d'exemples de projets s'affiche. Utilisez les filtres de type de technologie Thread et de mots clés pour rechercher un exemple spécifique. Veillez à noter le numéro de version de la suite SDK Gecko. Vous aurez besoin de ce tag de version lorsque vous configurerez le 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. Ici, vous pouvez renommer votre projet, modifier l'emplacement par défaut du fichier de projet et déterminer si vous allez créer un lien vers ou copier les fichiers du projet. Les fichiers de projet associés pointent vers le SDK. Toutes les modifications que vous y apportez sont alors appliquées au SDK et utilisées pour les projets futurs. La copie des sources du projet vous permet de modifier une copie locale du projet afin que les fichiers du SDK restent intacts. Link sdk and copy project sources (Associer le SDK et copier les sources du projet). est le choix par défaut et recommandé. Cliquez sur TERMINER.

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

  1. La perspective de l'IDE de simplicité s'ouvre dans l'onglet VUE D'ENSEMBLE, dans Project Configurator.

Présentation du projet

Pour configurer le projet depuis l'onglet Composants logiciels, vous devez installer et désinstaller des composants, et configurer les composants installés. Les composants installés sont vérifiés. Cliquez sur Installés (Composants 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 du projet sont générés automatiquement. La progression est indiquée dans le coin inférieur droit de la perspective Simplicity IDE.

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 pour créer le projet ot-rcp pour l'autre tableau.

Créer et flasher les projets

Compilez et flashez les projets ot-rcp et ot-cli-ftd.

  1. Une fois votre projet configuré, cliquez sur Commande de compilation (icône en forme de marteau) dans la barre d'outils supérieure. Vous pouvez également effectuer un clic droit sur le projet, puis cliquer sur "Créer un projet".

Bouton "Build project" (Compiler le projet)

  1. La progression s'affiche dans la console et une barre de progression apparaît 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 compilation du projet

  1. Les images des binaires sont générées après la réussite de la compilation du projet. Vous pouvez flasher l'image binaire à partir de 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 Flash to Device (Flash vers l'appareil). Si plusieurs appareils sont connectés, sélectionnez un appareil à programmer, puis cliquez sur OK. Le programmeur Flash s'ouvre avec le chemin d'accès au fichier renseigné. Cliquez sur PROGRAMME.

Flash

5. Récapitulatif de la configuration du micrologiciel

À ce stade, vous devez avoir créé, compilé et flashé le micrologiciel approprié sur les cartes radio. Une fois que ot-rcp clignote sur BRD4166A, déconnectez-le du système hôte et connectez cette carte au Raspberry Pi.

Une fois cette section terminée, la configuration de votre matériel réseau Thread se présentera comme suit.

Configuration du modèle EFR32MG

6. Configurez la console série pour Appareils ot-cli-ftd

Pour lancer l'interface de la console, dans la perspective de l'IDE Simplicity, effectuez un clic droit sur votre appareil J-Link dans la fenêtre "Device View/Debug Adapters" (Vue des appareils/adaptateurs de débogage). Sélectionnez Launch Console (Lancer la console). Pour recevoir une invite sur la console, sélectionnez l'onglet Serial 1 et appuyez sur Entrée. Vérifiez l'état du nœud FTD.

Vue de la console Studio FTD

Vous remarquerez que nous n'avons pas encore de console pour ot-rcp. À l'étape suivante, nous allons configurer le Raspberry Pi en tant que routeur de bordure OT et configurer la console pour ot-rcp.

7. Configurer le Raspberry Pi en tant que routeur de bordure

Silicon Labs recommande de déployer le conteneur Docker de l'entreprise avec l'OTBR. L'exécution de l'OTBR dans un conteneur permet de créer des artefacts facilement déployables, ainsi qu'un prototypage et des tests rapides du développement.

Les images OTBR de Silicon Labs sont hébergées sur DockerHub de Silicon Labs avec des tags. Chaque tag correspond à une version du GSDK:

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

Les conteneurs Docker doivent être utilisés avec les RCP créés à l'aide de Simplicity Studio 5 pour une version donnée. Assurez-vous d'établir une correspondance entre la version de la balise conteneur et la version du GSDK avec laquelle vous effectuez le test. Par exemple, si votre version GDSK était Gecko SDK Suite v4.0.1 (140) lorsque vous avez sélectionné ot-rcp dans la fenêtre Example Project Selection, utilisez l'image siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Version du GSDK

Configuration de Raspberry Pi

  1. Sur votre carte SD, veillez à flasher l'image d'OS Raspbian Stretch Lite OS ou Raspbian Stretch avec le bureau.
  2. Vous pouvez vous connecter en SSH au Raspberry Pi ou choisir de travailler directement avec Raspbian Desktop. Ouvrez un terminal.
  3. Veillez à 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 à l'aide de la commande suivante sur votre RPi.
    curl -sSL https://get.docker.com | sh
    
  2. Une fois l'opération terminée, vous pouvez modifier les paramètres utilisateur Docker pour ne pas exiger 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 du GSDK Simplicity Studio correspond à l'image Docker appropriée. Par 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 le service OTBR connecte votre RCP au démarrage. Recherchez le port TTY de votre appareil RCP. Le moyen le plus simple de le faire consiste à rechercher une entrée /tty/dev... une fois le RCP connecté. Il doit généralement s'agir de /dev/ttyUSB0 ou de /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 afficher les journaux en cours d'exécution pour le conteneur à tout moment à l'aide de la commande docker logs.
    • --name est conservé jusqu'à ce que le conteneur Docker soit correctement fermé (ou supprimé).
    • Le port 8080 indique le port du serveur Web hébergeant la page Web de gestion du routeur de bordure.
    • ?uart-baudrate=460800 est requis dans les options d'URL radio pour éviter les problèmes de fragmentation / reassemblage sur UART, avec des opérations coûteuses telles que DTLS avec de longs paquets IPv6.

Interagir avec le nœud RCP

Une fois que le docker est en cours d'exécution, vous pouvez communiquer avec le nœud RCP via un shell interactif à 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 des conteneurs en cours d'exécution

$ docker ps -aq

Vous pouvez examiner la fenêtre qui exécute le conteneur Docker OTBR pour voir si la sortie du journal du routeur de bordure est exécutée, ou suivre le journal du conteneur comme suit:

$ docker logs [container-id] -f

Vous pouvez aussi 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 devriez avoir trois consoles.

  1. Deux consoles ot-cli-ftd dans Simplicity Studio configurées en tant qu'appareils Full Thread.
  2. Un shell interactif ot-ctl sur le Raspberry Pi configuré en tant que routeur de bordure OT

Nous sommes maintenant prêts à former un réseau Thread.

8. Créer un réseau Thread

Configurer le RCP

Pour créer le réseau, nous commençons par le shell ot-ctl sur l'OTBR qui sert à 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éer une configuration réseau

OK

2

dataset commit active

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

OK

3

ifconfig up

Activer l'interface Thread

OK

4

thread start

Active et connecte le protocole Thread.

OK

Patientez 10 secondes, le temps que l'interface de thread soit active.

5

state

Vérifiez l'état de l'appareil. Il doit s'agir de l'instance principale.
Autres états possibles: hors connexion, désactivé, déconnecté,
enfant, routeur ou leader

Leader
Done

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é de réseau,
le nom du réseau et l'ID de réseau.











Nous utiliserons le numéro de canal et la clé de réseau sur le ot-cli-ftd pour joindre les deux FTD à ce réseau de threads.

Configurer et ajouter un 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 ci-dessous, 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.

OK

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Seule la clé réseau est nécessaire pour qu'un appareil puisse se connecter à un réseau Thread.

OK

3

dataset commit active

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

OK

4

ifconfig up

Activer l'interface Thread

OK

5

thread start

Active et connecte le protocole Thread.

OK

Patientez 20 secondes, le temps que l'appareil se connecte et se configure.

6

state

Afficher la configuration du réseau

enfant
OK

Communication entre les appareils Thread

Nous allons utiliser 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)

À partir des deux FTD, pinguez l'OTBR à l'aide de son adresse 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 réponse indique la charge utile reçue et que la communication a réussi. Répétez le processus pour pinguer les FTD à partir de l'OTBR.

9. Félicitations

Vous avez créé un réseau Thread !

Vous savez désormais:

  • Comment créer un projet OpenThread à l'aide de l'IDE Silicon Labs Simplicity Studio.
  • Comment construire et flasher des binaires CLI OpenThread sur les cartes radio Silicon Labs.
  • Comment 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 en service hors bande des appareils sur un réseau Thread.
  • Vérifier la communication Thread entre les nœuds à l'aide de la commande ping

Documentation complémentaire

Consultez openthread.io et GitHub pour obtenir une variété de ressources OpenThread, notamment:

10. Configuration facultative du micrologiciel : démonstrations

Les démos sont des images de micrologiciel prédéfinies, prêtes à être téléchargées sur un appareil compatible. Pour savoir rapidement si une démo est disponible dans Simplicity Studio, cliquez sur votre rôle dans la vue "Debug Adapters" (Adaptateurs de débogage), puis accédez à EXEMPLES DE PROJETS. Onglet DÉMOS dans la perspective du lanceur d'applications. Désactivez le filtre "Exemples de projets" et cochez la case d'option "Thread" sous "Type de technologie".

Démonstrations dans 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 modifiée dans les prochaines versions du SDK pour inclure davantage de cartes radio. Veuillez consulter les notes de version du SDK OpenThread de Silicon Labs sous Documentation pour une liste complète des pièces prises en charge.

Flashez les démos suivantes sur les tableaux respectifs. Pour flasher votre carte, sélectionnez votre tableau sous "Debug Adapters" (Adaptateurs de débogage) à gauche, puis cliquez sur EXÉCUTER pour les exemples d'applications correspondants. Une fenêtre pop-up indique la progression du flash.

  1. BRD4166A: ot-rcp – Cet appareil fonctionnera comme processeur Radio Co pour le routeur de bordure OT. Nous utiliserons cet appareil pour créer un réseau Thread et y intégrer les deux autres appareils. En tant que routeur de bordure, cet appareil sert également de passerelle pour que les périphériques du réseau Thread puissent communiquer sur Internet.
  2. Deux appareils BRD4168A (ot-cli-ftd) : ces deux appareils serviront d'appareils Full Thread. Ils rejoindront le réseau Thread créé par l'OTBR.