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 mettre la technologie réseau utilisée dans les produits Google Nest plus largement à la disposition des développeurs. L'objectif est d'accélérer le développement de produits pour la maison connectée et les bâtiments commerciaux. Grâce à une couche d'abstraction de plate-forme étroite et à un faible encombrement mémoire, OpenThread est très portable. Il est compatible avec les conceptions de système sur puce (SoC) et de coprocesseur réseau (NCP).

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

Silicon Labs a amélioré OpenThread pour qu'il fonctionne avec le matériel Silicon Labs. Ce code source est disponible sur GitHub et également 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 gamme de matériel plus large que la version GitHub et inclut de la documentation et des exemples d'applications qui ne sont pas disponibles sur GitHub.

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

Configuration matérielle de l'EFR32MG

Points abordés

  • Créer un projet OpenThread à l'aide de l'IDE Simplicity Studio de Silicon Labs.
  • Découvrez comment compiler et flasher les binaires OpenThread CLI sur les cartes radio Silicon Labs.
  • Configurer un Raspberry Pi 3B+ ou version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
  • Comment créer un réseau Thread sur l'OTBR ?
  • Mise en service hors bande d'appareils sur un réseau Thread.
  • Comment 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 une BRD4166A comme RCP et deux BRD4168A comme appareils Thread complets.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Si vous partez 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 mères de démarrage sans fil (WSTK) pour héberger les cartes radio. À l'exception de la BRD4166A, toutes les cartes radio nécessitent une carte mère de démarrage. Câbles mini-USB pour connecter et alimenter les cartes principales ou câble micro-USB pour BRD4166A.

WSTK AEM

  1. Un Raspberry Pi 3B+ ou version ultérieure avec l'image OS Raspbian Stretch Lite ou Raspbian Stretch avec Desktop, connecté à Internet via Ethernet. Nous configurons cela 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. Consultez la configuration matérielle et OS requise sur SSv5.
  3. Au moins un câble Ethernet pour connecter la Raspberry Pi à Internet. Les WSTK sont également compatibles avec le débogage et le flashage sur IP. Vous pouvez donc, si vous le souhaitez, utiliser des câbles Ethernet supplémentaires pour connecter le WSTK à votre système hôte via un commutateur Ethernet.

Logiciels :

  • Simplicity Studio v5 installé et mis à jour sur le système hôte Windows/Linux/Mac avec
    • Chaîne d'outils GNU ARM
    • Gecko SDK Suite 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éé à l'aide de

  1. EFR32MG12 BRD4166A Thunderboard Sense 2, comme illustré à gauche.
  2. Deux BRD4168A EFR32MG13, comme indiqué à droite.
  3. Simplicity Studio v5 installé sur un 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 via USB, comme illustré 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 avec le micrologiciel ot-rcp et le connecter à la Raspberry Pi. Si vous le souhaitez, vous pouvez connecter les appareils finaux à l'ordinateur hôte à l'aide d'un commutateur Ethernet commun. Les kits de démarrage sont également compatibles avec la programmation et l'analyse réseau sur IPv4.

Connexions

4. Configuration du micrologiciel

Pour commencer, deux options s'offrent à vous. Les deux options vous permettent d'installer 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.
  2. Démos : (Facultatif) Flashez les démos prédéfinies directement sur la carte radio pour l'une des applications exemples. Les utilisateurs sont invités à essayer la configuration du micrologiciel des démos comme exercice facultatif. Pour en savoir plus, consultez la section "Configuration facultative du micrologiciel – Démos" à 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 BRD4166A et le projet ot-cli-ftd pour les deux BRD4168A. Veuillez suivre ces étapes et sélectionner l'application exemple appropriée pour votre carte.

  1. Ouvrez le menu File (Fichier) de Studio, puis sélectionnez New > Silicon Labs Project Wizard (Nouveau > Assistant de projet Silicon Labs). La boîte de dialogue "Target, SDK, and Toolchain Selection" (Sélection de la cible, du SDK et de la chaîne d'outils) s'ouvre. Ne modifiez pas l'IDE Simplicity / la chaîne d'outils GNU par défaut compatibles avec OpenThread. Cliquez sur Suivant.
    • Cartes cibles : affiche la carte radio sélectionnée (BRD4168A) ainsi que la carte principale (BRD4001A)
    • Appareil cible : ce champ indique la puce microcontrôleur (MCU) intégrée. La carte BRD4168A est équipée d'un microcontrôleur EFR32MG13.
    • SDK : vous pouvez sélectionner la version du SDK OT que vous utilisez. Les informations sur la suite incluent le tag SDK et la version OpenThread de 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 Nouveau projet

  1. La boîte de dialogue "Example Project Selection" (Sélection d'un exemple de projet) s'ouvre. Vous verrez une liste de projets exemples. Utilisez les filtres Thread (type de technologie) et par mot clé pour rechercher un exemple spécifique. Assurez-vous de noter le numéro de version de la suite SDK Gecko. Vous aurez besoin de ce tag de version lorsque vous configurerez la Raspberry Pi en tant que routeur de bordure. Sélectionnez ot-cli-ftd, puis cliquez sur NEXT (SUIVANT).

Étape 2 de l'assistant Nouveau projet

  1. La boîte de dialogue "Project Configuration" (Configuration du projet) s'ouvre. Vous pouvez renommer votre projet, modifier l'emplacement par défaut du fichier de projet et déterminer si vous souhaitez créer un lien vers les fichiers du projet ou les copier. Les fichiers de projet associés pointent vers le SDK. Toutes les modifications que vous apportez sont effectuées dans le SDK et sont utilisées pour les futurs projets. La copie des sources du projet vous permet de modifier une copie locale du projet afin que les fichiers du SDK restent intacts. Associer le SDK et copier les sources du projet est l'option par défaut et le choix recommandé. Cliquez sur TERMINER.

Étape 3 de l'assistant Nouveau projet

  1. La perspective de l'IDE Simplicity s'ouvre avec le configurateur de projet sur l'onglet OVERVIEW (APERÇU).

Présentation du projet

Le projet est configuré à partir de l'onglet Software Components (Composants logiciels) en installant et en désinstallant des composants, et en configurant les composants installés. Les composants installés sont vérifiés. Cliquez sur Composants installés pour afficher une liste filtrée des composants installés par l'application exemple. Toutes les modifications que vous apportez sont enregistrées automatiquement, et les fichiers de projet sont générés automatiquement. La progression s'affiche en bas à droite 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 votre autre carte.

Compiler et flasher les projets

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

  1. Une fois votre projet configuré, cliquez sur l'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 "Build project" (Compiler le projet).

Bouton "Compiler le projet"

  1. La progression s'affiche dans la console et une barre de progression s'affiche en bas à droite. Toutes les erreurs ou tous les avertissements liés à votre projet s'affichent également dans cette fenêtre de résultat.

Fenêtre de sortie de compilation du projet

  1. Les images binaires sont générées une fois la compilation du projet réussie. Vous pouvez flasher l'image binaire à partir de la vue Explorateur de projet. 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, sélectionnez-en un à programmer, puis cliquez sur OK. Le programmateur 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 devriez avoir créé, compilé et flashé le micrologiciel approprié sur les cartes radio. Une fois ot-rcp flashé 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 matérielle de votre réseau Thread se présentera comme suit.

Configurer EFR32MG

6. Configurer la console série pour les appareils ot-cli-ftd

Pour lancer l'interface de la console, dans la perspective Simplicity IDE, effectuez un clic droit sur votre appareil J-Link dans la fenêtre "Devices View" (Vue des appareils) ou "Debug Adapters" (Adaptateurs de débogage). Sélectionnez Launch Console (Lancer la console). Pour obtenir 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 FTD Studio

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 OTBR. L'exécution de l'OTBR dans un conteneur permet de créer des artefacts facilement déployables, ainsi que de prototyper et de tester rapidement le développement.

Les images OTBR de Silicon Labs sont hébergées sur siliconlabsinc DockerHub, 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 des RCP créés à l'aide de Simplicity Studio 5 pour une version donnée. Veillez à faire correspondre la version du tag de conteneur à la version du GSDK que vous testez. 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 (Sélection d'un exemple de projet), utilisez l'image siliconlabsinc/openthread-border-router:gsdk-4.0.1.

Version du GSDK

Configurer Raspberry Pi

  1. Sur votre carte SD, assurez-vous de flasher l'image de l'OS Raspbian Stretch Lite ou Raspbian Stretch avec Desktop.
  2. Vous pouvez soit utiliser SSH sur le Raspberry Pi, soit choisir de travailler directement avec le bureau Raspbian. Ouvrez un terminal.
  3. Veillez à mettre à jour vos dépôts locaux et votre gestionnaire de paquets (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 terminé, vous pouvez modifier les paramètres utilisateur Docker pour ne pas avoir à saisir 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 de faire correspondre votre version GSDK Simplicity Studio à la bonne image Docker. 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 l'OTBR connecte votre RCP au démarrage. Recherchez le port TTY de votre appareil RCP. Le moyen le plus simple consiste à rechercher une entrée /tty/dev... une fois le RCP connecté. Il s'agit généralement de /dev/ttyUSB0 ou de /dev/ttyACM0.
  2. Exécutez votre installation Docker avec 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 d'exécution du conteneur à tout moment à l'aide de la commande docker logs.
    • --name reste actif 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 requis dans les options d'URL radio pour contourner les problèmes de fragmentation / réassemblage sur UART, avec des opérations coûteuses telles que DTLS avec de longs paquets IPv6.

Interagir avec le nœud RCP

Une fois Docker 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 de conteneurs en cours d'exécution.

$ docker ps -aq

Vous pouvez vérifier la fenêtre exécutant le conteneur Docker OTBR pour obtenir le résultat du journal d'exécution du routeur de bordure ou suivre le journal du conteneur comme suit :

$ docker logs [container-id] -f

Si le conteneur Docker est correctement chargé, vous pouvez éventuellement arrêter, supprimer ou arrêter de force votre image.

$ docker stop otbr
$ docker rm otbr
$ docker kill otbr

Facultatif : Pour quitter le shell, appuyez sur CNTL+C.

À ce stade, vous devriez avoir trois consoles.

  1. Deux consoles ot-cli-ftd dans Simplicity Studio configurées en tant qu'appareils Thread complets.
  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 à former un réseau Thread.

8. Créer un réseau Thread

Configurer RCP

Pour créer le réseau, nous commençons par le shell ot-ctl sur l'OTBR, qui est utilisé pour 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.

OK

2

dataset commit active

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

OK

3

ifconfig up

Activez l'interface Thread.

OK

4

thread start

Activez et associez l'opération du protocole Thread.

OK

Patientez 10 secondes pour que l'interface Thread soit opérationnelle.

5

state

Vérifiez l'état de l'appareil. Il doit être le leader.
Autres états possibles : hors connexion, désactivé, détaché,
enfant, routeur ou leader

Responsable
OK

6

dataset

Affichez la configuration 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.

Active Timestamp: 1
Channel: 20
Channel Mask: 0x07fff800
Ext PAN ID: 39ba71f7fc367160
Mesh Local Prefix: fd5c:c6b:3a17:40b9::/64
Network Key: 81ae2c2c17368d585dee71eaa8cf1e90
Network Name: OpenThread-008c
PAN ID: 0x008c
PSKc: c98f0193d4236025d22dd0ee614e641f
Security Policy: 0, onrcb
Done

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

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

OK

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Seule la clé réseau est requise pour qu'un appareil se connecte à un réseau Thread.

OK

3

dataset commit active

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

OK

4

ifconfig up

Activez l'interface Thread.

OK

5

thread start

Activez et associez l'opération du protocole Thread.

OK

Patientez 20 secondes pendant que l'appareil rejoint le réseau et se configure.

6

state

Affichez la configuration 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, effectuez un ping de 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 la procédure pour envoyer un ping aux FTD depuis l'OTBR.

9. Félicitations

Vous avez créé un réseau Thread.

Vous savez maintenant :

  • Créer un projet OpenThread à l'aide de l'IDE Simplicity Studio de Silicon Labs.
  • Découvrez comment compiler et flasher les binaires OpenThread CLI sur les cartes radio Silicon Labs.
  • Configurer un Raspberry Pi 3B+ ou version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
  • Comment créer un réseau Thread sur l'OTBR ?
  • Mise en service hors bande d'appareils sur un réseau Thread.
  • Comment vérifier la communication Thread entre les nœuds à l'aide de la commande ping.

Documentation complémentaire

Consultez openthread.io et GitHub pour accéder à diverses ressources OpenThread, y compris :

10. Configuration facultative du micrologiciel : démonstrations

Les démonstrations sont des images de micrologiciel prédéfinies qui peuvent être téléchargées sur un appareil compatible. Le moyen le plus rapide de savoir si une démo est disponible pour votre pièce dans Simplicity Studio consiste à cliquer sur votre pièce dans la vue "Debug Adapters" (Adaptateurs de débogage), puis à accéder à l'onglet "EXAMPLE PROJECTS & DEMOS" (EXEMPLES DE PROJETS ET DÉMOS) dans la perspective du lanceur. Désactivez le filtre "Exemples de projets", puis 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 pour inclure d'autres cartes radio. Pour obtenir la liste complète des composants compatibles, veuillez consulter les notes de version du SDK OpenThread de Silicon Labs dans la section "Documentation".

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

  1. BRD4166A : ot-rcp : cet appareil fonctionnera comme un coprocesseur radio pour le routeur de bordure OT. Nous allons utiliser 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 pour permettre aux appareils du réseau Thread de communiquer sur Internet.
  2. Deux BRD4168A : ot-cli-ftd : ces deux appareils serviront d'appareils Thread complets. Ils rejoindront le réseau Thread créé par l'OTBR.