Mini projet de réseau de capteurs
Introduction
Le but de cette SAE est de mettre en pratique les connaissances acquises pendant les ressources de IOM. Les consignes qui nous ont été données sont les suivantes :
- Un routeur Wifi est mis à la disposition de tout le groupe.
- Notre binôme dispose de :
- Un Raspberry PI sur lequel devra être installé un serveur web, une BdD et un serveur MQTT. Ce RPI récupérera les données, gèrera le stockage, l’affichage et le contrôle des actionneurs via une page web. Il communiquera avec les ESP par wifi.
- Deux ESP32. L’un utilisera microPython, l’autre l’IDE arduino.
- Le premier ESP disposera d’un capteur sur liaison I2C ainsi qu’une led et un écran LCD.
- Le deuxième ESP disposera d’un capteur, d’un servo-moteur et d’un écran OLED.
Chaque ESP transmettra ses données au RPI (alimentation de la base de données+affichage sur page web simple), affichera certaines d’entre elles sur l’écran qui lui est connecté et modifiera l’état de l’actionneur en fonction des données captées ou sur ordre de l’utilisateur.
Ce rapport est donc un bilan du déroulement de notre projet.
Spécificité des capteurs
BMP280
Caractéristiques | Ordre de grandeur |
---|---|
Alimentation | 3.3 à 5V |
Plage de mesures | 300 à 1100 hPa / 0 à 65 °C |
Précision | ±0.12 hPa / ±0.01 °C |
Protocole | I2C |
Tableau 1: BMP280 Capteur de pression et de températures
MQ-2
Caractéristiques | Ordre de grandeur |
---|---|
Alimentation | 5V |
Humidité de fonctionnement | <95% |
Plage de mesures | Propane : 200ppm-5000ppm / Butane : 300ppm-5000ppm / Méthane : 5000ppm-20000ppm / H2 : 300ppm-5000ppm / Alcool : 100ppm-2000ppm |
Protocole |
Tableau 2: MQ-2 Capteur de gaz
DS18B20
Caractéristiques | Ordre de grandeur |
---|---|
Alimentation | 3 à 5V |
Plage de mesures | -55 à 125 °C |
Précision | ±0.5 °C |
Protocole | OneWire |
Tableau 3: DS18B20 sonde de température
DHT22
Caractéristiques | Ordre de grandeur |
---|---|
Alimentation | 3.3 à 6V |
Plage de mesures | -40 à 80 °C / 0 à 100% |
Précision | ±0.5 °C / ±2% |
Tableau 4: DHT22 capteur température et humidité
Ecran SSD1306
Caractéristiques | Ordre de grandeur |
---|---|
Alimentation | 3.3 ou 5Vcc |
Consommation | 25mA |
Ecran | Oled 0.96 |
Résolution | 128x64 pixels |
Protocole | I2C |
Tableau 5: écran OLED
Raspberry Pi
Système d’exploitation
Le raspberry que nous utilisons est un raspberry pi 3 modèle b version 1.2
Caractéristiques | Valeurs |
---|---|
Mémoire Ram | 1 Go |
Vitesse du processeur | 1.2GHz |
Carte réseaux | 802.11 bgn Wireless LAN and Bluetooth 4.1 (Bluetooth Classic and LE) |
Le but de cette raspberry est de récolter des données afin de les afficher sur un site internet. Nous allons donc mettre en place des serveurs SQL, MQTT et Web. Nous avons fait le choix de Dietpi pour sa praticité et ses menus. Nous avons donc téléchargé le système d’exploitation puis l’avons installé via Raspberry Pi Imager. Après avoir installé on altère le fichier diet.txt tel que :
AUTO_SETUP_NET_ETHERNET_ENABLED=0
AUTO_SETUP_NET_WIFI_ENABLED=1
AUTO_SETUP_NET_USESTATIC=1
AUTO_SETUP_NET_STATIC_IP=192.168.80.160
AUTO_SETUP_NET_STATIC_MASK=255.255.255.0
AUTO_SETUP_NET_STATIC_GATEWAY=192.168.80.153
AUTO_SETUP_DHCP_TO_STATIC=1
Puis enregistrer.
Ensuite dans la même partition modifier le fichier dietpi-wifi.txt :
aWIFI_SSID[0]='WifiSAE'
aWIFI_KEY[0]='12345678910'
ssh dietpi@ip
mdp : dietpi
Installation des services
Changer de réseaux était quelque chose qui a souvent dû être fait pour avoir accès soit à Internet soit au Raspberry Pi
Pour changer de wifi il faut faire la commande :
sudo dietpi-config
Puis sélectionner l’item suivant sur le menu :
7 : Network Options: Adapters
Puis on sélectionne le wifi et dans "scan" (On configure au préalable le DHCP) et on entre le mode de passe.
SQL
Il faut utiliser la commande sudo mysql_secure_installation qui permet de configurer l’user root et de rendre la base de données plus sécurisé. Afin de se connecter à la base de données on utilise
mysql -u root -p
(Il n’est pas nécessaire de spécifier l'adresse IP avec le -h cela est fait automatiquement en localhost)
Afin d’ajouter l'utilisateur "brocolis" à la base de données :
GRANT ALL PRIVILEGES ON *.* TO 'brocolis'@'localhost' IDENTIFIED BY 'brocolis';
Pour actualiser les privileges :
FLUSH PRIVILEGES;
Pour créer la base de données on utilise la commande suivante :
CREATE DATABASE brocolis;
Afin de créer une table il nous sélectionner une base de données :
USE brocolis
Voici un exemple de d’une table contenant les entrées du capteur dht22 :
CREATE TABLE dht22 (
dht22_id INT AUTO_INCREMENT PRIMARY KEY,
temp FLOAT,
hum FLOAT,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
MQTT
Pour ajouter l'utilisateur brocolis au serveur mqtt
sudo mosquitto_passwd -c /etc/mosquitto/passwd brocolis
On redémarre le service avec
sudo systemctl restart mosquitto
Pour la configuration mosquitto on supprime tout dans le /etc/mosquitto/mosquitto.conf et on remplace par:
allow_anonymous false
password_file /etc/mosquitto/passwd
listener 1883
Serveur web :
Pour mettre en lien les différents services, nous avons fait le choix de Node Red. Sa prise en main est plutôt longue mais son interface graphique rappelant scratch nous a fait pencher vers ce choix.
Pour accéder a Node Red, nous avons le lien ci-dessous à entrer en étant connecté sur le réseau PT4ObjConnect :
Voici le schéma Node Red:

Ce bloc est un « MQTT in » il permet de recevoir les données d’un topic MQTT.

Voici les propriétés de ce bloc :

Le serveur étant hébergé sur le serveur MQTT, on utilise l’adresse locale pour le serveur, on écoute le topic /capteur/dht22. Le bloc JSON convertit les entrées en objet javascript ce qui permettra d’utiliser le bloc « fonction » (voir figure 4) afin d’envoyer les données en SQL.

Ce bloc représente la base de données utilisé qui se nomme « brocoli » :

Les blocs bleus sont des widgets et servent à l’affichage sur le dashboard. En cliquant en haut à droite on peut éditer le dashboard en créant des groupes de widget. Dans notre cas tous les widgets sont dans le même groupe.
· Humidité et température sont des gauges
· Template permet d’ajouter un template html dans notre cas un simple tableau
Nous pouvons visualiser le résultat via le lien :

Réalisation
Nous avons qu’un capteur qui fonctionne ainsi que l’écran OLED SSD1306, le programme « main » fonctionne tel que dès que la carte est alimentée il affichera le taux d’humidité et la température sur l’écran OLED et se connectera directement à la box. Les données seront envoyées toutes les 5 secondes sur le topic capteur/dht22. Le programme est construit à partir de la ressource R3IOM17 et de documentation en ligne. Le dht22 a besoin d’une résistance de 10kΩ pour fonctionner. Tout les composant sont alimentés en 3.3V sous le conseil de notre professeur.

Difficultés
Le changement de carte programmable :
Nous avons commencé le projet avec des cartes temporaires après avoir été avec les cartes définitives une mise à jour Windows à freiner l’avancement car plus aucun port COM était reconnu par Thonny et par Arduino IDE. Après plusieurs restaurations aux paramètres d’usines pour ensuite tester différentes versions de micro-python. La plus récente version de micro-python a pu fonctionner. Après avoir tester le branchage nous avons détecté des fils défectueux mais aussi constater que le capteur DS18B20 n’est plus fonctionnel. Le temps perdu dans ces dépannages à freiner l’avancement du projet. Donc nous avons mis en place les services en délaissant la carte Arduino. Les programmes des autres capteurs n’ont pas été trouvés en micro-python.
La liaison entre les 3 services
Cette partie contrairement à la précédente explique les difficultés rencontrées avec une phase réussite du projet. Le Raspberry pi avait un problème à rester connecté sur un réseau. Cela a rendu difficile l’installation des différents services. Le problème n’est plus survenu après une réinstallation
Conclusion
Nous avons un système capable de mesurer la température et le taux d’humidité dans l’air, ces données ont 2 moyens d’être communiqué à un utilisateur via un écran et un site internet. Nous avons donc couvert les couches collectes jusqu’à la couche de valorisation
Mais nous n’avons pas atteint tous les objectifs demandés.