IMA5 2021/2022 P15 : Différence entre versions

De Wiki de Projets IMA
(Prise en main et test du réseau LoRa)
(Récupération des données du LNS pour la base de données)
 
(48 révisions intermédiaires par le même utilisateur non affichées)
Ligne 4 : Ligne 4 :
 
* '''Superviseur du projet :''' Alexandre Boé & Thomas Vantroys
 
* '''Superviseur du projet :''' Alexandre Boé & Thomas Vantroys
 
* '''Durée :''' 06 SEP 2021 - 24 JAN 2022
 
* '''Durée :''' 06 SEP 2021 - 24 JAN 2022
 +
* '''GIT :''' https://archives.plil.fr/Selim/ProjetPI.git
  
 
==Objectif==
 
==Objectif==
Ligne 41 : Ligne 42 :
  
 
==Cahier des spécifications==
 
==Cahier des spécifications==
 +
 +
==Matériels mis à disposition==
  
 
==Prise en main et test du réseau LoRa==
 
==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.
 
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 :
 
Elle est composé de différentes entités :
Ligne 52 : Ligne 57 :
 
* <p align="justify">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.</p>
 
* <p align="justify">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.</p>
  
Pour savoir si le Network Server qui a été mis en place est toujours fonctionnel, un module GPS LoRa est utilisé pour voir s'il est fonctionnel ou non. Pour le tester, on se connecte au Server Network (172.26.189.22:8000), on crée une nouvelle application et ajoute l'auipement 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.
+
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".
 
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
 
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.
 +
 +
[[Fichier:Trame_Capteur.png|center|700px]]
 +
 +
Explication :
 +
 +
* <p align="justify"> La trame commencera toujours par 0xFF et se terminera par 0x00.</p>
 +
* <p align="justify"> Dans "Type", il y aura différentes valeurs selon le type de capteur (0xAA : TMP, 0xBB : H2S, 0xCC : CO2).</p>
 +
 +
Cette trame sera envoyé via une fonction établi dans le fichier "lora_app.c".
 +
 +
==Interface graphique==
 +
 +
L'application web permet de visualiser les données des capteurs d'une ou plusieurs stations environnementaux émettrices, elle est 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'utilise 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 comporte 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 regroupe 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", on a mis 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 :
 +
 +
[[Fichier:mqtt_fonctionnement.png|600px|center]]
 +
 +
====Application web====
 +
 +
L'application développée comporte 3 catégories :
 +
 +
* <p align="justify">Guide : Il guide l'utilisateur sur l'intégration d'une station de capteurs jusqu'à sa visualisation sur l'application web.</p>
 +
* <p align="justify">Station : Il montre les stations de capteurs disponible sur le réseau et informera l'état dans lesquelles elles se trouvent.</p>
 +
* <p align="justify">Contact : Il indique à l'utilisateur les personnes à contacter s'il a des questions pertinentes.</p>
 +
 +
Il y a également un menu déroulant qui permet le management des stations, il comporte 3 catégories:
 +
 +
* <p align="justify">Ajouter une station : Il permet l'ajout d'une station pour la visualiser sur le réseau.</p>
 +
* <p align="justify">Supprimer une station : Il permet la suppression d'une station de l'application.</p>
 +
* <p align="justify">Gérer l'état d'une station : Il permet de gérer l'état d'une station sélectionnée.</p>
 +
 +
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/.

Version actuelle datée du 24 janvier 2022 à 21:30

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.

Trame Capteur.png

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 permet de visualiser les données des capteurs d'une ou plusieurs stations environnementaux émettrices, elle est 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'utilise 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 comporte 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 regroupe 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", on a mis 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 :

Mqtt fonctionnement.png

Application web

L'application développée comporte 3 catégories :

  • Guide : Il guide l'utilisateur sur l'intégration d'une station de capteurs jusqu'à sa visualisation sur l'application web.

  • Station : Il montre les stations de capteurs disponible sur le réseau et informera l'état dans lesquelles elles se trouvent.

  • Contact : Il indique à l'utilisateur les personnes à contacter s'il a des questions pertinentes.

Il y a également un menu déroulant qui permet 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/.