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.
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.
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.
Sur l’ESP32 plusieurs capteurs ont été branchés :
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.
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.
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
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/
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)
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 !