TP04 : LoRaWAN
Dans ce TP, nous modifions encore le programme du thermomètre et cette fois nous envoyons les mesures au travers d’un réseau LoRaWAN.
Le schéma ci-dessous illustre le flux d’information du capteur au dashboard :
Objectifs du TP
À la fin de ce TP, les étudiants :
- auront conçu et implémenté une application multitâches utilisant LoRaWAN
- auront compris la programmation du module Mipot (LoRaWAN) et son utilisation avec le pilote fourni
- auront intégré leur système dans The Thing Network
- auront configuré un dashboard sur Datacake
- auront rédigé un journal de travail et déposé le PDF dans le dépôt git.
Les livrables sont :
- un projet git (tp04) dans votre groupe sur gitlab.forge.hefr.ch avec le code du TP et le code du programme de test;
- une configuration CI/CD de gitlab pour valider votre TP;
- un journal de travail déposé sur gitlab.
Temps accordé : 4 périodes de 45 minutes en classe + travail personnel à la maison
Délai
Le TPs doit être rendu au plus tard 6 jours après la séance en classe à 23:59
Création d’un compte dans The Thing Network
Pour l’envoi de données dans LoRaWAN, nous utiliserons le réseau communautaire The Thing Network. Il s’agit d’un réseau que tout le monde peut étendre en y ajoutant un gateway. La HEIA-FR contribue à ce réseau avec une antenne au sommet de la tour télécom.
- Si vous ne l’avez pas déjà fait, créez un compte sur The Thing Network. Assurez-vous de choisir The Things Stack Sandbox en cliquant sur le bouton Join The Thing Network
- Dès que votre compte est validé, rendez-vous sur la console de The Think Network
- Choisissez le cluster Europe 1 (eu1 - Dublin, Ireland)
- Confirmez le compte que vous souhaitez utiliser
Vous devriez voir l’écran suivant
L’option Go to gateways vous permet d’ajouter et de gérer des passerelles au réseau The Thing Network. Ça peut vous être utile si vous souhaitez utiliser des appareils LoRa dans des régions qui ne sont pas couvertes par des passerelles existantes. Vous pouvez réaliser votre passerelle à partir d’un Raspberry Pi ou alors acheter une passerelle toute faite. La LPS8 V2 de Dragino n’est pas trop chère et fonctionne très bien.
Si vous êtes à proximité de la HEIA-FR, vous profitez de la passerelle située dans la tour télécom (un Dragine LPS8 V2) et ça devrait vous permettre de faire ce TP depuis la plupart des salles de classe.
Configuration de l’application
Nous allons maintenant créer et configurer l’application de mesure de température ambiante d’un local
- Cliquez sur Go to applications.
- Cliquez sur le bouton bleu en haut à droite + Create application
- Choisissez un Application ID unique, donnez un nom et décrivez votre nouvelle application.
Création d’un device
Créez ensuite un end device en cliquant sur l’icône End device dans la barre de gauche et en cliquant sur le bouton bleu + Register end device.
- Dans Input Method, choisissez Enter end device specifics manually.
- Choisissez le plan de fréquence et la version de LoRaWAN comme indiqué ci-dessous
- Entrez
00 00 00 00 00 00 00 00
comme JoinEUI et cliquez sur Confirm - Laissez le serveur générer un DevEUI et une AppKey
Vous pouvez modifier le End device ID, mais le défaut proposé par le système convient très bien.
Cliquez sur Register end device
Vous aurez besoin du DevEUI et de la AppKey dans votre application et vous devez les fournir en least significant byte first (lsb). Vous pouvez facilement copier ces informations depuis la page du site :
Formatage des données
Dans l’application, nous formaterons les données avec CayenneLPP. Pour mieux visualiser les données dans la console, cliquez sur Payload formaters → Uplink et choisissez CayenneLPP.
Vous avez maintenant tout ce dont il vous faut pour développer l’application sur la cible. Dès que vous enverrez des données correctes au travers de The Thing Network, les messages apparaitront sous le menu Live data.
Développement de l’application
Comme pour les TPs précédents,
l’enseignant vous a assigné un projet sur gitlab.forge.hefr.ch (embsys/2024-2025/sup/tp04/tp04<X>
).
Le projet à été créé à partir du projet starter-tp04.
Étudiez attentivement la description des commandes du module 32001353 et également le datasheet de ce module.
Étudiez la réalisation du pilote pour ce périphérique dans les fichiers
lib/mipot/mipot.hpp
et lib/mipot/mipot.cpp
.
La structure du payload en LoRa n’est pas standardisée. Cependant, le
format Cayenne Low Power Payload est très répandu pour structurer un
payload LoRa. Étudiez le format Cayennne
LPP ainsi que la
réalisation du pilote dans les fichiers
/lib/cayenne-lpp/cayenne_lpp.hpp
et
/lib/cayenne-lpp/cayenne_lpp.cpp
.
Avant de commencer l’implémentation, calculez la période à laquelle vous pourrez envoyer les données en respectant le Duty cycle et le Fair Use Policy définit par The Thing Network.
Aidez-vous pour ceci des deux sites suivants:
- https://www.thethingsnetwork.org/airtime-calculator
- https://avbentem.github.io/airtime-calculator/ttn/eu868/4
À faire
Prenez soin de documenter votre calcul dans votre rapport et prouvez que vous respectez les règles. N’hésitez pas à ajouter une illustration.
Nous pouvons maintenant passer à l’implémentation de la tâche à proprement parler. Voici le pseudo-code de cette tâche :
mipot = get Mipot instance;
Call the Start() method (mipot->Start)
Save the device EUI to the EEPROM @0x00
Save the application EUI to the EEPROM @0x08
Set DR/SF Parameters in EEPROM @0x21 <- 5 (SF7/125kHz)
Configure the Adaptive Data Rate in EEPROM @0x23 <- 0/1
Enable customer device EUI in the EEPROM @0x26 <- 1
Call the SetAppKey() with the proper Application Key
Call the JoinOTAA() method and make sure that it returns Success
Wait until activation status is join (wait 1 sec between each try)
While True {
Get the current temperature from the queue
Encode the temperature in a Cayenne LPP format (use channel 0)
Send the payload using the SendMessage() method
}
Attention
Le Mipot 32001353 conserve les paramètres de configuration dans une mémoire EEPROM interne. Il est donc possible que le module que vous avez reçu ait déjà été configuré. Vous pouvez réinitialiser votre module avec les paramètres par défaut avec le le code du dépôt Mipot Factory Reset
Vérifiez que The Thing Network reçoive bien les données en consultant les live data dans la console de The Thing Network. Assurez-vous d’utiliser les bons paramètre LoRa (Spreading Factor 7, Data Rate 125 KHz) et vérifiez le niveau du signal (RSSI) ainsi que le rapport signal/bruit (SNR).
À faire
Notez vos observations dans votre rapport. Indiquez les valeurs limites pour le RSSI et le SNR pour que votre système fonctionne correctement.
Visualisation des données / Dashboard
Pour visualiser les mesures de température, nous utilisons le service de DataCake
La figure suivante illustre le résultat que vous obtiendrez
- Allez sur le la page de l’app DataCake et cliquez sur Sign Up pour vous créer un compte.
- Remplissez les champs et terminez la procédure de création de compte.
- Dans la page principale de l’app, cliquez sur Devices, puis sur le bouton bleu + Add Device.
- Choisissez LoRaWAN, puis New Product from template et cherchez Cayenne LPP Starting Template
- Cliquez sur Next
- Choisissez The Things Stack V3 et cliquez sur Next
- Dans le champ DEVEUI, recopiez le DevEUI de votre end device depuis la console de The Thing Network. Donnez un nom à ce device et cliquez sur Next
- Choisissez l’option gratuite (Free) et cliquez sur Add 1 device.
- Cliquez sur le device que vous venez d’ajouter et cliquez sur Configuration.
Étudiez la section Payload Decoder et dans la section Fields, supprimez
le champ Analog Input 0. Il ne doit rester que Temperature Sensor 0
avec
l’identifiant TEMPERATURE_SENSOR_0
.
Vous aurez encore besoin de votre API Token. Cliquez sur Account Settings → API Token pour accéder à votre token.
Intégration dans l’application The Thing Network
Nous pouvons maintenant configurer notre application dans The Thing Network pour envoyer les mesures de températures vers DataCake.
- Retournez sur la console de The Thing Network, cliquez sur vote application et cliquez sur Integrations.
- Cliquez sur Webhooks, puis sur le bouton bleu + Add webhook et choisissez Datacake.
- Donnez un identifiant à votre
web hook
et copiez le token depuis le site de Datacake. - Cliquez sur Create Datacake webhook.
Dès qu’une nouvelle température sera envoyée à The Think Network, elle devra aussi être visible sur Datacake.
Création d’un Dashboard
Dans l’application Datacake, cliquez sur Add Dashboard et créez une jolie interface pour votre mesure de température. Faites une version Desktop et une version Mobile
À faire
Rendez votre Dashboard public et mettez un QR-Code dans votre rapport avec l’URL de votre Dashboard. Mettez aussi un screenshot dans votre rapport.
À ne pas oublier
Gardez toujours en têtes les bonnes pratiques ainsi que les dix commandements du bon programmeur.
- Choisissez de bons noms pour les classes, les méthodes et les variables.
- Implémentez les bibliothèques avec un haut niveau d’abstraction pour pouvoir réutiliser les méthodes dans d’autres projets.
- Faites des “git commit” régulièrement avec de bons commentaires.
- Configurez le CI/CD de gitlab et testez automatiquement le plus de choses possibles.
- Implémentez des tests unitaires.
- Utilisez des assertions dans votre code pour le documenter et le rendre plus robuste.
Journal de travail
- Rédigez un rapport (journal de travail) avec les indications suivantes :
- Une page de titre avec au minimum :
- le nom et le logo officiel de l’école
- le nom du cours : Systèmes Embarqués 1
- le titre de votre document : “TP04 : LoRaWAN”
- le numéro de votre groupe
- les noms des auteurs (vous) avec la classe dans laquelle vous êtes
- la date à laquelle vous avez terminé le rapport
- éventuellement la version du rapport
- Une introduction pour poser le contexte
- Un résumé des notions que vous avez apprises pendant ce TP en précisant si c’est
- non acquis
- acquis, mais encore à exercer
- parfaitement acquis
- Un résumé des points qui vous semblent importants et que vous devez retenir
- Les réponses aux questions.
- Le code source bien formaté et avec du “syntax highlighting” de votre code source.
- Une conclusion par laquelle vous donnez vos impressions sur le TP, ce que vous avez aimé, ce que vous avez moins aimé, et éventuellement des suggestions pour des changements. Indiquez également le nombre d’heures que vous avez passées, par personne, en dehors des heures de TP en classe.
Important
Déposez votre rapport dans un dossier /docs
de votre dépôt git
(tp04) avec le nom report04.pdf
(le chemin complet vers votre rapport est donc
/docs/report04.pdf
)