Dashboard IOT avec NodeRed sur Raspberry Pi et des ESP32 !

Aujourd’hui on va parler d’IOT, et notamment en présentant quelques outils très utiles avec lesquels j’ai récemment expérimenté. La difficulté avec l’IOT est qu’il y a de l’électronique, du système embarqué, du réseau, du web, du UI… Beaucoup de choses à savoir. Je vais donc vous montrer une manière de simplifier ce processus en utilisant NodeRed.

Dans ce projet j’utilise un Raspberry Pi en router wifi, qui sert de broker MQTT et fait tourner le serveur Node Red. Des cartes électroniques Wifi basées sur des ESP32 se connectent au Raspberry Pi et vont poster les données de leurs capteurs en MQTT. Ces données seront ensuite affiché sur un Dashboard grâce a NodeRed.

Puces ESP32, capteurs et actuators

ESP32 - M5 Core Ink

L’ESP32 est un microcontrôlleur Wifi et Bluetooth développé par Espressif, qui supporté notamment Arduino et Micropython. Cette carte a été une petit révolution dans le monde du prototypage et de l’IOT ces dernières années, notamment grâce à son coût et sa facilité d’utilisation.

Il existe de nombreux modules et cartes de développement basées sur ce module. Généralement j’utilise les NodeMCU, mais cette fois-ci je voulais essayer les modules de M5Stack. Ces modules de développement sont designés pour être simple d’utilisation pour l’éducation (STEM). Ils ont des boitiers avec tous les GPIO imprimés dessus et des encôches pour les clipser à des Lego. De nombreux capteurs et actuateurs avec leurs librairies sont aussi disponibles sur le site de M5Stack. 

Platform IO VS Arduino

Même si M5 Stack propose un système appelé UI Flow pour programmer ces modules via une interface graphique et un système de nodes, ce genre de programmation est réservé à l’apprentissage. Si vous savez programmer, autant utiliser directement soit Micropython soit un environnement Arduino.

Jusqu’à présent j’utilisais Arduino, mais pour cette occasion j’ai voulu installer PlatformIO, une extension de Visual Code. Pour faire simple : je ne suis pas prêt de retourner sur Arduino ! PlatformIO est bien plus pratique sur tous les points : gestion des librairies, éditeur, code complétion.

Capteurs et Actuators

Sur l’ESP32 plusieurs capteurs ont été branchés :

  • Un capteur de pression BMP280.
  • Un capteur de température / humidité SHT30.
  • Un ensemble de 4 relais pour contrôler la lumière, pompe à air, chauffage.
  • L’écran EPaper inclus dans le M5 CoreInk.

Ces capteurs communiquent en I2C.
L’ESP32 se connecte automatiquement au Wifi du Raspberry Pi et à son broker MQTT. Il envoie les données des capteurs via le protocole MQTT au Raspberry Pi, et reçoit des commandes pour activer les relais.

Cpateur d'environnement (température, humidité, pression)
Capteur d'humidité du sol
Relais pour contrôle de la lumière, pompe à air, chauffage

Raspberry Pi

Point d'accès Wifi

Pour commencer on va suivre les instructions pour transformer le Raspberry Pi en point d’accès.
Cela va permettre un point d’accès pour tous les capteurs (ESP32) et on pourra ainsi pré-programmer le SSID et mot de passe directement pour que les ESP32 se connectent automatiquement.

Installation d'un Broker MQTT

Installons ensuite un Broker MQTT bien connu : Mosquito
MQTT est un protocole standard pour l’IOT permettant de consommer très peu de bande passante, et facile à implémenter.
Le broker MQTT est un serveur qui va permettre de recevoir et envoyer des messages sur des “topics”. Les ESP32 vont publish les données de leurs capteurs, et subscribe à certains topics pour recevoir des informations.

sudo apt-get install mosquitto mosquitto-clients

Installation Node Red

Node Red est un outil de programmation basé sur NodeJS ayant pour but de facilement connecter des appareils matériels à des API et services en ligne. Alors que le broker MQTT agrège les données des capteurs sur le réseau local, Node Red fait le lien avec le Web
Avec Node Red nous pouvons aussi facilement créer des Dashboard de contrôle et de visualisation des données. De nombreux plugins créés par la communauté peuvent être installés pour ajouter des fonctionnalités.

sudo apt-get install nodejs
sudo apt-get install nodered
sudo systemctl enable nodered.service
sudo apt-get install npm
sudo npm i -g npm@2.x

L’interface Node Red est accessible depuis un navigateur Web sur le port 1880, à l’IP du Raspberry Pi : http://192.168.0.1:1880/

Ngrok pour accès à distance

L’interface de Node Red n’est à présent accessible que depuis le réseau local. Avec ngrok on pourra “forward” le port de NodeRed sur internet à une URL.

sudo apt update
sudo apt install snapd

sudo reboot

sudo snap install ngrok
ngrok authtoken  yourauthtoken # Mettre l'authtoken recue sur votre compte Ngrok

ngrok http 1880 # Utiliser cette ligne pour forward Node Red (à mettre dans une cron task)

Node Red Dashboard

Node Red permet via une interface graphique d’effectuer des commandes réseaux (lecture, envoie MQTT, TCP, HTTP etc), traiter les données, tracer des graphique et créer des Dashboard. On peut facilement recevoir les données des ESP32 via un node MQTT In, puis les analyser et afficher.

Voici à gauche le genre de Dashboard qu’il est possible de créer, sans une seule ligne de code !
Dans le cas à gauche il n’y a que de l’affichage mais on peut ajouter des boutons, entrées texte, formulaires etc… Pour avoir une interface de contrôle très complète.

Il est facile de créer de nouveaux nodes pur ajouter des fonctionnalités spécifiques.

Voilà qui fait le tour de cette introduction à Node Red et tout le pipeline d’IOT que j’utilise. Je ne peut que recommander l’utilisation de ces technologies qui ont fait leurs preuves. N’hésitez à envoyer un message si vous souhaitez un tutoriel plus complet sur le sujet !