Créer son premier capteur de température et envoyer les données via Lora

Créer son premier capteur de température et envoyer les données via Lora

20 mai 2019 4 Par Jérôme Ferrari

Bonjour à tous

Aujourd’hui nous allons créer un capteur connecté permettant de récupérer des informations sur des sites “isolés”.

Mais avant de commencer les choses sérieuses, je vous propose une petite présentation de Lora.

Qu’est-ce que LoraWan?

LoRaWAN est un réseau étendu de faible puissance (LPWAN low power wide area network). Il a été développé pour connecter des périphériques et des capteurs pour l’Internet des objets (IOT Internet Of Things) en vue d’un déploiement massif de capteur.

La technologie LoRa a été développée pour fournir aux appareils IoT une autonomie de batterie étendue de plusieurs années et en même temps permettre d’avoir un réseau étendue et économique à déployer.

Principales caractéristiques de LPWAN
• Longue durée de vie de la batterie: souvent plus de 10 ans au service des applications de comptage intelligent.
• Chipsets et réseaux à faible coût
• Capacité de débit de communication de données limitée

Les dernières recherches montrent qu’il y aura plus de 3,6 milliards d’appareils connectés LPWAN à la fin de 2024. Aujourd’hui, ils sont environ 10 millions.
Cela signifie que des technologies telles que LoRaWAN joueront un rôle essentiel dans l’IOT et pourront fonctionner parallèlement aux technologies de communication cellulaire et à courte portée.

LoRa vs LTE: Les avantages de LoRa par rapport aux réseaux cellulaires et locaux existants

Les réseaux locaux tels que le WiFi ou le Bluetooth sont des technologies normées et déjà bien établies. Cependant, le plus gros problème de ce genre de réseau est la consommation de la batterie et la portée.
Il en est de même pour les réseaux cellulaires qui sont gourmand en terme d’énergie.
Les réseaux étendus de faible puissance, comme LoRaWAN ont été construits à partir de zéro et conçu pour fonctionner uniquement avec les appareils IoT qui ont besoin d’une autonomie de batterie inégalée.
En outre, le réseau LoRa est un excellent support pour les applications IoT, car son coût de déploiement est minime et peut-être installé par n’importe qui.

Le protocole Lora permet aussi une transmission longue distance mais avec un débit réduit.

Le graphique ci-dessous résume les différences entre les technologies

Architecture du réseau LoRa


La plupart des technologies LAN IoT modernes utilisent l’architecture de réseau maillé. En utilisant un réseau maillé, le système peut augmenter la portée de communication et la taille de cellule du réseau.

Toutefois, les nœuds d’un réseau maillé ont la responsabilité supplémentaire de transférer des messages à d’autres nœuds, qui ne leur sont généralement pas utiles. Cela affecte considérablement la vie de la batterie de l’appareil.
LoRaWAN utilise la topologie en étoile afin d’augmenter la durée de vie de la batterie lorsque l’on veut utiliser la connectivité longue distance.

L’architecture de LoRaWan est généralement la suivante

Comme on peut le voir le réseau LoRa est composé de plusieurs éléments:
EndNodes LoRa: Les EndNodes LoRa sont les dispositifs permettant de transmettre les données des capteurs (Température d’une installation, niveau d’eau d’un bassin…). Ces nœuds sont souvent placés à distance ou dans des lieux isolés.
Gateway LoRa (Passerelle Lora): Contrairement aux communications cellulaires dans lesquelles des périphériques mobiles sont associés aux relais transmetteurs, les nœuds LoRaWAN ne sont pas associés à une passerelle spécifique. Toutes les données transmises par le nœud sont envoyées à toutes les passerelles et chaque passerelle recevant un signal le transmet à un serveur relais du réseau.
En règle générale, les passerelles et les serveurs sont connectés via une liaison historique (cellulaire, Wi-Fi, Ethernet ou satellite).
Serveurs concentrateurs: Le serveur concentrateur possède toute l’intelligence. Il filtre les paquets en double provenant de différentes passerelles, vérifie la sécurité et envoie des ACK (Check) aux passerelles. En fin de compte, si un paquet est destiné à un serveur d’applications, le serveur concentrateur l’envoie au serveur d’applications spécifique.
En utilisant ce type de réseau où toutes les passerelles peuvent envoyer le même paquet au serveur de concentrateur et le besoin de transfert intercellulaire est donc supprimé.

Sécurisation du réseau LoRa


Toute technologie de communication prenant en charge de nombreux nœuds connectés nécessite une sécurité complète de bout en bout. LoRa y parvient en mettant en œuvre la sécurité à deux niveaux différents:
1. Un pour le réseau
2. Un pour l’application
La sécurité du réseau garantit l’authenticité du noeud sur le réseau et la sécurité des applications garantit que l’opérateur n’a pas accès aux données d’application de l’utilisateur final.
LoRa utilise les clés de sécurité AES (Advanced Encryption Standard).
Pour atteindre les niveaux de sécurité requis pour les réseaux LoRa, plusieurs couches de cryptage ont été utilisées:
• Clé de réseau unique (EUI64) et assure la sécurité au niveau du réseau
• Une clé d’application unique (EUI64) assure la sécurité de bout en bout au niveau de l’application
• Touche spécifique à l’appareil (EUI128)

Quelques exemples d’application

Une serre connectée et autonome en énergie

  • Récupération des données de production/consommation d’énergie
  • Surveillance du vivant (PH, températures,…)

Surveillance d’un rucher

  • Récupération des données de production/consommation d’énergie
  • Poids de la ruche
  • Fréquence de bourdonnement
  • Température/humidité

Voila, nous avons fini pour la présentation de LoRa, Maintenant nous pouvons passer aux choses sérieuses.

TUTORIEL POUR COMMUNIQUER UNE TEMPÉRATURE A TRAVERS LE RÉSEAU LORA

Pour information, Les sources sont CC-BY-NC-SAhttps://creativecommons.org/licenses/by-nc-sa/3.0/fr/

Pour ce tutoriel, nous aurons besoin du matériel et des logiciels suivants:

  • Un PC équipé du logiciel OpenSource Atom
  • Un microprocesseur Lopy et son antenne (je pars sur une solution toute faite juste pour ce tutoriel mais je reviendrais avec une solution basée sur un Arduino). Voici la présentation détaillé du Lopy https://docs.pycom.io/
  • Une expansion board
  • Un câble MicroUSB
  • Un capteur DTH22
  • Être sûr d’être couvert par au moins une Gateway Lora (Allez sur https://www.thethingsnetwork.org/ pour voir sur la carte interactive si c’est le cas)
  • Le fichier suivant contenant la base du projet

Partie 1) La structure du programme

1) Dézippez sur votre bureau le fichier ‘Lora_Project.zip’
2) Ouvrez Atom
3) Une fois l’éditeur de texte lancé, vous devrez cliquer sur Fichier -> Ajouter un dossier de projet et ouvrir le répertoire de l’étape 1.
4) Maintenant que vous avez créé un projet, nous devons lui ajouter des fichiers. Un projet MicroPython standard a la structure suivante:

• boot.py Il s’agit du premier script qui s’exécute sur votre module lorsqu’il est activé. il est souvent utilisé pour connecter un module à un réseau WiFi afin que Telnet et FTP puissent être utilisés sans se connecter au point d’accès WiFi créé par le module et sans encombrer le fichier main.py. En tant que débutant, vous n’avez pas besoin de modifier le fichier boot.py.
• main.py Ce script s’exécute directement après le fichier boot.py et doit contenir le code principal que vous souhaitez exécuter sur votre appareil.
• lib Il est souvent judicieux de scinder le code réutilisable en bibliothèques.
Si vous souhaitez créer ou utiliser des bibliothèques créées par d’autres personnes, vous devez créer un répertoire lib et y placer les fichiers de bibliothèque. Il est important de placer les fichiers .py directement dans lib plutôt que de créer une arborescence de répertoires. Par défaut, MicroPython ne détectera aucune bibliothèque dans les sous-répertoires.
Pour ce tutoriel, il vous suffira de modifier le fichier main.py.

Partie 2) Connexion au Lopy sans fil (Des fils??? Mais là où nous allons, nous n’avons pas besoin de fils!)

Désolé pour mon humour un peu pourri et pour ceux qui on capté la référence merci pour votre indulgence.

1) Connectez votre PC sur le réseau Wifi de votre Pycom (exemple: lopy-wlan-xxxx)
Le mot de passe est www.pycom.io
2) Dans le coin inférieur droit, cliquez sur Paramètres -> Paramètres généraux et vérifiez si:
L’adresse de l’appareil est 192.168.4.1
Le nom d’utilisateur est micro
Le mot de passe est python
3) Cliquez sur Connecter. Normalement, vous aurez Connecté comme ci-dessous.
Super ça marche!
Maintenant, nous pouvons commencer à programmer votre Lopy
Pour cela, modifiez le fichier main.py comme suit:

 ------------------------------------------------------------
 import pycom
 import time
 ​
 pycom.heartbeat(False)
 ​
 while True:
     pycom.rgbled(0xFF0000)  # Red
     time.sleep(1)
     pycom.rgbled(0x00FF00)  # Green
     time.sleep(1)
     pycom.rgbled(0x0000FF)  # Blue
     time.sleep(1)
  
 ------------------------------------------------------------ 

Sauvegardez avec Ctrl+S

Cliquez sur Packages -> Pymakr -> Synchroniser le projet.
Normalement, votre Lopy commence à clignoter ROUGE / VERT / BLEU

Partie 3) Comment lire la température et l’humidité à partir d’un DTH22

Pour cette partie, vous devez débrancher votre Lopy
1) Connectez le capteur comme suit
GND-> GND
VCC -> VIN
Signal -> G16
2) Remplacez le nom de main.py par main_blink.py
3) Remplacez le nom de mainDHT22.py par main.py
Dans le nouveau fichier, si vous êtes curieux, vous pouvez vérifier comment obtenir et décoder les informations fournies par le DHT22.
4) Maintenant, recherchez et modifiez le seuil de température à 25 ° C
5) Recharger le projet
6) Rebranchez votre Lopy
Et cliquez sur Connecter pour reconnecter votre PC à Lopy (si cela n’aboutit pas, vérifiez votre connexion Wifi, ces petites bêtes sont parfois capricieuses)
7) Cliquez sur Exécuter
Avec le comportement normal, la température de la console est affichée et si vous chauffez le capteur, la couleur du voyant passe au rouge à 25 ° C et au vert en dessous de 25 ° C.

Partie 4) TheThingsNetwork ou Comment récupérer vos données

Dans un premier temps, il faut vous inscrire sur TTN

https://www.thethingsnetwork.org/

Quand vous êtes inscrit et loggé, cliquez sur Console puis Application

Cliquez maintenant sur add application

Remplissez les cases vides comme ci-dessous (c’est un exemple que j’ai fait avec mes étudiants)

La prochaine étape consiste a ajouter un appareil (device) donc cliquez sur register device

Remplissez le Device ID avec un nom du genre lopy_dth22.

Cliquez sur les deux flèches sous le champ Device EUI ce qui le généra de façon automatique

Et finalement cliquez sur Register (Surtout pas sur Cancel car si vous cliquez dessus, vous perdez votre configuration en cours et cela est peu stupide…. Non non je n’ai jamais fait cela… Bon Ok peut-être une fois quand j’étais jeune…)

Normalement vous devriez avoir une nouvelle page avec les indentifiants pour connecter votre Lopy sur le réseau Lora

Gardez votre explorateur internet ouvert et passez maintenant sur Atom

Dans votre projet, changez le nom de main.py en mainDHT22.py puis remplacez le nom de mainLora.py par main.py
Dans le fichier principal, ajoutez les informations fournies précédemment.
Enregistrez et exécutez le programme dans Lopy.
Si tout va bien, dans la console Atom, vous verrez quelque chose comme ci-dessous:

Si cela n’est pas le cas, prenez une bonne respiration et recheckez les informations renseignées.

Maintenant que tout est ok, allez sur TTN (TheThingsNetwork pour les intimes).

Cliquez sur l’onglet Data de votre Device. Normalement vous avez ce genre de chemin

Si la connexion est OK, vous devriez avoir quelque chose comme cela:

Maintenant la réelle question est COMMENT ON DÉCODE CELA!

Calmons nous, prenez une serviette et allez sur l’onglet Payload Formats de Studentgroup, vous aurez ce genre de chemin

Copiez/collez le code suivant dans la fenêtre Decoder

 
 function Decoder(bytes, port) {
   var decoded = {};
   decoded.answerofuniverse = "";
   for(i=0; i<bytes.length; i++){
     decoded.answerofuniverse = decoded.answerofuniverse + String.fromCharCode(bytes[i])
   }
   return decoded;
 } 

Sauvez la configuration avec le bouton save payload functions

Retournez à l’onglet Data de votre Device et vous devriez voir quelque chose comme cela

WOW! Vous avez trouvez la réponse à La grande question sur la vie, l’univers et le reste!!!

(si vous n’avez pas compris la référence, je vous conseille de lire l’excellent bouquin H2G2)

Désolé je digresse, je digresse mais nous devons finir ce tutoriel. Attendez… C’est fini? bon hum ok…

Si vous êtes OK, je vous propose de travailler à votre tour et de merger le code du DHT22 et le code pour envoyer une information sur le réseau Lora.

(PS: le code final est celui dans le dossier lib. Il suffit de copier/coller et renommer some_library.py à la place du main.py)

J’espère que vous avez aimé ce tutoriel et n’hésitez pas à m’envoyer des commentaires ou des remarques pour l’améliorer.

Bonne journée,

Ferrader