MaisonPaul – Des capteurs connectés à un serveur sur Raspberry Pi

Pour mon projet de capteurs connectés, je me suis grandement inspiré de deux articles du site Random Nerd Tutorial, le premier traitant de l’utilisation des capteurs DHT et le second traitant de l’algorithme global permettant de faire communiquer des ESP32 avec un broker MQTT et un backend Node-RED, ainsi que d’un article français sur le site Flynx pour des informations supplémentaires sur le broker MQTT et Node-RED.

J’ai effectué une recherche sur des capteurs de température faciles à contrôler et capables de s’interfacer avec une carte Arduino. J’ai fini par choisir les capteurs DHT22 pour leur simplicité d’utilisation et leur relative précision. En bonus, j’ai droit aux données d’humidité, le capteur DHT22 pouvant également mesurer le taux d’humidité dans l’air.

Ensuite, j’ai étudié les différentes cartes Arduino disponibles sur le marché. Je cherchais une carte peu coûteuse, mais dotée de fonctionnalités « internet des objets », notamment une connectivité wifi. Le choix s’est finalement porté sur les cartes ESP32 NodeMCU, qui répondaient à tous mes critères.

Capteurs DHT22 avec l’ESP32 NodeMCU

Pour programmer l’ESP32, je voulais depuis un certain temps essayer une autre plateforme que l’IDE Arduino par défaut, et des recherches m’ont mené jusqu’à Visual Studio Code et la plateforme PlatformIO, spécialisée dans le développement sur carte embarquée. Depuis PlatformIO, j’ai pu télécharger la librairie DHT d’Adafruit pour communiquer avec le capteur DHT22, ainsi la librairie PubSubClient d’Arduino pour la communication avec le serveur. Je me suis aidé du tutoriel de DroneBot Workshop.

Le code est largement inspiré par les articles de Random Nerd Tutorial. J’ai modifié le code pour pouvoir rapidement changer l’identifiant pour les trois différentes stations-capteurs, avoir les informations des capteurs toutes les deux minutes et évidemment pouvoir récupérer la température et l’humidité avec les capteurs DHT22.

Voici le code source des ESP32 : https://github.com/MrXANA91/Arduino-Projects/blob/master/esp32_temperature/esp32_temperature.ino

Le broker MQTT et backend Node-RED sur la Raspberry Pi

Côté backend, j’ai donc installé Mosquitto pour le serveur (appelé « broker ») MQTT et utilisé Node-RED installé par défaut sur les Raspberry Pi.

Un autre article du Random Nerd Tutorial m’a permis de configurer correctement le broker MQTT.

Node-RED est un système qui permet de faire de la programmation visuelle avec des blocs. J’y étais déjà un peu familier donc la configuration pour ce projet ne m’a pas trop posé de problèmes.

Les deux stations envoient des informations sur des topics MQTT contenant les mots-clefs « temperature » et « humidity ». Ces informations sont réceptionnés et envoyées directement dans un fichier texte correspondant.
Vous pouvez noter la présence des topics « local-current-weather ». En effet, je n’ai pas de capteurs à l’extérieur, j’ai donc décidé de récupérer les informations via le site OpenWeatherForecast, qui offre une API permettant de recevoir gratuitement des informations météorologiques sur des coordonnées GPS.

La requête HTTP contient les coordonnées GPS et la clef token API. La requête est gratuite en dessous d’un certain nombre d’appels par jour.

J’utilise des blocs de fonction javascript pour pouvoir récupérer de la réponse HTTP les informations de température et humidité, et je les stocke également dans des fichiers.

// Bloc : "extract"
// Le payload contient toute la réponse HTTP du site OpenWeatherForecast.
// On en extrait la température dans un cas, et l'humidité dans l'autre (ici la température)
var fullpack = msg.payload;
var temppack = fullpack.main;
var temp = temppack.temp;
msg.payload = temp;
return msg;
// Bloc : "toFile"
// On récupère la valeur de température et on y ajoute la date actuelle pour l'horodatage
var datum = new Date();
msg.payload = {Time: datum.getTime()/1000, Temperature: msg.payload};
msg.payload = msg.payload.Time + " " + msg.payload.Temperature;
return msg;

Voilà ! Nous avons donc maintenant des capteurs de température et d’humidité qui envoient les informations vers un serveur sous la forme d’une Raspberry Pi qui les horodatent et les stockent.

Le prochain article parlera de l’interface utilisateur sous le forme d’une application Android !

2 réflexions sur “MaisonPaul – Des capteurs connectés à un serveur sur Raspberry Pi”

  1. Ping : MaisonPaul - Application Android - Paul Chanvin

  2. Ping : MaisonPaul - Migration de Node-RED à Python - Paul Chanvin

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut