IMA5 2021/2022 P15
Sommaire
Présentation générale
- Nom du projet : Mise en place d'un réseau de capteurs environnementaux
- Réalisé par : Selim Bensalem
- Superviseur du projet : Alexandre Boé & Thomas Vantroys
- Durée : 06 SEP 2021 - 24 JAN 2022
- GIT : https://archives.plil.fr/Selim/ProjetPI.git
Objectif
L'objectif du projet est de mettre en place un réseau de capteurs environnementaux qui utilisera le réseau LoRa déjà déployé au sein de l’école. Également, il a pour but de fournir, pour les années suivantes, des travaux pratiques pour les enseignants et/ou une idée de poursuite d’étude sur le sujet pour les chercheurs.
Description
La qualité de l’air intérieur est une donnée environnementale très importante puisque nous passons de nombreuses heures en intérieurs et que les polluants ont tendance à s’accumuler (manque d’aération, dégazage du mobilier, ...). La crise de Covid-19 a encore mis l’accent sur la nécessité de surveiller l’état de l’air intérieur.
Nous proposons dans ce projet de réaliser un réseau de capteurs environnementaux pour l’intérieur. Le réseau de capteurs comportera :
• Des capteurs autonomes portables limités en nombre de paramètres mesurés ;
• Des stations plus complexes embarquant de nombreux capteurs environnementaux ;
• Une passerelle LoRaWAN (déjà installée sur le toit de Polytech Lille).
Il conviendra de :
• Réutiliser le réseau LoRaWAN déjà mis en place ;
• Réaliser des capteurs ;
• Développer une interface de visualisation et de gestion.
Travail effectué
Cahier des charges
Cahier des spécifications
Matériels mis à disposition
Prise en main et test du réseau LoRa
Le groupe précédent a mis en place un réseau LoRa en configurant deux machines virtuelles, l'une qui héberge le Network Server (VM Lorawan) et l'autre qui héberge le serveur applicatif constitué de l'application web (VM Lorap), les configurations du réseau LoRa se sont faites grâce à une implémentation open-source Lorawan Network Server appelé Chirpstack.
Réseau LoRa
Elle est composé de différentes entités :
-
Gateway-bridge : Collecte les données issues des passerelles Kerlink qui les convertit en format JSON.
-
Network Server : Fait le lien entre le serveur applicatif et les end-devices (station de capteurs).
-
Application Server : Gère le chiffrement de données, demande d'adhésion au réseau et dispose d'une interface graphique de configuration du réseau.
Pour savoir si le Network Server qui a été mis en place est toujours fonctionnel, un module GPS LoRa est utilisé. Pour le tester, on se connecte au Network Server (172.26.189.22:8000), on crée une nouvelle application et ajoute l'équipement qui est notre module GPS. On génère deux clefs, une "application key" et une "network key", qui ne faudra pas oublier de mettre manuellement dans le module GPS en le connectant à notre ordinateur via son logiciel. L'appareil dispose d'un EUI qu'il faudra renseigner, grâce à celui-ci, il sera directement reconnu par le Network Server.
Résultat du test : Le module GPS est bien reconnu par le Network Server donc il est toujours fonctionnel, par contre, le problème rencontré est que la trame n'est pas visible dû à un problème affichant "Not connected to Websocket API".
Pour régler le problème du "Not connected to Websocket API", il ne faut pas oublier de désactiver le proxy pour l'adresse 172.26.189.22:8080
Architecture du réseau
Développement du firmware
Ne pouvant pas récupérer les codes sources de la station de capteurs du groupe précédent, il est nécessaire de recréer une station et donc de développer le firmware de la carte Nucléo 64.
Communication entre la carte Nucléo et Réseau LoRa
Le développement du firmware se fera sur STM32CubeIDE, pour qu'il y ai une communication entre la carte Nucléo 64 et le réseau LoRa de l'école, un module LoRa (Shield SX1276MB1MAS) est rattaché à la carte. Il est nécessaire d'utiliser une bibliothèque nommée I-CUBE-LRAWAN (https://www.st.com/en/embedded-software/i-cube-lrwan.html), pour établir la connexion avec le réseau LoRa, un tutoriel explique une façon de faire sur comment établir cette connexion, il a été nécessaire de faire quelques modifications sur ce tuto (https://www.youtube.com/watch?v=np6oYopJyFI). Une fois les réglages terminés, j'ai réussi à connecter la carte Nucléo au réseau LoRa et on voit bien les paquets envoyés/reçus sur l'application du LNS.
STM32CubeIDE
Maintenant, le développement du firware peut être réalisé, ce logiciel est nouveau pour moi donc pour savoir l'utiliser, j’apprends au travers de tuto trouvé sur internet. Via la bibliothèque I-Cube-lrwan, j'ai su connecter ma station de capteurs à mon réseau LoRa mais comme cette bibliothèque ne possède pas de fichier .ioc, je reste limité dans l'implémentation des capteurs. Pour le moment, j'ai mis de côté cette bibliothèque et je me suis concentré sur l'implémentation des capteurs sur la station via le logiciel STM32CubeIDE. J'ai réussi à connecter le capteur de température en connexion I2C, à connecter le capteur H2S en connexion ADC mais je rencontre, en ce moment, un problème concernant le capteur de CO2 en connexion USART.
Une fois que les capteurs fonctionnent et me retourne leurs valeurs, j'ai repris la bibliothèque I-Cube-lrwan et introduit, dans les fichiers dédiées à chaque type de communication, le code fait indépendamment de cette bibliothèque. Malgré de nombreuses tentatives de fonctionnement de ses capteurs, ils ne s'activent pas. Les communications sont toutes occupées malgré que la bibliothèque n'utilise pas ses connexions.
Format de trame
Malgré les nombreux aléas rencontrés, rien n'empêche la mise en forme de la trame de données à envoyer sur notre réseau LoRa car on pourra toujours adapter notre station de capteurs en fonction de la trame de données que l'on veut mettre en place. Un format de trame a été proposé par le groupe de l'année dernière, je me suis permis de le reprendre car il correspond parfaitement à ce dont j'ai besoin pour pouvoir développer mon interface graphique.
Explication :
-
La trame commencera toujours par 0xFF et se terminera par 0x00.
-
Dans "Type", il y aura différentes valeurs selon le type de capteur (0xAA : TMP, 0xBB : H2S, 0xCC : CO2).
Cette trame sera envoyé via une fonction établi dans le fichier "lora_app.c".
Interface graphique
L'application web permettra de visualiser les données des capteurs d'une ou plusieurs stations environnementaux émettrices, elle sera développée et déployée sur la VM Lorap qui a été configurer spécialement pour l'application. Pour avoir accès à la VM Lorap, il faut se connecter à une zabeth de Polytech-lille et se connecter en ssh (mdp : glopglop) avec la commande :
ssh root@lorap.plil.info
Création de la base de données
Une base de données est nécessaire pour pouvoir stocker les valeurs de capteurs de la station, plusieurs étapes ont été nécessaire pour la mettre en place. J'utiliserai PostegreSQL pour le développement de cette base de données, il est gratuit et très facile à prendre en main. Pour avoir accès à la base de données, il faut utiliser les commandes suivantes depuis la VM Lorap :
su - postgres
La connexion étant établit, il faut se connecter sur la base qui nous intéresse nommée "db_pi" :
psql db_pi
Il faut savoir que l'utilisateur de la base se nomme "user_pi" et le mot de passe est "glopglop".
On a deux tables importante pour le fonctionnement de notre application :
liste_stations, elle comportera la liste des stations émettrices disponible avec leur numéro EUI, leur nom ainsi que leur état.
CREATE TABLE IF NOT EXISTS liste_stations(DevEUI_station VARCHAR(50) NOT NULL, Status INT NOT NULL, PRIMARY KEY(DevEUI_station));
data_stations, elle regroupera toutes les données des capteurs des stations émettrices avec le numéro EUI de la station, la date et l'heure de l'envoi ainsi que le type de capteur avec sa valeur correspondante.
CREATE TABLE IF NOT EXISTS data_stations(Indice SERIAL, DevEUI_station VARCHAR(50) NOT NULL, Time TIMESTAMP WITH TIME ZONE NOT NULL, Type VARCHAR(50) NOT NULL, Value DOUBLE PRECISION NOT NULL, PRIMARY KEY(Indice), CONSTRAINT fk_liste_stations FOREIGN KEY(DevEUI_station) REFERENCES liste_stations(DevEUI_station));
PS : Une troisième table nommée "data_station_test" est mis en place pour les test de l'application.
Récupération des données du LNS pour la base de données
Pour pouvoir obtenir les données du "Network Server", il faut mettre en place un bus MQTT pour pouvoir récupérer les données et les mettre dans la base correspondante nommée "data_stations". Le protocole MQTT s'abonne à notre réseau LoRa et récupère les données des capteurs reçues, ensuite, il transmet les données sur notre base qui se situe sur la machine virtuelle où est déployé notre protocole.
Voici le fonctionnement en image du protocole MQTT :
Ce protocole se lance automatiquement à chaque lancement de la machine virtuelle et tourne en fond grâce à un conteneur docker.
Application web
L'application développée comporte 3 catégories :
-
Guide : Il guidera l'utilisateur sur l'intégration d'une station de capteurs jusqu'à sa visualisation sur l'application web.
-
Station : Il montrera les stations de capteurs disponible sur le réseau et informera l'état dans lesquelles elles se trouvent.
-
Contact : Il indiquera à l'utilisateur les personnes à contacter s'il a des questions pertinentes.
Il y aura également un menu déroulant qui permettra le management des stations, il comporte 3 catégories:
-
Ajouter une station : Il permet l'ajout d'une station pour la visualiser sur le réseau.
-
Supprimer une station : Il permet la suppression d'une station de l'application.
-
Gérer l'état d'une station : Il permet de gérer l'état d'une station sélectionnée.
Pour avoir accès à l'application web, il faut être connecté d'une zabeth et aller sur l'adresse IP http://172.26.189.24/.