1. Introduction

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 à la disposition des développeurs. L'objectif est d'accélérer le développement de produits pour les applications de maison connectée et de bâtiments commerciaux. Grâce à une couche d'abstraction de plate-forme étroite et à un faible espace mémoire utilisé, 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.
Texas Instruments a implémenté OpenThread pour la famille d'appareils SimpleLink™ CC27xx. Le dépôt ot-ti sur GitHub contient les pilotes de plate-forme et les exemples d'applications nécessaires à l'exécution d'OpenThread sur les MCU connectés SimpleLink de Texas Instruments. Le CC2745R10-Q1 est un MCU sans fil IEEE 802.15.4 certifié Thread et de qualité automobile (certifié AEC-Q100) de la famille SimpleLink CC27xx de TI.
Cet atelier de programmation explique comment commencer à développer des applications OpenThread avec la carte d'évaluation LP-EM-CC2745R10-Q1 LaunchPad et le dépôt ot-ti. L'image ci-dessous montre la configuration matérielle utilisée dans cet atelier de programmation, avec un routeur de bordure OT (OTBR) et deux appareils Thread complets (FTD).

Points abordés
- Configurer l'environnement de compilation ot-ti de Texas Instruments
- Découvrez comment compiler et flasher les binaires de l'interface de ligne de commande OpenThread sur les cartes LP-EM-CC2745R10-Q1.
- Configurer un Raspberry Pi en tant que routeur de bordure OpenThread (OTBR) à l'aide d'ot-br-posix.
- 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
- 3 cartes LaunchPad LP-EM-CC2745R10-Q1 : une configurée en tant que RCP connecté au routeur de bordure et deux configurées en tant que Full Thread Devices (FTD).
Le CC2745R10-Q1 est un MCU sans fil IEEE 802.15.4 certifié Thread et de qualité automobile (certifié AEC-Q100) de la famille SimpleLink CC27xx de TI. Le LP-EM-CC2745R10-Q1 est le module d'évaluation LaunchPad correspondant et prend en charge les rôles Thread RCP, FTD, MTD et NCP. La carte CC2340R5 avec la carte LP-EM-CC2340R5 LaunchPad est une option à mémoire réduite qui peut servir uniquement de RCP. Il n'est pas compatible avec les rôles FTD, MTD ni NCP. Si vous remplacez une carte LP-EM-CC2340R5 par la carte 1 (RCP), les deux cartes FTD doivent toujours être des LP-EM-CC2745R10-Q1. - 3 sondes de débogage LP-XDS110ET : une par carte LaunchPad, utilisées pour la programmation et le débogage via USB.
Le LP-XDS110ET est une sonde de débogage USB distincte requise pour les LaunchPads au format LP-EM. Il inclut la compatibilité avec EnergyTrace pour le profilage de la consommation d'énergie. Le LP-XDS110 est une alternative moins coûteuse qui offre les mêmes capacités de programmation et de débogage, mais n'inclut pas EnergyTrace. Une autre solution consiste à utiliser un LaunchPad avec une sonde de débogage XDS110 intégrée (comme la LAUNCHXL-CC26X2R1) à la place de la carte LP-EM et d'une sonde de débogage distincte. Pour en savoir plus, consultez le guide de connectivité de débogage LaunchPad. - 3 câbles micro-USB pour connecter et alimenter les cartes LaunchPad et les sondes de débogage.
- Un Raspberry Pi 4B ou version ultérieure avec Raspberry Pi OS connecté à Internet via Ethernet. Il sera configuré en tant qu'hôte du routeur de bordure OT.

- Un système hôte Linux ou macOS avec au moins deux ports USB et un accès à Internet. L'environnement de compilation nécessite un shell compatible avec Bash. Les utilisateurs Windows doivent utiliser WSL2 (Windows Subsystem for Linux 2) avec Ubuntu.
- Au moins un câble Ethernet pour connecter la Raspberry Pi à Internet. Vous pouvez également connecter la Raspberry Pi au Wi-Fi et utiliser
wlan0comme interface d'infrastructure. Pour en savoir plus, consultez l'étape de configuration OTBR.
Logiciel
- Dépôt TI ot-ti : https://github.com/TexasInstruments/ot-ti
- GNU ARM Embedded Toolchain 12.2 (installé automatiquement par le script bootstrap)
- SysConfig 1.27.0 (installé automatiquement par le script d'amorçage)
- TI UniFlash : pour flasher le micrologiciel sur les cartes LaunchPad
- ot-br-posix : https://github.com/openthread/ot-br-posix
- Un terminal série tel que PuTTY (Windows), minicom (Linux) ou screen (macOS/Linux)
3. Configuration du matériel
Cet atelier de programmation utilise trois cartes LP-EM-CC2745R10-Q1 :
- Carte 1 (RCP) : exécute le micrologiciel
ot-rcp. Connecté au Raspberry Pi via USB en tant que coprocesseur radio pour le routeur de bordure. - Carte 2 (FTD 1) : exécute le micrologiciel
ot-cli-ftden tant que Full Thread Device. - Carte 3 (FTD 2) : exécute le micrologiciel
ot-cli-ftden tant que Full Thread Device.

Connectez chaque LaunchPad à votre ordinateur hôte via un câble micro-USB. La connexion USB fournit à la fois une alimentation et une capacité de débogage/programmation via la sonde de débogage XDS110 intégrée.
Chaque LP-EM-CC2745R10-Q1 apparaît sous la forme de deux ports série virtuels lorsqu'il est connecté via USB : un pour l'interface de débogage XDS110 et un pour l'UART de l'application. Lorsque vous ouvrez une console série, connectez-vous au port Application/User UART, et non au port de données auxiliaires.

4. Configuration et compilation du dépôt
Le système de compilation ot-ti utilise CMake et nécessite un shell Bash. Toutes les commandes de cette section sont exécutées sur l'hôte Linux ou macOS (ou WSL2 sur Windows).
1. Cloner le dépôt
$ git clone https://github.com/TexasInstruments/ot-ti.git $ cd ot-ti $ git submodule update --init
2. Exécuter le script d'amorçage
Le script d'amorçage installe les dépendances requises, y compris la chaîne d'outils GNU ARM et SysConfig :
$ ./script/bootstrap
Le script d'amorçage nécessite cmake, git, wget et des outils de compilation standards. Sur Ubuntu/Debian, installez les prérequis avec la commande suivante : sudo apt-get install -y cmake git make wget tar ninja-build
3. Compiler le micrologiciel pour LP_EM_CC2745R10_Q1
Créez toutes les images de micrologiciel pour la carte LP-EM-CC2745R10-Q1 :
$ ./script/build LP_EM_CC2745R10_Q1
La cible de compilation LP_EM_CC2745R10_Q1 correspond à l'appareil CC2745R10-Q1 de la famille CC27xx SimpleLink (cœur Arm Cortex-M33F). Pour afficher toutes les cartes compatibles, exécutez ./script/build sans arguments.
Une fois la compilation réussie, les binaires ELF se trouvent dans build/bin/ :
$ ls build/bin/ ot-cli-ftd.out ot-cli-mtd.out ot-ncp-ftd.out ot-rcp.out
Les deux images utilisées dans cet atelier de programmation sont les suivantes :
ot-rcp.out: micrologiciel du coprocesseur radio pour la carte du routeur de bordure.ot-cli-ftd.out: micrologiciel FTD (Full Thread Device) CLI pour les deux cartes FTD.
Appareil Thread minimal (facultatif) : si vous souhaitez explorer un appareil final en veille au lieu d'un appareil Thread complet, vous pouvez flasher ot-cli-mtd.out à la place de ot-cli-ftd.out sur les cartes 2 et 3. Un MTD ne route pas le trafic Thread et peut passer en mode veille basse consommation, ce qui le rend bien adapté aux applications fonctionnant sur batterie. Les étapes de formation du réseau Thread dans cet atelier de programmation sont les mêmes pour les deux types d'appareils.
Coprocesseur réseau (NCP) facultatif : le binaire ot-ncp-ftd.out implémente l'architecture NCP, où la pile OpenThread s'exécute sur l'appareil et un processeur hôte la pilote via le protocole Spinel. L'utilisation de NCP ne fait pas partie de cet atelier de programmation. Pour en savoir plus, consultez le fichier README de NCP.
5. Flasher le micrologiciel
Utilisez TI UniFlash pour flasher les images ELF sur les cartes LaunchPad.
Flasher à l'aide d'UniFlash
- Ouvrez UniFlash. Les cartes LaunchPad connectées s'affichent sous Detected Devices (Appareils détectés) grâce à la fonctionnalité de détection automatique des appareils.Si votre carte n'est pas détectée automatiquement, cliquez sur New Configuration (Nouvelle configuration), sélectionnez la cible
LP-EM-CC2745R10-Q1, puis choisissez la sonde de débogage USB XDS110.
- Sélectionnez Board 1 (carte à flasher avec
ot-rcp.out), puis cliquez sur Start (Démarrer). - Cliquez sur le bouton Parcourir et accédez à
ot-ti/build/bin/ot-rcp.out.
- Cliquez sur Load Image (Charger l'image) pour flasher le micrologiciel. La zone de journalisation affiche la progression et confirme la fin de l'opération.
- Répétez les étapes 2 à 4 pour les cartes 2 et 3, en sélectionnant
ot-ti/build/bin/ot-cli-ftd.outpour chacune d'elles.
Autre possibilité : Flasher à l'aide de Code Composer Studio (CCS)
Code Composer Studio peut être utilisé comme alternative à UniFlash. Il fournit également un environnement de débogage complet :
- Téléchargez et installez Code Composer Studio.
- Créez une connexion cible (CCXML) pour le LP-EM-CC2745R10-Q1 avec le débogueur XDS110. Consultez le Guide de l'utilisateur de CCS : méthode manuelle.
- Démarrez une session de débogage sans projet, comme décrit dans le Guide de l'utilisateur CCS : lancement manuel.
- Connectez-vous au cœur Arm Cortex-M33 et cliquez sur Load (Charger) pour charger l'image ELF.
La configuration CCXML par défaut utilise cJTAG à deux fils pour correspondre à la configuration de cavalier LP-EM-CC2745R10-Q1 par défaut. Après la programmation via JTAG, redémarrez la carte pour effacer l'indicateur d'arrêt au démarrage.
6. Programmer le HSM
Le CC2745R10-Q1 contient un module de sécurité matériel (HSM) qui doit être provisionné avant d'exécuter Thread ou tout autre micrologiciel d'application sécurisé. Si le HSM de votre carte LP-EM-CC2745R10-Q1 n'a pas encore été programmé, effectuez cette étape maintenant.
Pour programmer le HSM à l'aide d'UniFlash :
- Ouvrez UniFlash et sélectionnez votre carte LP-EM-CC2745R10-Q1 dans Detected Devices (Appareils détectés).
- Accédez au panneau de programmation du HSM et chargez l'image du micrologiciel du HSM comme indiqué ci-dessous.

- Suivez les instructions à l'écran pour terminer le provisionnement du HSM. L'opération est consignée dans la console de sortie UniFlash.
Consultez le Guide de démarrage rapide CC2745R10-Q1 dans TI Resource Explorer pour connaître la procédure complète de programmation du HSM, y compris le chemin d'accès à l'image du micrologiciel requise dans le SDK SimpleLink Low Power F3.
7. Récapitulatif du micrologiciel
À ce stade, les trois cartes devraient être flashées :
- Carte 1 :
ot-rcp.out: déconnectez-vous de l'ordinateur hôte et connectez-vous au Raspberry Pi via USB. - Tableau 2 :
ot-cli-ftd.outRestez connecté à l'ordinateur hôte. - Carte 3 :
ot-cli-ftd.out: restez connecté à l'ordinateur hôte.
Votre configuration matérielle doit ressembler au schéma ci-dessous. La carte 1 se connecte au Raspberry Pi en tant que coprocesseur radio pour OTBR, tandis que les cartes 2 et 3 restent connectées à l'ordinateur hôte pour l'accès à la console série.

8. Configurer la console série pour les appareils ot-cli-ftd
La carte LP-EM-CC2745R10-Q1 expose l'UART de l'application via USB à 921 600 bauds.
Ouvrez un terminal série sur le port COM UART de l'application (Windows) ou sur l'appareil /dev/ttyACM* (Linux/macOS) pour chaque carte FTD en utilisant les paramètres suivants :
Paramètre | Valeur |
Vitesse (baud) |
|
Bits de données |
|
Bits d'arrêt |
|
Parité |
|
Contrôle de flux |
|
Conseil (Linux/macOS) : Identifiez le nœud de périphérique correct en exécutant ls /dev/ttyACM* avant et après avoir branché une carte, puis notez l'entrée qui s'affiche. Chaque LP-EM-CC2745R10-Q1 crée deux entrées : le port au numéro le plus bas est le port UART de débogage XDS110, et le port au numéro le plus haut est le port UART de l'application. Par exemple, si le tableau crée /dev/ttyACM0 et /dev/ttyACM1, utilisez /dev/ttyACM1.
Conseil (Windows) : Ouvrez le Gestionnaire de périphériques et recherchez deux nouveaux ports COM sous Ports (COM et LPT) lorsqu'une carte est branchée. Le port de données de débogage XDS110 apparaît généralement en premier. Utilisez le deuxième port COM (numéro plus élevé) pour la console d'application.
Appuyez sur Entrée dans le terminal pour obtenir une invite OpenThread CLI (>). Pour obtenir la liste complète des commandes disponibles, consultez la documentation de référence OpenThread CLI. Vérifiez que le FTD est opérationnel :
> state disabled Done

Vous ne configurerez pas encore de console série pour la carte RCP. L'OTBR sur le Raspberry Pi communique directement avec le RCP. À l'étape suivante, vous allez configurer le Raspberry Pi en tant que routeur de bordure OpenThread.
9. Configurer le Raspberry Pi en tant que routeur de bordure
OTBR est basé sur ot-br-posix, le projet OpenThread Border Router Open Source. Le routeur de bordure s'exécute sur le Raspberry Pi et utilise la carte 1 (RCP) comme radio 802.15.4 via USB.
Configuration de Raspberry Pi
- Flashez Raspberry Pi OS (Lite ou Desktop 64 bits) sur votre carte SD à l'aide de Raspberry Pi Imager.
- Démarrez le Raspberry Pi et ouvrez un terminal (via SSH ou directement).
- Mettez à jour le gestionnaire de paquets et les paquets installés :
$ sudo apt-get update $ sudo apt-get upgrade -y
Redémarrez le Raspberry Pi après les mises à jour avant de continuer : sudo reboot
Brancher la carte 1 (RCP) au Raspberry Pi
Connectez la carte 1 (flashée avec ot-rcp) au Raspberry Pi via un câble micro-USB. Une fois la connexion établie, vérifiez que le nœud de l'appareil s'affiche :
$ ls /dev/ttyACM* /dev/ttyACM0 /dev/ttyACM1
L'UART de l'application de la carte RCP est généralement /dev/ttyACM1 (l'UART de débogage XDS110 est /dev/ttyACM0). Vérifiez quel port est l'UART de l'application en vous assurant qu'il répond lorsque l'agent OTBR est démarré lors d'une étape ultérieure. Si d'autres périphériques série USB sont connectés, le numéro du nœud de périphérique peut être différent. Ajustez le chemin d'accès dans la configuration OTBR en conséquence.
Compiler et installer ot-br-posix
Sur le Raspberry Pi, clonez et compilez ot-br-posix :
$ git clone https://github.com/openthread/ot-br-posix.git $ cd ot-br-posix $ ./script/bootstrap
Exécutez le script de configuration en spécifiant votre interface Ethernet comme interface dorsale (infrastructure) :
$ INFRA_IF_NAME=eth0 ./script/setup
eth0 est le nom habituel de l'interface Ethernet filaire. Si vous connectez la Raspberry Pi via le Wi-Fi au lieu d'Ethernet, remplacez eth0 par wlan0 (et assurez-vous que la Raspberry Pi est déjà connectée à votre réseau Wi-Fi). Vérifiez le nom de l'interface active avec ip link show.
Le script de configuration crée ot-br-posix à partir de la source, installe les services système otbr-agent et otbr-web, et configure la pile réseau. Ce processus prend généralement entre 10 et 20 minutes sur un Raspberry Pi 4B.
Configurer l'agent OTBR
Modifiez le fichier de configuration de l'agent OTBR pour spécifier le chemin d'accès et le débit en bauds de l'appareil RCP :
$ sudo nano /etc/default/otbr-agent
Localisez la ligne OTBR_AGENT_OPTS et mettez-la à jour pour qu'elle fasse référence à l'UART de l'application RCP :
OTBR_AGENT_OPTS="-I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
Remplacez eth0 par wlan0 si votre Raspberry Pi est connecté via le Wi-Fi.
OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyACM1?uart-baudrate=921600"
L'UART de l'application RCP LP-EM-CC2745R10-Q1 fonctionne à 921 600 bauds. Vérifiez que le chemin d'accès à l'appareil (/dev/ttyACM1 dans cet exemple) correspond à l'UART de l'application de votre carte RCP.
Redémarrez l'agent OTBR pour appliquer la configuration :
$ sudo systemctl restart otbr-agent $ sudo systemctl enable otbr-agent
Vérifiez que l'agent est en cours d'exécution :
$ sudo systemctl status otbr-agent
Interagir avec le nœud RCP
Communiquez avec le nœud RCP à l'aide de l'outil ot-ctl :
$ sudo ot-ctl state disabled Done
Vous pouvez surveiller le journal de l'agent OTBR pour les messages de connexion et d'état :
$ sudo journalctl -u otbr-agent -f
L'interface Web OTBR est disponible à l'adresse http:// et fournit une vue graphique du réseau Thread.
Pour arrêter ou redémarrer l'agent OTBR :
$ sudo systemctl stop otbr-agent $ sudo systemctl start otbr-agent
À ce stade, vous devriez avoir trois consoles actives :
- Terminal série pour la carte 2 (
ot-cli-ftd 1) sur l'ordinateur hôte. - Terminal série pour la carte 3 (
ot-cli-ftd 2) sur l'ordinateur hôte. - Session SSH ou de terminal sur le Raspberry Pi pour
ot-ctl(OTBR/RCP).
Vous êtes maintenant prêt à former un réseau Thread.
10. Créer un réseau Thread
Configurer RCP (OTBR)
Créez un réseau Thread à partir du shell ot-ctl sur le Raspberry Pi. Saisissez les commandes suivantes dans l'ordre :
Index | Commande | Description | Réponse attendue | ||
1 |
| Créez une configuration réseau. | OK | ||
2 |
| Validez le nouvel ensemble de données dans l'ensemble de données opérationnelles actives. | OK | ||
3 |
| Activez l'interface Thread. | OK | ||
4 |
| Activez et associez l'opération du protocole Thread. | OK | ||
Patientez 10 secondes pour que l'interface Thread s'affiche. | |||||
5 |
| Vérifiez l'état de l'appareil. Il doit être défini sur leader. Les autres états possibles sont : hors connexion, désactivé, détaché, enfant, routeur ou leader. | leader | ||
6 |
| Affichez la configuration réseau. Vos valeurs seront différentes. Notez le canal, la clé réseau, le nom du réseau et l'ID PAN. Vous en aurez besoin pour ajouter des FTD au réseau. | Active Timestamp: 1 | ||
Ajouter des FTD au réseau Thread (méthode hors bande)
Avec la méthode de configuration hors bande, vous fournissez directement les identifiants réseau. Dans le terminal série de chaque carte FTD, saisissez les commandes suivantes en utilisant le canal et la clé réseau de la sortie de l'ensemble de données OTBR ci-dessus :
Index | Commande | Description | Réponse attendue | ||
1 |
| Définissez le canal pour qu'il corresponde à l'OTBR. Remplacez | OK | ||
2 |
| Définissez la clé réseau. Remplacez par la clé réseau de votre OTBR. Seule cette clé est requise pour la pièce jointe. | OK | ||
3 |
| Validez le nouvel ensemble de données dans l'ensemble de données opérationnelles actives. | OK | ||
4 |
| Activez l'interface Thread. | OK | ||
5 |
| 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 |
| Vérifiez l'état de l'appareil. | enfant | ||
En raison de la nature auto-configurable des réseaux Thread et du fait qu'il s'agit d'appareils Thread complets, l'un ou les deux FTD peuvent éventuellement devenir des routeurs. Vous pouvez vérifier le rôle actuel à tout moment à l'aide de la commande state.
Communication entre les appareils Thread
Utilisez la commande ping pour vérifier que les appareils peuvent communiquer. Obtenez les adresses IPv6 de chaque appareil avec 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) Done
À partir des deux FTD, envoyez un ping à 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
Une réponse réussie confirme que le réseau Thread fonctionne et que les appareils peuvent communiquer. Répétez la procédure pour envoyer un ping à chaque FTD depuis l'OTBR (sudo ot-ctl ping ).
11. Félicitations
Vous avez créé un réseau Thread avec des cartes TI CC2745R10-Q1.
Vous savez maintenant :
- Configurer l'environnement de compilation ot-ti de Texas Instruments
- Découvrez comment compiler et flasher les binaires de l'interface de ligne de commande OpenThread sur la carte de développement LP-EM-CC2745R10-Q1.
- Configurer un Raspberry Pi en tant que routeur de bordure OpenThread (OTBR) à l'aide d'ot-br-posix.
- 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 :
- Plates-formes compatibles : découvrez toutes les plates-formes compatibles avec OpenThread.
- Compiler OpenThread : plus d'informations sur la compilation et la configuration d'OpenThread
- Principes de base de Thread : couvre tous les concepts Thread présentés dans cet atelier de programmation.
- Dépôt TI ot-ti : implémentation OpenThread de TI pour les appareils SimpleLink, avec des instructions de compilation et des notes de version
- Page produit CC2745R10-Q1 : fiche technique de l'appareil, conceptions de référence et autres documents
- LP-EM-CC2745R10-Q1 LaunchPad : guide de l'utilisateur de la carte d'évaluation et fichiers matériels
- Documentation de référence de la CLI OpenThread : présentation de la CLI OpenThread et de son utilisation
- Commandes CLI OpenThread : documentation de référence complète pour toutes les commandes CLI OpenThread
- TI E2E Community – Thread & Zigbee : communauté d'assistance technique pour les produits de connectivité sans fil de Texas Instruments