Mini-projet capteur météo et LoRaWAN avec la Lopy4

Envoyé par le 18 Oct 2021

Dans ce mini-projet, il s’agit de transmettre les informations de température et hygrométrie d’une pièce à un serveur du réseau The Things Networks à l’aide à l’aide du protocole LoRaWAN.

Sommaire

Etape 1 Accéder au réseau The Things Network (TTN)

Etape 2 Récupérer les données de température et humidité du DHT11

Etape 3 Envoi des données de température et humidité sur le serveur TTN

Matériel/logiciel :

  • LoPy4 + Expansion Board 3.1 de Pycom
  • Antenne LoRa
  • Capteur de température DHT11
  • Des fils
  • Gateway LoRaWAN en fonctionnement et à proximité qui permet la couverture réseau, existante ou à fabriquer soi-même (tuto à venir …)
  • VSC ou Atom pour la programmation en python

Etape 1 Accéder au réseau The Things Network (TTN)

a) Découverte du réseau TTN et de la plateforme web

La figure 1 présente l’architecture classique d’un réseau LoRaWAN, dite en étoile. Chaque noeud (ou end device) peut être connecté à plusieurs passerelles (gateways), qui sont elles-mêmes connectées à un serveur d’application qui va collecter, choisir voire, traiter les données. Les gateways ne font que relayer les paquets de données. Si le serveur d’application reçoit plusieurs fois le même paquet en provenance de plusieurs passerelles, il est  capable de choisir celui avec la meilleure qualité de signal.

FIG 1. Par Germain GAUDARD — Travail personnel, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=64159124

Il existe plusieurs réseaux publics d’opérateurs LoRaWAN. Dans ce mini-projet, nous choisissons le réseau The Things Network (TTN), qui est un réseau public open-source, qui peut être utilisé sans contrainte commerciale ou privée.

L’équipe pédagogique a préalablement déclaré les noeuds LoPy4 sur l’interface de TTN appelée, The Things Stack Community Edition.

Exemple de tutorial pour déclarer un device de type LoPy4 (lien vers tuto spécifique).

Demandez login et mdp à l’enseignant.e présent.e pour accéder à la plateforme [4].

Les devices sont nommés selon leur adresse MAC (voir Bien démarrer avec la LoPy4 pour lire l’adresse MAC). Avant toute chose identifiez votre device en lisant son adresse MAC.

Dans l’application tp-lora-cooc de la plateforme The Things Stack Community Edition [4], repérez votre device et cliquez pour obtenir des informations supplémentaires :

 

Notez la valeur de AppEUI, DevEUI et AppKey. Les 3 éléments permettent de mettre en place une connexion LoRaWAN sécurisée avec le serveur TTN.

Dans l’onglet Live data, vous observerez plus tard les données qui sont remontées de votre noeud (uplink) ou qui sont envoyées à votre noeud (downlink). Dans l’onglet Messaging, vous pouvez simuler l’envoi de données uplink au serveur, vous pouvez également programmer des envois de données downlink. Vous pouvez également appliquer un code aux données reçues et envoyées permettant de les formatter pour les rendre lisibles par un humain (Payload formatters).

Toutes ces actions seront expérimentées un peu plus loin.

b) Se connecter au réseau TTN à partir de votre LoPy4 et envoyer vos 1ers paquets

Vous allez connecter votre Lopy4 au réseau TTN et envoyez vos 1ers paquets en uplink sur le réseau TTN. !! N’oubliez pas de connecter l’antenne LoRa !!

  • Récupérez le code main_template.py sur gitlab [5]
  • Modifiez DevEUI et AppKey selon les paramètres indiqués sur la plateforme TTN
  • Modifiez le nom en main.py et Lancez un RUN
  • Observez les print dans la console ainsi que la couleur de la LED qui vous indique l’évolution de la connexion
  • Une fois la connexion effectuée (CONNECTED!!), observez les messages remontés sur la plateforme dans l’onglet Live data

Quelle est la forme des paquets remontés ?  Quel est le lien avec le format de données de votre code python ?

Quel est l’impact du data rate (DR) sur l’envoi des paquets ? Commencez par un DR égal à 4 (SF8BW125)  puis passez à 0 (SF12BW125) [6].

Quel est l’impact du DR sur le timeonair ? utilisez lora.stats() et/ou lisez la variable consumed_airtime sur la plateforme en cliquant sur l’évènement (event details)

Quel est le SNR de la transmission ? lisez la variable SNR dans l’onglet Live data. Observez les variations (min/max).

Calculez la marge de transmission pour le min et le max, pour chaque DR. (Cf. [7] video 17 slide 16 et vidéo 16 slide 4, supports disponibles en pdf sur Moodle)

c) Récupérer des paquets du serveur TTN vers votre Lopy4 (Downlink)

Pour cela, nous allons programmer des envois downlink à partir de la plateforme TTN, onglet Messaging du device.

  • Décommentez les lignes de code correspondantes à la réception d’un message sur la LoPy4
  • Après avoir ré-initialisé votre LoPy4 (soft reset, ctrl+F ou ctrl+alt+F), relancez un RUN
  • Après la connexion, observez la réception du 1er paquet sur l’interface, puis la LoPy est en attente de réception d’un paquet
  • Programmez un envoi downlink (exemple FF)

  • Observez la réception du paquet sur la LoPy, puis l’envoi d’un nouveau paquet en uplink.

L’attente de réception d’un paquet bloque l’envoi de tout nouveau paquet.

Etape 2 Récupérer les données de température et humidité du DHT11

Pour cette étape, nous allons utiliser la LoPy4 uniquement en tant que micro-contrôleur (pas de transmission sans fil) pour récupérer les données du capteur de température et humidité DHT11. La data sheet du capteur est donnée ici [2]. Il est monté sur une carte à 3 broches SE052, dont la data sheet est donnée ici [8].

  • Récupérez le dossier DHT11 sur gitlab [9]
  • Dans le main.py, identifiez la broche de la LopY qui sera utilisée
  • Branchez les fils entre le capteur DHT11 et la LoPy4. S pour signal, – pour GND, VCC sur la broche du milieu
  • Lancez un UPLOAD (car il faut charger la librairie dht.py)
  • Observez les données récupérées
  • Dans le fichier dht.py, lisez le code correspondant à read(). Comparez avec le chronogramme de  communication ci-dessous (extrait de la data sheet [2]). Qu’observe-t-on en sortie de la fonction pulses_get() ? Quels sont les intervalles de temps qui permettent de définir si le capteur envoie un ‘0’ ou un ‘1’ ?

Chronogramme de communication entre DHT11 et MCU

  • Repérez le format des données dans la data sheet, comparez avec le code read(). Combien d’octets sont envoyés ? Quels sont les octets qui contiennent les données ? À quoi sert le checksum ?

 

Etape 3 Envoi des données de température et humidité sur le serveur TTN

Nous allons maintenant intégrer les 2 codes précédents pour envoyer les données de température et humidité sur le serveur TTN.

a) Intégration des 2 codes précédents

À vous de jouer !

Attention au format des données transmises via LoRaWAN. Utilisez la fonction bytes() pour envoyer des octets.

La table de correspondance Decimal <>Hexadecimal<>Caractère ASCII [10] peut vous aider.

Vous devriez voir apparaître quelque chose comme ça dans la console TTN de votre device

Observez le format affiché des données reçues (MAC Payload : 1549).

Comparez avec le format affiché des données envoyées :

Temp : 21

RH : 73

b’\x15I’

b) Mise en forme des données affichées dans la console : Payload Formatters

Dans l’onglet Payload Formatters de votre device, choisissez Formatter Type > Javascript. Appliquez directement la fonction telle qu’elle est proposée (Save changes) et observez le résultat dans la console. Vous pouvez aussi tester vos modifications dans la fenêtre Test en appliquant une valeur dans Byte payload.

Puis modifiez la fonction decodeUplink pour permettre l’affichage sous la forme suivante :

Conclusion

Bravo ! Vous êtes allés au bout de ces 3 activités autour de la prise en main des LoPy4 !

Il reste encore plein de choses à découvrir dans le monde de l’IoT. Voici quelques pages d’inspiration :

  1. un projet très complet qui envoie les données d’une station météo sur la plateforme cloud Ubidots (via WiFI) en utilisant le protocole MQTT (Message Queuing Telemetry Transport), puis envoi des données sur une application Android [11]
  2. un autre projet du même style mais qui utilise plutôt la plateforme cloud IFTTT, en utilisant l’application IFTTT (dans tous les stores) [12]
  3. un projet de capteurs pour les plantes qui utilise la plateforme de Pycom, appelée Pybytes, à l’aide d’une connexion WiFI [13]

Plus d’infos sur les plateformes Cloud Ubidots [14] ou Cayenne [15].

 

Références

[1] « Démarrer avec Lopy4 Pycom | Téléfab ». https://telefab.fr/2021/09/27/demarrer-avec-lopy4-pycom/ (consulté le oct. 19, 2021).

[2] « DHT11.pdf · main · LANGLAIS Charlotte / TP lora COOC », GitLab. https://gitlab.imt-atlantique.fr/clanglai/tp-lora-cooc/-/blob/main/DHT11.pdf (consulté le oct. 19, 2021).

[3] « TTN Mapper ». https://ttnmapper.org/colour-radar/ (consulté le oct. 19, 2021).

[4] « Management platform for The Things Network », The Things Network Console. https://eu1.cloud.thethings.network/console (consulté le oct. 19, 2021).

[5] « OTAA/main_template.py · main · LANGLAIS Charlotte / TP lora COOC », GitLab. https://gitlab.imt-atlantique.fr/clanglai/tp-lora-cooc/-/blob/main/OTAA/main_template.py (consulté le oct. 19, 2021).

[6] « LoRa ». https://docs.pycom.io/firmwareapi/pycom/network/lora/ (consulté le oct. 19, 2021).

[7] « Mobilefish.com – LoRa/LoRaWAN tutorial. » https://www.mobilefish.com/developer/lorawan/lorawan_quickguide_tutorial.html (consulté le oct. 19, 2021).

[8] (C) 2020 Conrad, « Iduino Module capteur d’humidité 1 pc(s) SE052 | Conrad.fr ». https://www.conrad.fr/p/iduino-module-capteur-dhumidite-1-pcs-se052-1485325 (consulté le oct. 19, 2021).

[9] « DHT11 · main · LANGLAIS Charlotte / TP lora COOC », GitLab. https://gitlab.imt-atlantique.fr/clanglai/tp-lora-cooc/-/tree/main/DHT11 (consulté le oct. 19, 2021).

[10] « Fichier:ASCII-Table-wide.svg — Wikipédia ». https://commons.wikimedia.org/wiki/File:ASCII-Table-wide.svg(consulté le oct. 19, 2021).

[11] « Tutorial on how to build a Pycom LoPy4 weather station », HackMD. https://hackmd.io/@ehTrKNe5RYyySf6QXbWMWA/ByVCoGFAU (consulté le oct. 19, 2021).

[12] « Automating a floor fan with DHT11 sensor », HackMD. https://hackmd.io/@abbeabbe/ByNXPfGyv (consulté le oct. 19, 2021).

[13] « Plant Sensor », Hackster.io. https://www.hackster.io/55480/plant-sensor-a9937f (consulté le oct. 19, 2021).

[14] « Ubidots ». https://www.thethingsindustries.com/docs/integrations/cloud-integrations/ubidots/ (consulté le oct. 19, 2021).

[15] « Cayenne ». https://www.thethingsindustries.com/docs/integrations/cloud-integrations/cayenne/ (consulté le oct. 19, 2021).

 

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *