mini-IOT/README.md
2023-06-10 18:00:30 +02:00

202 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Mini réseau d'objets connectées
<img src="./Images/iot-logo.png" align="right" width="50">
Projet Universitaire, ayant pour but de créer un mini réseaux d'objets connectées.
## Sommaire
- [Matériels utilisés](#matériels-utilisés)
- [Mise en œuvre des matériels](#mise-en-oeuvre-des-matériels)
## Matériels utilisés
| Aperçu | Quantité | Matériel | Description |
| ------------------------------------------- | -------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <img src="Images/rpi3.png" width="90"> | 1 | RPI3 | Ce mini ordinateur a été utilisé comme serveur central pour le projet. Il est équipé dun processeur quad-core Cortex-A53 à 1,2 GHz, 1 Go de mémoire RAM et dun slot pour carte SD. Il a été utilisé pour installer un serveur web, une base de données et un serveur MQTT. |
| <img src="Images/carte-sd.png" width="100"> | 1 | Carte micro SD 32Go | Cette carte SD a été utilisée pour stocker lOS et les données du projet. |
| <img src="Images/esp32.png" width="100"> | 2 | ESP32 Wemos D1 | Ces modules de communication sans fil ont été utilisés pour connecter les capteurs et les actionneurs au Raspberry PI. Ils disposent dun processeur 32 bits, dune mémoire flash intégrée et dun module WiFi intégré. Lun des ESP a été programmé en utilisant microPython, lautre en utilisant lIDE Arduino. |
| <img src="Images/bme680.png" width="100"> | 1 | Capteur BME680 | Ce capteur a été utilisé pour mesurer la température, lhumidité, la pression atmosphérique et la qualité de lair. Il se connecte via liaison I2C et a une précision de ±1 % pour la température et lhumidité et de ±1 hPa pour la pression atmosphérique. |
| <img src="Images/moteur.png" width="100"> | 1 | Servo-moteur | Ce moteur a été utilisé pour être actionné. Il est capable de fonctionner dans une plage de tension de 4,8 à 6 V et peut être commandé avec une précision de 0,1 degré. |
| <img src="Images/ssd.png" width="90"> <img src="Images/lcd.png" width="100"> | 2 | 1 écran SSD1306 + 1 écran LCD | Ces écrans ont été utilisés pour afficher des données captées par les capteurs et des informations supplémentaires. Lécran OLED SSD1306 est un mini écran OLED monochrome via liaison I2C, tandis que lécran LCD est un écran à cristaux liquides de 2 lignes x 16 caractères et se faisant par liaison on série. |
| <img src="Images/plaque-essai.png" width="100"> | 2 | Plaques dessais | Ces plaques dessais ont été utilisées pour connecter les composants électroniques pour les tests et pour lassemblage de la maquette. |
| <img src="Images/resistance.png" width="100"> | 2 | Résistances | Ces résistances ont été utilisées pour protéger les composants électroniques contre les surintensités. |
| <img src="Images/led.png" width="80"> | 1 | LED | Cette LED a été utilisée pour indiquer létat de certaines fonctions. |
## Mise en oeuvre des matériels
### Maquette
<img src="./Images/maquette.png" width="600">
### Aperçu en vrai
<img src="./Images/img-all.jpg" width="500">
### Configuration de la box Wifi
Sur la face arrière de la box wifi qui nous a été fournie pour ce projet, nous avons découvert
ladresse IP de la box (192.168.1.50) ainsi que les identifiants de connections pour accéder
à la page dadministration de cette box (identifiant : admin) et sans mots de passe. Étant
donné que cette box avait une configuration par défaut assez complet pour un réseau, nous
navions pas grand-chose à configurer. Ce que nous avons configuré était le mot de passe
wifi du SSID ”PT4ObjConnect” que nous avons remplacé par ”Admin2022” et avons activé
le DHCP avec une plage dadresse allant de ”192.168.1.30” à ”192.168.1.200” qui était
désactivé par défaut.
### Configuration du Raspberry PI
Afin de configurer le Raspberry PI, nous avons utilisé lOS DietPi dû à sa légèreté et sa
simplicité dutilisation. Pour installer Dietpi sur le RPI, il faut dabord flasher lOS sur une
carte SD avec le logiciel RPI-Imager :
<img src="./Images/rpi-imager.png" width="500" alt="Logiciel RPI-Imager">
Avant de connecter le RPI au wifi de la box, nous avons créé un partage de connexion
à laide dun téléphone portable ayant accès à internet (étant donné que la box na pas
accès à internet et que nous en avons besoin afin dinstaller des logiciels sur le RPI). Nous
avons également utilisé un PC portable (sous Linux) connecté au téléphone par Wifi afin
de configurer le Raspberry PI par SSH. Sur le PC portable, pour connaitre la passerelle par
défaut de ce réseau créé par le téléphone, nous avons relevé la passerelle par défaut avec
la commande ”ip r” :
<img src="./Images/ip-r.png" width="500" alt="Passerelle par défaut du PC portable">
Pour commencer, avant de démarrer le RPI, nous avons créé un fichier ”ssh” vide dans la
partition contenant la racine de lOS afin dactiver le service ssh au démarrage du RPI.
Et dans la deuxième partition (en FAT) nous avons modifié le fichier dietpi.txt afin dactiver la carte wifi et configurer le Raspberry PI avec une adresse IP statique. Les lignes que nous
avons modifiées dans le fichier dietpi.txt sont les suivantes :
```Bash
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
```
Ensuite, pour que le Raspberry PI se connecte au wifi du téléphone, nous avons modifié le
fichier dietpi-wifi.txt avec les informations suivantes :
```Bash
aWIFI_SSID [0]= ' WifiSAE '
aWIFI_KEY [0]= '12345678910 '
```
Une fois le Raspberry PI alimenté, il se connecte en quelques secondes au réseau wifi. Nous
pouvons nous y connecter par ssh en utilisant la commande :
```Bash
ssh dietpi@192.168.80.160
```
Avec le mot de passe par défaut ”dietpi”. Ce qui nous retourne cette interface une fois
connecté :
<img src="./Images/ssh.png" width="500" alt="Interface daccueil de Dietpi">
Afin de mettre à jour le système, nous avons utilisé la commande :
```Bash
sudo dietpi-update
```
Pour installer les différents services nécessaires pour ce projet sur le Raspberry PI, nous
avons utilisé la commande :
```Bash
sudo dietpi-software
```
Et avons sélectionné loption ”search software” pour rechercher les logiciels MariaDB, Mosquitto et Node-RED, et les avons ensuite sélectionnés pour les installer :
<img src="./Images/software.png" width="500" alt=" Interface de Dietpi-Software">
Pour configurer le serveur MQTT, nous avons modifié le fichier ”/etc/mosquitto/mosquitto.conf” pour supprimer tout son contenu et le remplacer par :
```Bash
allow_anonymous false
password_file /etc/ mosquitto /passwd
listener 1883
```
Nous avons ensuite ajouté un utilisateur en utilisant la commande ”sudo mosquitto_passwd
-c /etc/mosquitto/passwd patate” et avons redémarré le service MQTT avec ”sudo systemctl restart mosquitto”. Si jamais un utilisateur a été créer par erreur et que vous voulez
le supprimer, par exemple lutilisateur ”username” il suffit dexécuter la commande suivante : ”sudo mosquitto_passwd -d /etc/mosquitto/passwd username”.
Afin de configurer la base de données MariaDB, nous avons utilisé la commande permettant
de configurer lutilisateur root et dassurer la sécurité de la base de données :
```Bash
sudo mysql_secure_installation
```
Pour se connecter à la base de données, nous avons en utilisé la commande ”mysql -u root
-p” puis avons ajouté lutilisateur ”patate” en utilisant la commande afin de lui donner tous
les privilèges :
```Bash
GRANT ALL PRIVILEGES ON . TO 'patate '@'localhost ' IDENTIFIED BY 'patate ';
```
Nous avons ensuite utilisé la commande ”FLUSH PRIVILEGES” pour prendre en compte les
nouveaux privilèges.
Pour configurer Node-RED, nous avons dans un premier temps utilisé la commande
”sudo systemctl enable nodered.service” afin dactiver le service Node-RED au démarrage.
À la suite de son installation, Node-RED était disponible à ladresse IP de notre Raspberry
PI sur le port 1880. Concernant Node-RED, cest un environnement de programmation visuel open-source basé sur Node.js qui permet de créer des flux de données et des applications IoT en utilisant des blocs graphiques. Il facilite la création de protocoles de communication, la manipulation de données et la création dinterfaces utilisateur en utilisant des nœuds prédéfinis ou personnalisés. Il est souvent utilisé pour connecter des périphériques IoT, des services en nuage et des applications web. Il est également possible dajouter des
fonctionnalités supplémentaires en utilisant des modules additionnels.
Pour ajouter des fonctionnalités supplémentaires à Node-RED, nous avons installé les modules node-red-dashboard et node-red-node-mysql en utilisant le gestionnaire de paquets
de Node-RED. Pour installer les modules Node-RED Dashboard et Node-RED Node-MySQL,
nous avons utilisé les commandes suivantes dans le terminal de notre Raspberry PI :
```Bash
cd /mnt/ dietpi_userdata /node -red/
npm install node -red - dashboard
npm install node -red -node -mysql
```
La première commande permet de se rendre dans le répertoire de Node-RED, et la seconde
et la troisième commandes permettent respectivement dinstaller les modules Node-RED
Dashboard et Node-RED Node-MySQL. Une fois les modules installés, ils deviennent disponibles dans les palettes de nœuds de Node-RED et peuvent être utilisés pour créer des
tableaux de bord et des requêtes SQL directement depuis Node-RED. Le module node-red-
dashboard a été utilisé pour créer des tableaux de bord pour afficher les données des capteurs en temps réel. Le module node-red-node-mysql a été utilisé pour stocker les données
des capteurs dans une base de données MySQL sur le Raspberry PI. Ces modules ont été
installés en utilisant les commandes npm depuis le terminal.
En utilisant ces modules, nous avons pu créer des flux de données pour collecter les données
des capteurs, les stocker dans une base de données MySQL et les afficher sur des tableaux
de bord en utilisant Node-RED. Cela nous a permis de visualiser les données des capteurs
en temps réel et de stocker les données pour une analyse ultérieure.
Pour vous donner une idée de notre flux final sur Node-RED, voici une image de notre flow
final :
### Aperçu interface web
<img src="./Images/web-1.png" width="250"> <img src="./Images/web-2.png" width="250">