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

1. Présentation

26b7f4f6b3ea0700.png

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

La spécification Thread définit un protocole de communication sans fil d'un appareil à l'autre fiable, sécurisé et à faible consommation pour les applications de construction domestiques et commerciales.

Silicon Labs a amélioré OpenThread pour fonctionner avec le matériel Silicon Labs. Ce code source est disponible sur GitHub et également en tant que kit de développement logiciel (SDK, Software Development Kit) installé avec Simplicity Studio 5 (SSv5). Le SDK inclut un instantané entièrement testé du code source GitHub. Cet outil est compatible avec une gamme de matériel plus vaste que celle de la version GitHub, ainsi que la documentation et les 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 Simply Studio 5. L'image ci-dessous montre les cartes (BRD) et le matériel configuré avec un routeur de bordure OT (OTBR, OT Border Router) et deux appareils Thread utilisés dans l'atelier de programmation.

Configuration du matériel EFR32MG

Points abordés

  • Créer un projet OpenThread à l'aide de l'IDE Silicon Studio Simplicity Studio
  • Créer et flasher des binaires de la CLI OpenThread sur des tableaux de radio Silicon Labs
  • Comment configurer un Raspberry Pi 3B+ ou version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
  • Créer un réseau Thread sur l'OTBR.
  • Hors service de la mise en service des appareils sur un réseau Thread.
  • Vérifier les communications Thread entre les nœuds à l'aide de la commande ping

2. Prerequisites

Appareil:

  1. 3 cartes d'option EFR32MGxx. Vous pouvez utiliser n'importe quelle combinaison d'appareils. Cet atelier de programmation utilise un BRD4166A comme système RCP et deux appareils BRD4168A comme appareils à thread complet.
    • EFR32MG12 (BRD4161A, BRD4166A, BRD4170A, BRD4304A)
    • EFR32MG13 (BRD4168A)
    • EFR32MG21 (BRD4180A, BRD4180B)
    Si vous débutez tout de suite, vous pouvez obtenir le kit de démarrage EFR32 Thread comprenant les tableaux listés ci-dessus.
  2. BRD4001A: cartes WSTK (Starter Board) sans fil pour l'hébergement des cartes radio. À l'exception de BRD4166A, toutes les cartes radio ont besoin d'une carte principale pour démarrer. Des câbles mini-USB pour brancher et alimenter les cartes principales ou un câble micro USB pour BRD4166A.

WEMK

  1. Un Raspberry Pi 3B+ ou version ultérieure avec Raspbian Stretch Lite OS ou Raspbian Stretch avec un ordinateur connecté à Internet via Ethernet. Il s'agit d'un 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 matérielle et système requise pour SSv5.
  3. Au moins un câble Ethernet pour connecter Raspberry Pi à Internet Les technologies WSTK sont également compatibles avec le débogage et la clignotement sur IP. Vous pouvez donc éventuellement utiliser des câbles Ethernet supplémentaires pour connecter la WSTK à votre système hôte via un commutateur Ethernet.

Logiciel :

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

3. Configuration matérielle

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 installé sur macOS Catalina 10.15.7 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 via USB, comme illustré ci-dessous. Ces connexions permettront de programmer et d'analyser le réseau du RCP et des appareils finaux. Nous allons utiliser l'ordinateur hôte pour programmer le BRD4166A avec le micrologiciel ot-rcp, puis le connecter au Raspberry Pi. Si vous le souhaitez, vous pouvez connecter les appareils de fin à 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 sur IPv4.

Connexions

4. Configuration du micrologiciel

Pour commencer à les utiliser, deux options s'offrent à vous. 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.OR
  2. Démonstrations: (facultatif) faites apparaître les démonstrations prédéfinies directement sur la carte radio pour les exemples d'application. Nous vous invitons à essayer le micrologiciel Demos configuré comme un exercice facultatif. Veuillez consulter la section "Configuration du micrologiciel facultative – Démonstrations" à la fin de cet atelier de programmation pour en savoir plus.

Nous utiliserons la méthode basée sur les projets pour cet atelier de programmation.

Créez 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. Suivez ces étapes et sélectionnez l'exemple d'application adapté à votre tableau.

  1. Ouvrez le menu File (Fichier) de Studio et sélectionnez New > Silicon Labs Project Assistant (Assistant de projet Silicon Labs). La boîte de dialogue "Target, Target" (SDK) et "Toolchain Sélection" s'ouvre. Ne modifiez pas la chaîne d'outils IDE / Simplicité 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 affiche la puce de microcontrôleur (MCU) intégrée. Le modèle BRD4168A est doté d'un microCUE EFR32MG13.
    • SDK: vous pouvez sélectionner la version du SDK que vous utilisez. Les informations de la suite incluent le tag du SDK et la version d'OpenThread de Silicon Labs, par exemple Platform 4.0.1.0 et OpenThread 2.0.1.0 (GitHub-55af6ce2c).
    • IDE/ Outils: chaîne d'outils qui servira à compiler le projet OT. Nous utilisons GNU ARM.

Assistant de projet

  1. La boîte de dialogue "Exemple de sélection de projet" s'ouvre. Vous verrez une liste d'exemples de projets. Utilisez le filtre Thread (Type de technologie) et de mots clés pour rechercher un exemple spécifique. Notez bien le numéro de version de Gecko SDK Suite. Vous en aurez besoin 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 "Nouveau projet"

  1. La boîte de dialogue "Configuration du projet" s'ouvre. Vous pouvez renommer votre projet, modifier son emplacement d'accès aux fichiers par défaut, et déterminer si vous prévoyez d'associer les fichiers aux projets ou de les copier. Les fichiers de projet associés pointent vers le SDK et toutes les modifications que vous apportez sont intégrées au SDK et utilisées pour de futurs projets. La copie des sources du projet vous permet de modifier une copie locale du projet afin que les fichiers SDK restent intacts. L'option Associer le SDK et copier les sources du projet (option par défaut) est l'option recommandée. Cliquez sur TERMINER.

Étape 3 de l'assistant "Nouveau projet"

  1. L'IDE Simplicity de l'IDE s'ouvre avec l'outil Project Configurator ouvert dans l'onglet OVERVIEW.

Présentation du projet

Pour installer un projet, accédez à l'onglet Composants logiciels et installez et désinstallez des composants. 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. Les modifications que vous apportez sont enregistrées automatiquement, et les fichiers du projet sont générés automatiquement. La progression est affichée dans l'angle inférieur droit de la perspective "IDE Simplicity".

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

Créer et projeter les projets

Créez et déployez des projets ot-rcp et ot-cli-ftd.

  1. Une fois votre projet configuré, cliquez sur Build control (hammer icon) (Contrôle de compilation (icône représentant un marteau)) dans la barre d'outils supérieure. Vous pouvez également effectuer un clic droit sur le projet, puis cliquer sur "Build project".

Bouton "Créer un projet"

  1. La progression s'affiche dans la console et 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 création d'un projet réussi. Vous pouvez générer le flash de l'image 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 (Flasher sur l'appareil). Si vous avez plusieurs appareils connectés, puis sélectionnez un appareil, cliquez sur OK. Le programme de Flash s'ouvre et affiche le chemin d'accès au fichier. Cliquez sur PROGRAM (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 d'option. Une fois que la mémoire ot-rcp est flashée sur BRD4166A, déconnectez-le du système hôte et connectez cette carte au Raspberry Pi.

Une fois cette section terminée, votre matériel réseau Thread sera configuré comme suit.

Configuration EFR32MG

6. Configurer la console série pour les appareils au format OT-cli-ftd

Pour lancer l'interface de la console, dans la vue de l'IDE Simplicité, effectuez un clic droit sur votre appareil J-Link dans la fenêtre"Appareils"et"Adaptateurs de débogage". Sélectionnez Launch Console (Lancer la console). Pour afficher l'invite dans la console, sélectionnez l'onglet Serial 1 (Numéro de série 1), puis appuyez sur Entrée. Vérifiez l'état du nœud FTD.

Vue de la console FTD

Vous remarquerez que nous n'avons pas encore de console pour ot-rcp. À 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 avec l'OTBR. L'exécution de l'OTBR dans un conteneur permet de créer des artefacts faciles à déployer, ainsi que d'effectuer des prototypages et des tests de développement rapide.

Les images OTBR Silicon Labs sont hébergées sur siliconlabslabsinc, avec des balises. Chaque balise correspond à une version du SDK:

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 une version de la balise conteneur avec la version du SDK GTM que vous testez. Par exemple, si la version de votre GDSK était Gecko SDK Suite v4.0.1 (140) et que 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 du SDK SDK

Configuration de Raspberry Pi

  1. Sur votre carte SD, veillez à clignoter votre image Raspbian Stretch Lite OS ou Raspbian Stretch avec votre ordinateur.
  2. Vous pouvez vous connecter en SSH sur Raspberry Pi ou choisir d'utiliser directement le bureau Raspbian. Ouvrez un terminal.
  3. Assurez-vous de mettre à jour vos dépôts et votre gestionnaire de packages locaux (apt-get update et apt-get update 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 cette opération terminée, vous pouvez modifier les paramètres utilisateur de Docker pour qu'ils n'exigent pas de sudo avant chaque commande. Veuillez redémarrer.
    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 système PTR. Veillez également à faire correspondre votre version de GSDK Simplicity Studio avec 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 à utiliser pour que l'OTBR puisse connecter votre RCP au démarrage. Recherchez le port TTY de votre appareil PTR. Le plus simple est alors de rechercher une entrée /tty/dev... une fois le système PTR connecté. Elle doit généralement être /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 du 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 requis dans les options d'URL radio pour contourner les problèmes de fragmentation/de 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 que Docker est en cours d'exécution, 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 identifiants de conteneur en cours d'exécution

$ docker ps -aq

Vous pouvez vérifier la fenêtre du conteneur Docker OTBR pour exécuter la sortie de journal 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 également arrêter, supprimer ou fermer votre image.

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

Facultatif: Pour quitter l'interface système, utilisez CNTL + C.

Vous devez maintenant avoir trois consoles.

  1. Deux consoles ot-cli-ftd dans Simplicity Studio configurées en tant qu'appareils Thread.
  2. Une interface système interactive ot-ctl sur Raspberry Pi, configurée en tant que routeur de distribution OT.

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

8. Créer un réseau Thread

Configurer le système PTR

Pour créer le réseau, nous commençons par l'interface système ot-ctl de 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.

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

Activer et associer le fonctionnement du protocole Thread.

OK

Patientez 10 secondes pendant la configuration de l'interface du fil de discussion.

5

state

Vérifiez l'état de l'appareil. Il doit s'agir de la variante optimale.
Autres états possibles: hors connexion, désactivé, dissocié,
enfant, routeur ou leader

Responsable
Terminé

6

dataset

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

<ph type="x-smartling>

Nous allons utiliser le numéro de chaîne et la clé réseau de ot-cli-ftd pour joindre les deux fichiers FTD à ce réseau de fils de discussion.

Configurer et ajouter le FTD à notre réseau Thread (méthode hors bande)

Avec la méthode hors bande, nous savons toutes les informations de sécurité et ajoutons le nœud manuellement. Dans les consoles Simplicity, ajoutez les 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

Configurez le canal utilisé par l'OTBR.

OK

2

dataset networkkey 81ae2c2c17368d585dee71eaa8cf1e90

Seule la clé réseau est nécessaire pour qu'un appareil soit connecté à 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

Activer et associer le fonctionnement du protocole Thread.

OK

Patientez 20 secondes pendant que l'appareil est intégré et configuré.

6

state

Affichez la configuration réseau.

enfant
Terminé

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 en utilisant 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 pinguer l'OTBR à l'aide de l'adresse RLOC du service 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 que la charge utile a été reçue et que la communication a été effectuée. Répétez le processus pour pinguer les FTD à partir du service de distribution par contournement.

9. Félicitations

Vous avez créé un réseau Thread !

Vous savez désormais:

  • Créer un projet OpenThread à l'aide de l'IDE Silicon Studio Simplicity Studio
  • Créer et flasher des binaires de la CLI OpenThread sur des tableaux de radio Silicon Labs
  • Comment configurer un Raspberry Pi 3B+ ou version ultérieure en tant que routeur de bordure OpenThread (OTBR) à l'aide de Docker.
  • Créer un réseau Thread sur l'OTBR.
  • Hors service de la mise en service des appareils sur un réseau Thread.
  • Vérifier les communications Thread entre les nœuds à l'aide de la commande ping

Documentation complémentaire

Consultez les ressources 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 micrologiciels prêtes à être téléchargées sur un appareil compatible. Le moyen le plus rapide de savoir si une démonstration est disponible pour votre partie dans Simplicity Studio est de cliquer sur votre partie dans la vue des adaptateurs de débogage, puis d'accéder à l'onglet EXAMPLES PROJECTS &DEMOS dans le Lanceur d'applications. Désactivez le filtre "Exemples de projets" et cochez la case "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

Il est possible que cette liste soit mise à jour dans les prochaines versions du SDK afin d'y inclure davantage de tableaux d'option. Pour obtenir la liste complète des composants compatibles, veuillez consulter les notes de version du SDK OpenThread de Silicon Labs.

Faites apparaître les démonstrations suivantes sur les tableaux respectifs. Pour clignoter, sélectionnez votre tableau sous "Adaptateurs de débogage" à gauche, puis cliquez sur "EXÉCUTER" pour les exemples d'application correspondants. Une fenêtre pop-up affiche la progression du flash.

  1. BRD4166A : ot-rcp : cet appareil servira de processeur Radio Co à l'outil de bordure du routeur 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 joue également le rôle de passerelle pour que les appareils du réseau Thread communiquent via Internet.
  2. Deux BRD4168A : ot-cli-ftd : ces deux appareils agissent en tant qu'appareils à thread complet. Ils vont rejoindre le réseau Thread créé par l'OTBR.