Mini réseau d'objets connectés

Aperçu

Sommaire
- Matériels utilisés
- Mise en œuvre des matériels
Matériels utilisés
Le mini réseau d'objets connectés a été mis en place en utilisant les composants matériels suivants :
Mise en oeuvre des matériels
La mise en œuvre du mini réseau d'objets connectés comprend les étapes suivantes :
- Configuration du Raspberry Pi : Le Raspberry Pi est configuré en tant que nœud central du réseau.
- Installation et configuration de Node-RED : Node-RED est installé sur le Raspberry Pi pour faciliter la gestion des données captées par les capteurs.
- Création du flux Node-RED : Un flux Node-RED est créé pour traiter les données captées par les capteurs.
- Configuration des ESP32 : Les ESP32 sont configurés pour capturer les données environnementales à l'aide de capteurs connectés à eux. Cela est réalisé en utilisant des programmes écrits en langage C et MicroPython.
Maquette

Configuration de la box Wifi
Pour la configuration de la box WiFi fournie dans le cadre de ce projet, nous avons suivi les étapes suivantes :
-
Sur la face arrière de la box WiFi, nous avons identifié l'adresse IP de la box, qui était 192.168.1.50. Nous avons également trouvé les identifiants de connexion pour accéder à la page d'administration de la box : l'identifiant était "admin" et il n'y avait pas de mot de passe requis.
-
Étant donné que la box avait une configuration par défaut assez complète pour un réseau, nous n'avions pas besoin de configurer grand-chose. Cependant, nous avons modifié le mot de passe du réseau WiFi du SSID "PT4ObjConnect" en le remplaçant par "Admin2022".
-
Nous avons également activé le service DHCP, qui était désactivé par défaut, en configurant une plage d'adresses allant de "192.168.1.30" à "192.168.1.200". Cette plage d'adresses permettrait au routeur de fournir automatiquement des adresses IP aux appareils connectés à la box WiFi.
Configuration du Raspberry PI
Afin de configurer le Raspberry Pi, nous avons utilisé l'OS DietPi en raison de sa légèreté et de sa simplicité d'utilisation. Voici les étapes que nous avons suivies :
Flasher l'OS sur une carte SD
- Téléchargez le logiciel RPI-Imager sur le site officiel.
- Lancez RPI-Imager et sélectionnez l'OS DietPi.
- Insérez la carte SD dans votre ordinateur.
- Sélectionnez la carte SD dans RPI-Imager.
- Cliquez sur "Write" pour flasher l'OS sur la carte SD.

Avant de connecter le Raspberry Pi au réseau Wi-Fi, nous avons créé un partage de connexion à l'aide d'un téléphone portable disposant d'un accès Internet. Nous avons également utilisé un PC portable connecté au téléphone par Wi-Fi pour configurer le Raspberry Pi via SSH.
- Connectez-vous au réseau Wi-Fi partagé par le téléphone portable à l'aide du PC portable.
- Recherchez la passerelle par défaut de ce réseau en exécutant la commande "ip r" sur le PC portable :
Configuration Wi-Fi et IP statique
Avant de démarrer le Raspberry Pi, effectuez les étapes suivantes :
- Créez un fichier vide nommé "ssh" à la racine de la partition de l'OS pour activer le service SSH au démarrage.
- Modifiez le fichier "dietpi.txt" dans la deuxième partition (FAT) pour activer la carte Wi-Fi et configurer une adresse IP statique. Voici les lignes à modifier :
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
- Modifiez le fichier "dietpi-wifi.txt" avec les informations de votre réseau Wi-Fi :
aWIFI_SSID[0]='WifiSAE'
aWIFI_KEY[0]='12345678910'
Connexion au Raspberry Pi
- Alimentez le Raspberry Pi et laissez-le se connecter au réseau Wi-Fi.
- Sur le PC portable, ouvrez un terminal et utilisez la commande suivante pour vous connecter au Raspberry Pi via SSH :
ssh dietpi@192.168.80.160
- Entrez le mot de passe par défaut "dietpi" pour vous connecter.
Ce qui nous retourne cette interface une fois connecté :

Mise à jour du système
Pour mettre à jour le système DietPi, exécutez la commande suivante :
sudo dietpi-update
Installation des services nécessaires
Utilisez la commande suivante pour installer les services requis (MariaDB, Mosquitto et Node-RED) :
sudo dietpi-software
Sélectionnez les logiciels MariaDB, Mosquitto et Node-RED dans l'interface de DietPi-Software et installez-les.

Configuration de Mosquitto
Modifiez le fichier "/etc/mosquitto/mosquitto.conf" pour configurer Mosquitto. Remplacez tout le contenu par les lignes suivantes :
allow_anonymous false
password_file /etc/mosquitto/passwd
listener 1883
Créez un utilisateur en utilisant la commande suivante :
sudo mosquitto_passwd -c /etc/mosquitto/passwd patate
Redémarrez le service Mosquitto avec la commande :
sudo systemctl restart mosquitto
Afin de configurer la base de données MariaDB, nous avons utilisé la commande permettant de configurer l’utilisateur root et d’assurer la sécurité de la base de données :
sudo mysql_secure_installation
Configuration de MariaDB
Utilisez la commande suivante pour configurer l'utilisateur root et sécuriser la base de données MariaDB :
sudo mysql_secure_installation
Connectez-vous à la base de données en utilisant la commande "mysql -u root -p" et ajoutez l'utilisateur "patate" avec tous les privilèges :
GRANT ALL PRIVILEGES ON *.* TO 'patate'@'localhost' IDENTIFIED BY 'patate';
Exécutez la commande "FLUSH PRIVILEGES" pour prendre en compte les nouveaux privilèges.
Configuration Node-RED
Pour configurer Node-RED, effectuez les étapes suivantes :
- Activez le service Node-RED au démarrage en utilisant la commande suivante :
sudo systemctl enable nodered.service
- Ouvrez un navigateur Web et accédez à l'adresse IP de votre Raspberry Pi sur le port 1880 pour utiliser l'interface Node-RED.
Installation de modules complémentaires
Pour ajouter des fonctionnalités supplémentaires à Node-RED, installez les modules Node-RED Dashboard et Node-RED Node-MySQL en utilisant les commandes suivantes :
cd /mnt/dietpi_userdata/node-red/
npm install node-red-dashboard
npm install node-red-node-mysql
Ces commandes vous permettront d'installer les modules nécessaires et de les utiliser dans Node-RED pour créer des tableaux de bord et effectuer des requêtes SQL.
Pour vous donner une idée du flux final sur Node-RED, voici une image :

Aperçu interface web généré par Node-RED
Connexion au réseau de la box
Pour connecter le Raspberry Pi au réseau de la box "PT4ObjConnect", utilisez la commande suivante :
sudo dietpi-config
Sélectionnez "Network Options" et choisissez l'option "WiFi: Available | [On] | Connected". Modifiez le mode pour utiliser le DHCP et connectez-vous au réseau en spécifiant le mot de passe "Admin2022".
Programmation des ESP32
Dans le cadre de ce projet, nous disposions de deux modules ESP32. L'un était programmé en Micropython à l'aide de l'IDE Thonny, tandis que l'autre était programmé en langage C à l'aide de l'IDE Arduino.
L'image ci-dessous présente les différents broches (pins) des deux modules ESP32 utilisés dans ce projet. Il est important de noter que certains des broches indiquées sur cette image peuvent ne pas correspondre exactement à leur emplacement réel sur le module ESP32 utilisé dans notre projet. Cependant, cette image offre une vue d'ensemble des fonctions des différentes broches et permet de comprendre comment elles ont été utilisées dans notre projet.

ESP32 Micropython
Sur l'ESP32 sous Micropython, nous avons utilisé les capteurs BME680, Oled, Servo FS90R ainsi qu'une LED. Nous avons utilisé l'IDE Thonny pour écrire et téléverser les codes sur l'ESP32. Voici les étapes que nous avons suivies pour configurer Thonny afin d'utiliser MicroPython sur l'ESP32 :
- Aller dans le menu Outils > Options > Interpréteur
- Sélectionner MicroPython (ESP32)
Avant de pouvoir téléverser nos codes sur l'ESP32, nous devions installer le firmware. Voici les étapes que nous avons suivies :
- Sélectionner le port série connecté à l'ESP32
- Sélectionner le firmware approprié (dans notre cas, esp32-idf3-20191220-v1.12.bin)
- Cliquer sur "Installer" pour téléverser le firmware sur l'ESP32
Une fois ces étapes effectuées, nous étions prêts à écrire et à téléverser notre code sur l'ESP32.
Le schéma ci-dessous montre comment les différents composants utilisés dans le projet ont été connectés à l'ESP32. Vous pouvez consulter le fichier .fzz pour obtenir le schéma complet (fichier .fzz). Cette image offre une vue d'ensemble visuelle de la configuration des différents composants.

Le tableau suivant présente les connexions des différents capteurs (BME280, LED, OLED et Servo FS90R) sur l'ESP32. Les broches GND et 3.3V sont connectées respectivement aux broches GND et VCC des capteurs. Les broches SCL et SDA (GPIO22 et GPIO21) sont connectées respectivement aux broches SCL et SDA des capteurs pour la communication I2C. La broche GPIO14 est connectée à l'anode (+) de la LED. La broche VIN (5V) est connectée à la source d'alimentation. La broche RX2 (GPIO16) est connectée entre S et G pour le servo moteur.
ESP32 | BME680 | LED | Oled | Servo FS90R |
---|---|---|---|---|
GND | GND | Cathode (-) | GND | G |
3.3V | VCC | X | VCC | X |
SCL (GPIO22) | SCL | X | SCL | X |
SDA (GPIO21) | SDA | X | SDA | X |
GPIO14 | X | Anode (+) | X | X |
VIN (5V) | X | X | X | entre S et G |
RX2 (GPIO16) | X | X | X | S |
Les codes suivants ont été utilisés pour programmer l'ESP32 en utilisant Thonny (MicroPython) :
-
Boot : boot.py Ce fichier est responsable de l'initialisation et de la configuration initiale de l'ESP32 au démarrage.
-
Bibliothèques :
- bme680.py Cette bibliothèque contient les fonctions et les classes nécessaires pour interagir avec le capteur BME680.
- ssd1306.py Cette bibliothèque contient les fonctions et les classes nécessaires pour interagir avec l'écran OLED.
-
Connexion WIFI :
- wifi.py Ce fichier gère la connexion à un réseau WiFi en configurant les paramètres de connexion.
- ssid_connect.py Ce fichier contient les identifiants (SSID et mot de passe) du réseau WiFi auquel l'ESP32 doit se connecter.
-
Main : main.py Ce fichier contient le code principal du programme, qui coordonne les différentes fonctionnalités et le comportement de l'ESP32.
Les bibliothèques utilisées incluent "Pin, SoftI2C, time, bme680, ssd1306, machine, network, umqtt.robust, sys" qui ont été utilisées pour gérer les capteurs, l'affichage, la communication réseau et la transmission de données via MQTT.
ESP32 en C
Sur l'ESP32 que nous avons configuré avec l'IDE Arduino, nous avons utilisé un écran LCD qui se connecte en série. Pour configurer l'IDE Arduino pour prendre en charge les cartes ESP32, voici les étapes que nous avons suivies :
- Allez dans les préférences du logiciel (Fichiers > Préférences).
- Dans la partie "URL de gestionnaire des cartes supplémentaires", ajoutez l'URL suivante correspondant au gestionnaire de carte ESP32 : "https://dl.espressif.com/dl/package_esp32_index.json".

Ensuite, nous avons ajouté la bibliothèque ESP32 dans le gestionnaire de cartes :
- Allez dans Outils > Cartes > Gestionnaire de cartes.
- Recherchez et installez le gestionnaire de cartes correspondant à ESP32.

Une fois l'installation terminée, les cartes ESP32 sont disponibles dans le gestionnaire de cartes. Choisissez la carte correspondant à votre ESP32. Dans notre cas, nous avons utilisé une WEMOS D1 MINI ESP32.
Le schéma ci-dessous montre comment l'écran LCD utilisé dans le projet est connecté à l'ESP32. Il montre comment les broches de l'ESP32 sont connectées aux broches de l'écran pour établir une communication série.

Pour le câblage, nous avons utilisé une résistance pour calibrer le contraste de l'écran LCD, ce qui rend le texte affiché sur l'écran visible. L'écran LCD nécessite une tension de 5 volts sur la broche VDD, qui est connectée à la broche VIN de l'ESP32. Enfin, les différentes broches de l'écran LCD sont connectées à l'ESP32 selon le tableau suivant :
ESP32 | Ecran LCD |
---|---|
GND | VSS |
5V (VIN) | VDD |
4k7Ohm | V0 |
D19 | RS |
4k7Ohm/GND | RW |
D23 | D0 |
D19 | D4 |
TX2 | D5 |
RX2 | D9 |
D15 | D7 |
5V (VIN) | A |
GND | K |
Le code utilisé pour programmer l'ESP32 en utilisant l'IDE Arduino se trouve dans le fichier : main.ino
Pour faciliter la communication MQTT, la bibliothèque PubSubClient a été utilisée. Elle permet à l'ESP32 d'établir une connexion avec un broker MQTT et de publier les données environnementales capturées.
De plus, la bibliothèque LiquidCrystal a été utilisée pour faciliter l'utilisation de l'écran LCD. Cette bibliothèque permet d'afficher les données capturées sur l'écran LCD connecté à l'ESP32, offrant ainsi une interface visuelle pour les utilisateurs.
En utilisant l'IDE Arduino et les bibliothèques PubSubClient et LiquidCrystal, le code permet une configuration complète de l'ESP32 pour capturer les données environnementales, les publier via MQTT et les afficher sur un écran LCD.