L’Internet des Objets
22.2 LoRa et LoRaWAN
22.2.1 Protocole longue distance
Le nom LoRa vient de LOng RAnge. Il définit la méthode Radio utilisée pour la communication physique. Le nom LoRaWAN définit le protocole et l’architecture du système. Ils permettent de mettre en place une communication longue distance (record de 2020 : 832km) à faible énergie et faible débit entre 300b/s et 50kb/s.
L’entreprise sigfox a développé un produit concurent qui souffre de deux gros handicaps pour l’enseignement. Il impose un abonnement pour chaque équipement (rédhibitoire pour les services universitaires) et la réception est obligatoirement gérée par l’opérateur. Il n’est donc pas raisonnable d’installer une maquette complète. Nous nous limiterons donc à LoRa.
La 5G propose aussi un service IoT. Il faut donc un abonnement et la partie réseau est aussi inaccessible.
22.2.1.1 L’architecture LoRaWAN
Le mot LoRaWAN désigne un protocole de transmission numérique utilisant la modulation LoRa. La transmission se fait généralement entre un objet et une passerelle. L’objet est généralement un capteur, la passerelle permet de convertir les informations vers un réseau IP, souvent Internet.
Par abus de langage, LoRa ou LoRaWAN peuvent désigner le réseau complet dont une partie utilise cette modulation. Les opérateurs de télécommunications fournissent une offre commerciale permettant d’utiliser un capteur LoRaWAN sans une passerelle personnelle. Les applications dans le transport peuvent utiliser ce genre d’abonnement pour disposer d’une couverture étendue.
La réglementation limite la puissance d’émission et le pourcentage de temps d’émission. Pour la bande 866 (entre 863 et 870MHz), nous avons des puissances maximum de 14dBm ou 27dBm et des durées d’utilisation de 0,1% à 10%.
22.2.1.2 The Thing Network
Le réseau des choses en anglais The Thing Network (TTN) se définit comme « We are a global collaborative Internet of Things ecosystem that creates networks, devices and solutions using LoRaWAN ». Il définit une architecture et propose des tutoriaux pour mettre en place une solution utilisant LoRaWAN.
Ce que propose TTN, au delà de la formation, c’est un réseau coopératif. L’architecture, illustrée dans la figure 22.1, définit quatre types d’acteurs :
- Nœuds terminaux
-
ce sont principalement des capteurs communicants en LoRaWAN ;
- Passerelles
-
convertissent les communications LoRaWAN en IP ;
- Serveur réseau
-
est connecté à toutes les passerelles et centralise toutes les communications ;
- Serveur Applicatif
-
le serveur propre à un service.
Les nœuds terminaux sont les objets disséminés. Ils envoient leurs informations en transmission LoRa. Ils peuvent recevoir des réponses éventuellement. Ces nœuds appartiennent aux utilisateurs de TTN.
Les passerelles convertissent toutes les communications LoRa vers le serveur réseau. Les passerelles appartiennent aussi aux utilisateurs de TTN. Les passerelles sont mutualisées et transmettent les messages aussi pour les autre utilisateurs.
Le serveur réseau reçoit les messages depuis toutes les passerelles. Quand un objet diffuse son message, celui-ci peut être reçu par plusieurs passerelles. Le serveur transmettra alors uniquement un seul message au serveur applicatif. Pour les réponses, il utilisera la passerelle qui a la meilleure connexion avec l’objet. Si plusieurs passerelles reçoivent le message, alors cela permettra de localiser l’objet.
Le serveur applicatif sera notifié des messages des nœuds terminaux le concernant par le serveur réseau.
Pour ajouter une application, il faut au moins un objet distant et un serveur applicatif. Le site TTN fournit une carte montrant les passerelles disponibles. Si aucune passerelle n’est disponible pour l’objet, alors il faut ajouter une passerelle.
L’utilisation du réseau TTN est bien documentée, mais assez difficile à mettre en œuvre la première fois. C’est pourquoi, nous souhaitons commencer les projets d’étudiants avec une communication directe entre deux objets LoRa.
22.2.2 Les cartes LoRa
22.2.2.1 STM32
ST propose plusieurs chips et cartes LoRa :
Nous avons la famille des WL55 :
- STM32WL55
-
un processeur, basse consommation avec un chipset LoRa, mais peu de mémoire flash (256Ko, pas assez pour micropython) ;
- Nucleo WL55
- Nucleo pack LoRa
-
(P-NUCLEO-LRWAN2) existe en trois versions contenant une carte gateway (grosse Nucleo avec Ethernet et une carte fille LoRa) et une carte sensor (Nucleo et carte fille environnement) ;
- B-L072Z-LRWAN1
-
carte Nucleo / Lora (peu de mémoire), pas de capteurs, un logement de piles AAA ;
- STEVAL-STRKT01
-
un tracker LORA GNSS et environnement
- Seeed Grove-Wio-E5
-
Une carte Grove avec le processeur, elle implémente un jeu de commandes AT :
-
• Gateway Dragino
L0 73
-
• Nucleo 64
-
• compatible µP
-
• 192Ko
-
• 32MHz
-
• Nucleo 144
-
• compatible µP
-
• Flash 1Mo
-
• Haute performance
22.2.2.2 Le LoRA, pas à pas
Merci à Sufian Kaki Aslam pour sa documentation sur Hackster.
Nous allons commencer par le module Grove pour utiliser le WL55 à travers une interface UART et des commandes AT (Hayes). Pour commencer, il nous faut deux modules et émettre depuis l’un pour recevoir par l’autre.
Mise en place matérielle du couple WB
Nous allons utiliser un nucleo, ici un WB55, avec le firmware MicroPython. Le WL55 est le module grove, programmé avec des commandes AT, c’est classique pour un modem.
Pour commencer, nous pouvons utiliser les commandes suivantes :
- +AT
-
réponse +AT: OK ;
- AT+VER
-
réponse +VER: 4.0.11, par exemple ;
- AT+RESET
-
Le récepteur doit recevoir les commandes :
AT+MODE=TEST AT+TEST=RXLRPKT
L’émetteur :
AT+MODE=TEST AT+TEST=TXLRPKT, "AB" AT+TEST=TXLRSTR, "AB"
Il faut donc pouvoir envoyer et recevoir les informations série. Pour cela, nous allons utiliser une carte Nucleo WB55. Nous pouvons la programmer en MicroPython ou en C, avec l’IDE Arduino.
22.2.2.3 Le firmware seeedLoRa
Le firmware utilise les mécanismes classiques des modems (Commandes AT ou Hayes). En particulier :
-
• non sensible à la casse ;
-
• toutes les commandes fournissent une réponse ;
-
• les commandes sont limitées à 528 caractères ;
-
• les commandes sont terminées par un LF, CRLF est aussi autorisé ;
-
• la configuragion est 9600,8N1 ;
-
• certains paramètres résistent à la mise hors tension, la remis en paramètres usine se fait par AT+FDEFAULT
-
• il est possible de fonctionner en full-duplex
-
• la mise à jour du firmware se fait en mode dfu
Le timeout pose quelques petits problèmes. L’utilisation initiale de MicroPython génère souvent un timeout, alors qu’avec un programme compliné, nous n’avons pas de timeout. La documentation n’est pas explicite sur ce sujet. Elle indique que la valeur maximum est de 300ms, et l’exemple montre comment utiliser 1s.
L’utilisation de fonctions de contrôle de l’heure pourrait permettre de mieux comprendre cela. Les fonctions qui pourraient être utiles sont utime.ticks_ms et utime.ticks_us pour obtenir une idée du temps etnre deux appels.
Le mode test fournit des sous commandes permettant d’obtenir des informations sur les caractéristiques de transmission :
- STOP
- TXCW
-
transmets une onde continue
- TXCLORA
-
transmets un signal LoRa continuellement
- RFCFG
- RXLRPKT
-
Reçoit les paquets LoRa, les affiche une fois
- TXLRPKT
-
Transmet au format hexa
- TXLRSTR
-
transmet au format string
- RSSI
-
affiche le RSSI du signal reçu
- LWDL
-
22.2.2.4 Le mode test seed
Nous allons commencer par jouer en mode test. Pour l’activer, il faut utiliser :
ATcmd: AT+MODE=test Envoyé : AT+MODE=test ATcmd: Message reçu : +MODE: TEST
Ensuite, pour envoyer un message, on peut utiliser :
ATcmd: AT+TEST=TXLRPKT, "00 AA 11 BB 22 CC" Envoyé : AT+TEST=TXLRPKT, "00 AA 11 BB 22 CC" ATcmd: Message reçu : +TEST: TXLRPKT "00AA11BB22CC" +TEST: TX DONE
L’analyse spectrale par gqrx est présentée dans la figure 22.3. Le signal est centré sur 868MHz (entre 867,9 et 868,1).
On peut aussi transmettre une onde continue (ATXCW), la figure 22.4 montre une raie.
Ou alors transmettre une modulation LoRa permanente (ATTXCLORA)
:




