2023-06-13 19:26:19 +04:00
2023-06-13 18:56:47 +04:00
2023-06-13 14:59:57 +00:00

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, laffichage et le contrôle des actionneurs via une page web. Il communiquera avec les ESP par wifi.
  • Deux ESP32. Lun utilisera microPython, lautre lIDE arduino.
  • Le premier ESP disposera dun capteur sur liaison I2C ainsi quune led et un écran LCD.
  • Le deuxième ESP disposera dun capteur, dun servo-moteur et dun écran OLED.

Chaque ESP transmettra ses données au RPI (alimentation de la base de données+affichage sur page web simple), affichera certaines dentre elles sur lécran qui lui est connecté et modifiera létat de lactionneur en fonction des données captées ou sur ordre de lutilisateur.

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 dexploitation

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 dexploitation puis lavons 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 litem 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 luser 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 nest pas nécessaire de spécifier l'adresse IP avec le -h cela est fait automatiquement en localhost)

Afin dajouter 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 dune 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 :

http://@192.168.1.75:1880

Voici le schéma Node Red:

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

Voici les propriétés de ce bloc :

Le serveur étant hébergé sur le serveur MQTT, on utilise ladresse locale pour le serveur, on écoute le topic /capteur/dht22. Le bloc JSON convertit les entrées en objet javascript ce qui permettra dutiliser le bloc « fonction » (voir figure 4) afin denvoyer 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 à laffichage 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 dajouter un template html dans notre cas un simple tableau

Nous pouvons visualiser le résultat via le lien :

http://@192.168.1.75:1880/ui

Réalisation

Nous avons quun 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 dhumidité 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 dune 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 lavancement car plus aucun port COM était reconnu par Thonny et par Arduino IDE. Après plusieurs restaurations aux paramètres dusines 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 nest plus fonctionnel. Le temps perdu dans ces dépannages à freiner lavancement du projet. Donc nous avons mis en place les services en délaissant la carte Arduino. Les programmes des autres capteurs nont 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 linstallation des différents services. Le problème nest plus survenu après une réinstallation

Conclusion

Nous avons un système capable de mesurer la température et le taux dhumidité dans lair, 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 navons pas atteint tous les objectifs demandés.

Description
Mise en place d'un site donnés accès à une base de donnés récupéré sur un capteur.
Readme 1,011 KiB
Languages
Python 100%