Un capteur de niveau de cuve HC-SR04 dans Jeedom avec ESP Easy et ESP8266

Classé dans : Capteur, Jeedom | 29

L’envie du moment était de pouvoir connaître la quantité de mazout restante dans mes deux cuves et, au passage, ma consommation. J’avais tout d’abord songé à un compteur à impulsion (comme pour un compteur d’eau mais attention à la pression à supporter en entrée) mais je n’avais rien trouvé de satisfaisant. Finalement je suis parti vers l’option d’un capteur de distance pour mesurer le vide entre le dessus de la cuve et le niveau de mazout et, par là, calculer la quantité restante et les variations.

Pour réaliser ce besoin au moins cher et pour explorer au passage une technologie qui m’était inconnue, j’ai fait une plongée dans le monde de l’électronique. Mais je vous rassure d’emblée : ce n’est pas si compliqué que cela et vous n’avez pas besoin de savoir souder ou de savoir programmer.

Mon capteur de niveau se compose finalement d’un microcontrôleur ESP8266 et d’un capteur de distance HC-SR04 et coûte une dizaine d’euros (prix de l’alimentation non compris)

Capteur de niveau cuve à mazout

Introduction : à propos de ESP8266 et du firmware ESP Easy

Depuis la fin de mes études, le domaine de l’électronique a énormément évolué. Il est tout d’abord devenu plus accessible car il est plus facile de construire un module et c’est bien moins cher. Enfin, les microcontrôleurs sont maintenant disponibles avec un module WIFI et parfois une interface web. Ces microcontrôleurs sont donc facilement connectables au monde de la domotique et, la démocratisation faisant son oeuvre, une kyrielle de capteurs peuvent être contrôlés : température, humidité, pression atmosphérique, intensité lumineuse, distance, impulsions, pluie, ….

Parmi ces microcontroleurs nouvelle génération, on retrouve en bonne place le ESP8266, un microcontrôleur avec connexion WIFI développé par le fabricant chinois Espressif.

ESP8266 en gros plan

Voici la variante ESP8266 achetée sur Amazon et qui sera utilisée dans cet article.

Point de vue packaging, voici ce que donne celui du vendeur AZ-Delivery

AZ Delivery ESP8266

L’ESP8266 peut se programmer avec plusieurs langages selon le firmware installé : script Lua avec le firmware NodeMCU, C++ avec l’IDE Arduino, Javascript avec Espruino,… Enfin on peut même se passer d’apprendre ces langages et configurer le microcontrôleur à travers une interface web avec le firmware ESP Easy. C’est cette solution, facile et rapide, que j’ai choisie.

ESP Easy est un firmware gratuit et open source pour microcontrôleur ESP8266. On l’utilise pour transformer les modules ESP8266 en des capteurs multi-functions programmables via une application web. Une fois le firmware installé, on n’a plus besoin que d’un navigateur internet pour configurer le tout parce que le firmware ESP Easy est livré avec toute une série de configuration “out-of-the-box” qui permettent de faire fonctionner des actionneurs et capteurs sans écrire une ligne de code.

Le bon choix des capteurs : attention à la tension d’alimentation

Il y a vraiment un grand nombre de capteurs compatibles avec l’ESP8266. On trouve d’ailleurs des kits de démarrage sur Amazon qui donne une idée de l’étendue des possibilités.

Pour mesurer le niveau de mes cuves à mazout, j’ai opté pour un capteur de distance HC-SR04.

C’était une petite erreur. Car il faut toujours faire attention au voltage. Le ESP8266 que j’ai acheté est alimenté en 5V mais fonctionne avec des signaux de 3,3V. Du coup, il faut lui coupler des capteurs 3,3V. Or, le HC-SR04 est un capteur 5V. Il aurait fallu commander le variante HC-SR04P qui peut, elle, fonctionner en 3,3V ou 5V.

Mais, trop tard, l’erreur était faite. J’avais toutefois lu certains dirent que le ESP8266 supporterait quand même le 5V, précisant bien “à vos risques et périls”. J’ai donc pris le risque, vu le faible coût des composants, de coupler les deux et d’utiliser le 5V. Après quelques jours, cela tient toujours ! C’est toutefois, bien entendu, à déconseiller et vous risquez de griller votre microcontrôleur ESP8266.

L’installation du firmware ESP Easy

Etape 1: Téléchargement des outils

Les modules ESP sont en général vendus avec un firmware : souvent le AT firmware ou le NodeMCU LUA firmware. En choisissant d’utiliser ESP Easy, on va en fait remplacer le firmware existant par ESP Easy.

Pour flasher un firmware, plusieurs solutions existent. La plus facile consiste à utiliser l’outil ESP Easy Flasher.exe (qui n’existe hélas que sous Windows). Pour ceux qui souhaitent faire autrement, voici d’autres techniques (en anglais) : https://www.letscontrolit.com/wiki/index.php?title=Basics:_Connecting_and_flashing_the_ESP8266

On télécharge l’outil ESP Easy Flasher et les firmware sur cette page : https://github.com/letscontrolit/ESPEasy/releases. Dans la partie « Assets » (mot sur lequel il faut cliquer pour voir le sous contenu), on retrouve un fichier ZIP à télécharger. A l’heure d’écrire cet article, c’est le fichier ESPEasy_mega-20200426.zip. On décompresse ce fichier et on trouve l’outil ESP.Easy.Flasher.exe

EspEasy contenu du fichier zip

L’outil ESP.Easy.Flasher.exe utilise les ports séries et beaucoup de PC n’ont plus. Il faut alors passer par une astuce : transformer les ports USB en ports séries COM virtuels. Cela se fait en installant le “CP210X Universal Windows Driver” tel que décrit ici https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers.. Vérifiez toutefois que votre ESP8266 peut communiquer au travers du CP210X (celui utilisé dans cet article implémente le CP2102 et cela fonctionne donc).

Etape 2: brancher le ESP8266 au PC

Pour cette seconde étape, il faut brancher son ESP8266 à l’aide d’un câble USB côté PC et micro USB côté ESP8266. 

Branchement ESP8266 en USB

Le PC doit, à ce stade, reconnaitre qu’un appareil a été branché et vous devriez voir un port COM dans le “Device Manager”. Ici il s’agit de “Silicon Labs CP210X USB to UART Bridge (COM4).

Port COM4 Silicon Labs CP210X

Si vous ne voyez pas ce port COM, c’est plutôt mauvais signe et il y a peu de chance que vous puissiez aller plus loin.

Etape 3: Flasher ESP Easy dans le module ESP8266

Dans cette troisième étape, il faut choisir la version du firmware ESP Easy à installer dans le module ESP8266.

Le firmware de ESP Easy est construit sur la version R120, réputée assez stable. Il y a d’autres versions en cours de développement (Mega). J’ai pris le risque d’installer une version en cours de développement (Mega) car la R120 datait de 2018. Cela a très bien fonctionné.

On lance donc le logiciel ESP.Easy.Flasher.exe. Le bon port COM doit se remplir automatiquement (COM4 ici). Dans la zone de texte Firmware (.bin), on choisit la version. J’ai pris “ESP_Easy_mega-20200426_normal_ESP8266_4M1M.bin”. Faites bien attention à choisir une version adaptée à la taille mémoire de votre ESP8266. Le mien étant de 4Mb, c’est un firmware _4M que j’ai choisi.

Ensuite, il faut cliquer sur le bouton “Flash ESP Easy FW” en bas à droite pour démarrer le processus.

Flash ESP Easy

Après environ 90 secondes, le message “DONE!” apparaît. On peut débrancher l’alimentation (USB) du ESP8266 et le rebrancher afin de redémarrer l’appareil.

Etape 4: se connecter en WIFI

Quelques secondes après avoir rebranché le tout sur le port USB, un nouveau WIFI nommé ESP_Easy est accessible depuis n’importe quel PC ou MAC (on peut maintenant utiliser son MAC pour continuer les opérations).

1. Se connecter au WIFI ESP_Easy

EspEasy Config 1 Connect network

2. Le mot de passe est configesp

EspEasy Config 2 password network

3. Dans un navigateur internet, introduire l’adresse 192.168.4.1 pour se connecter au ESP8266. Ensuite, choisir parmi la liste proposée le WIFI au travers duquel le ESP8266 se connectera dans le futur. Vous devriez voir, ici, vos WIFIs. Introduire le mot de passe (en bas de l’écran) et cliquer sur “Connect”

EspEasy Config 3 WIFI information

4. La mise à jour du WIFI qu’utilisera le ESP8266 est en cours

EspEasy Config 4 WIFI connection

5. L’écran de configuration est ensuite affiché. Mais on remarque qu’on est connecté au travers de l’AP. Il vaut mieux, à ce stade, se connecter à l’ESP8266 via le WIFI configuré à l’étape 3. Notez donc bien l’adresse IP de l’appareil en bas de l’écran (cela se termine par .235 dans l’image ci-dessous) : on va utiliser cette adresse pour continuer la configuration.

EspEasy Config 5 WIFI connected

6. Après avoir connecté le PC (ou MAC) au même WIFI que celui de l’ESP8266 configuré à l’étape 3, introduire l’URL notée à l’étape 5 dans un navigateur internet (qui se termine, dans cet exemple par .235, ce qui donne http://x.x.x.235 où les x doivent être ajustés selon votre adresse IP). L’écran de configuration est alors affiché.

EspEasy Config 6 setup after switch of wifi

Etape 5: Brancher le capteur HC-SR04(P)

A cette étape, il convient de connecter physiquement le capteur de distance. L’idéal est d’avoir le HC-SR04P et de l’alimenter en 3,3V. N’ayant que le HC-SR04, j’ai pris le risque de griller mon ESP8266 en travaillant en 5V. Voici donc le branchement du HC-SR04. Si vous travaillez avec le HC-SR04P, il faudra juste changer un câble en prenant une pin 3.3V au lieu de VIN sur le ESP8266. 

Pour les branchements, j’utilise des câbles Elegoo. J’en avais acheté sur Amazon par sécurité mais il y en avait quelques uns de livrés avec les capteurs.

On branche donc des PINs de l’ESP8266 avec des PINs du capteur HC-SR04(P) à l’aide de ces câbles. Le ESP8266 est un microcontrôleur dont certaines PIN ont une fonction prédéfinie qu’on ne peut pas changer (on songe à l’alimentation VIN, la masse GND, le reset,…). Mais, et c’est là toute la force, certaines PINs sont ce qu’on appelle GPIO c’est-à-dire “General Purpose Input/Output.” Ces PINs GPIO n’ont pas de fonctions spécifiques et peuvent donc être paramétrées. Il faut bien repérer quelles sont les PINs GPIO et les autres sur le schéma de son ESP8266. Le mien, fourni par le vendeur AZ Delivery, indiquait ceci:

Cablage Amica V2

Il y a quatre câbles à connecter: les deux premiers sont des PINs prédéfinies pour l’alimentation. Etant en 5V, j’ai donc pris GND et Vin (en bas à gauche sur l’image ci-dessus). Les deux autres PINS sont à choisir parmi les PINs GPIO afin de récupérer les mesures du capteur. J’ai choisi D6 (GPIO12) et D7 (GPIO13). Le câblage donne donc

ESP8266 VIN -> HC-SR04 VCC

ESP8266 Gnd -> HC-SR04 Gnd

ESP8266 D6 -> HC-SR04 Trig

ESP8266 D7 -> HC-SR04 Echo

Capteur de niveau cuve à mazout

Etape 6: Configurer le capteur HC-SR04(P) sur le ESP8266

1. Toujours dans le navigateur internet à l’URL de l’ESP8266 (voir étape 4 – point 5), cliquer sur “Devices” et appuyer sur “Add”

EspEasy Config 102 HC-SR04 Mesures

2. Toute une série de capteurs prédéfinis existe (c’est l’avantage du firmware ESP Easy). Il faut choisir son capteur, à savoir ici le capteur “Position – HC-SR04, RCW-0001, etc.” et cliquer sur le bouton “Submit”.

EspEasy Config 8 Add HC-SR04 Device

3. Sur l’écran de configuration du capteur, introduire les paramètres:

  • Choisir un nom
  • Cocher “Enabled”
  • GPIO -> Trigger : choisir la pin D6 puisque c’est celle là qu’on a branché et donc prendre “GPIO-12 (D6)
  • GPIO -> Echo, 5V : choisir la pin D7 puisque c’est celle là qu’on a branché et donc prendre “GPIO-13 (D7)
  • Max Distance : 500 cm
  • Interval : intervalle souhaité pour la prise de mesure. En mode test, je conseillerais quelques secondes. Une fois le projet mis en place, j’ai choisis 360 (sec) et j’aurais même pu mettre 3600 car le niveau de cuve de mazout bouge peu.
  • En bas à droite, je vous conseille de mettre 1 (voir même 0) au lieu de 2 pour “Decimals”. Le capteur n’est de toute façon pas précis au millimètre puisque ses spécifications mentionnent : “Précision : 3mm, realistically 10mm”

Cliquer sur le bouton “Submit” en bas de l’écran pour sauver le tout.

EspEasy Config 9 HC-SR04 Parameters

Etape 7: C’est fini

Voilà, c’est terminé. On voit logiquement les mesures de distance dans l’interface web à savoir ici 103,74 cm (en vert à droite sur l’image)

EspEasy mesure de distance

Pour être sûr, il est prudent de faire un petit étalonnage afin de vérifier que les distances reportées par le capteur sont correctes.

Etalonnage du capteur  Elegoo HC-SR04

Il ne reste plus maintenant qu’à se trouver un petit boitier sympa pour y mettre son capteur et à l’alimenter de façon autonome à travers un petit transformateur 5V (du genre chargeur de téléphone). Pour le boitier, une imprimante 3D peut s’avérer ici bien utile. En ce qui me concerne, j’ai récupéré un bouchon en plastique de ma cuve à mazout. J’ai percé des trous à la foreuse et j’y ai collé les capteurs au silicone.

Montage du HC-SR04

J’ai utilisé, de l’autre côté, une simple boite de dérivation pour y placer les ESP8266 et j’ai relié les ESP8266 et les capteurs HR-SC04 avec du câble réseau RJ45 CAT 6 qui trainait (celui-ci supportant le POE, il ne devrait pas y avoir de soucis pour du 5V et le faible ampérage requis par les ESP8266). Ce n’est pas très sexy mais cela fonctionne. Par mesure de sécurité, j’ai utilisé de l’isolant (après avoir pris la photo) pour bien séparer les deux ESP8266 afin que leurs PINs ne se touchent pas.

Boite dérivation pour ESP8266

Bon, c’est clair c’est du bricolage. Certains font des choses bien plus belles avec une imprimante 3D comme par exemple ici : https://cults3d.com/fr/mod%C3%A8le-3d/divers/support-capteur-de-niveau-de-cuve. C’est du bien beau travail qui donne envie d’investir dans une imprimante 3D.

IMG_4086_large

La remontée des mesures dans Jeedom

C’est le plugin Jeedom ESPeasy, gratuit, qui va gérer la remontée des mesures des capteurs dans Jeedom. Ce plugin se trouve sur le market officiel de Jeedom.

Plugin Jeedom EspEasy

Après l’avoir installé, il faut l’activer et installer les dépendances. En bas de l’écran, dans la partie “configuration”, on voit les paramètres qu’il faut reporter dans le module ESP8266.

Plugin EspEasy Configuration dans Jeedom

On se reconnecte donc, via un navigateur internet, au module ESP8266 pour le configurer (comme on l’a fait précédemment). On clique cette fois sur “Controllers” et puis sur “Add”.

EspEasy Controleurs 1

Les valeurs à introduire sont:

  • Generic HTTP
  • Controlleur IP : l’adresse IP de Jeedom (qui est aussi celle que l’on peut lire dans “IP Controleur à saisir dans ESPeasy (onglet config)” sur la page de configuration du plugin Jeedom ESPEasy)
  • Controlleur Port : 8121 (qui est aussi le numéro que l’on peut lire dans “Port Controleur à saisir dans ESPeasy (onglet config)” sur la page de configuration du plugin Jeedom ESPEasy)
  • Controlleur Publish (plus bas dans l’écran): device=%sysname%&taskid=%id%&cmd=%valname%&value=%value% (qui est aussi ce qu’on voit sur la page du plugin)
  • Cocher la case “Enabled”

EspEasy Controleurs Config 21

EspEasy Controleurs Config 3

Si vous vous arrêtez ici, vous ne verrez rien dans Jeedom. J’ai perdu pas mal de temps à comprendre pourquoi. Il faut encore remplir une dernière étape au niveau du capteur. Il faut cliquer sur “Devices”, cocher la case “Send to Controlleur” et cliquer sur le bouton “Submit” pour sauver les changements. Si vous avez plusieurs ESP8266, indiquez bien un IDX différent pour chacun.

EspEasy Controleurs Config 4

Par mesure de précaution, je vous conseille de redémarrer votre ESP8266.

Vous pouvez maintenant retourner dans Jeedom : Plugins / Protocole Domotique / ESPeasy

Jeedom Inclusion dans le plugin ESP Easy

Cliquer sur le bouton “+ Inclusion”. Un équipement, correspondant au capteur, devrait apparaitre.

Jeedom Equipement ESPEasy détecté

Il faut configurer cet équipement en cliquant dessus, en lui donnant un nom, en cochant “Activer” et “Visible” et en lui attribuant une pièce (via Objet parent). On notera, au passage et si besoin, que son adresse IP est renseignée.

Jeedom equipement EspEasy

Au niveau des commandes, on voit la mesure de distance qui est remontée :

Jeedom Commande EspEasy

Si on se rend dans le Dashboard, on a voit également l’information du capteur de distance HC-SR04:

Jeedom Dashboard ESPEasy

Utiliser un widget et calculer le volume dans les cuves

J’ai maintenant une distance qui m’indique combien d’espace vide il y a entre le niveau de mazout et le haut de la cuve. Mais un joli Widget qui me donnerait le niveau de remplissage, en litres, de chacune des deux cuves et le total, serait quand même bien plus joli.

Jeedom Widget niveau des cuves

Je suis passé par un équipement virtuel (via le plugin virtuel à installer). J’y ajoute consécutivement trois infos virtuelles (bouton “+ Ajouter une info virtuelle) de sous-type numérique. Dans le champ valeur, je réalise un calcul.

Mes cuves font 2500 litres et leur hauteur est de 150cm. Le calcul suivant me donnera donc le niveau de mazout dans chaque cuve : 2500*(150 – distance mesurée)/150. Cela donne, par exemple pour l’info virtuelle “Niveau cuve fond”, cette formule à mettre dans le champ “Valeur” : 2500*(150-#[Cave Garage][Cuve Mazout Fond][Distance]#)/150

Jeedom Virtuel pour les niveaux de cuves

Je coche bien entendu le “Afficher” et “Historiser”. J’affecte aussi, au niveau des options, les valeurs minimales, maximales et l’unité.

J’ai ensuite installé un Widget Jauge, assez joli je trouve, en suivant cette procédure: https://community.jeedom.com/t/partage-jauges-highcharts-parametrable-ouvert-aux-contributions/17303

La dernière étape consiste à configurer le virtuel, pour les trois infos virtuelles créées ci-dessus en cliquant sur le bouton engrenage (de chaque info virtuelle sur l’écran ci-dessus).

Par esthétique, j’arrondis le calcul pour ne pas voir de décimales, ce qui se fait en mettant 0 dans la zone de texte “Arrondi (chiffre après la virgule)” dans l’onglet “Configuration”.

Jeedom virtuel arrondi valeur

Dans l’onglet “Affichage”, je choisis le Widget importé précédemment à savoir “JaugeHighChart”.

Jeedom affichage widget

Et voilà le résultat dans mon Dashboard.

Jeedom Widget niveau des cuves

Pour être honnête et complet, la mesure n’est pas super stable. A cette période, la chaudière tourne peu. Les cuves, en métal, sont situées en cave et doivent peu se dilater. Il est donc difficile d’expliquer ces variations de mesure d’une minute à la suivante. La précision semble tourner autour des 10 litres, ce qui correspond en effet à la précision de 3mm près annoncée dans les spécifications du capteur. Les capteurs HR-SC04P donneront donc plus une indication et une tendance sur plusieurs jours qu’une consommation instantanée, ce qui est un peu dommage

Jeedom variations des mesures

Conclusions

Pour quelques euros, voici un bon moyen de mesurer le niveau de cuves même si cette solution souffre un peu d’un manque de précision. C’est aussi l’occasion d’appréhender une technologie pas si compliquée et qui ouvre beaucoup de portes. Je recommandes vivement et je pense tester prochainement quelques autres capteurs, dont le capteur d’impulsions pour suivre la consommation électrique.

29 Responses

  1. yved

    Bonjour,
    Article très intéressant qui montre la simplicité d’emploi d’EspEasy. Ce n’est qu’une première marche, ce firmware est extrêmement puissant avec des capacités d’automatisme autonome (les Rules).
    Le problème de la compatibilité en niveau 3,3v peut être contourné en alimentant le SR04 en 3v3, certains modèles sont prévus pour. De mémoire, il s’agit de ceux ne comportant pas de quartz entre l’emetteur et le récepteur sonore.

    • ObjetsConnectesAdmin

      Merci. C’est en effet la base de la base mais ça donne du coup envie d’aller plus loin. Car l’électronique est un monde difficile à appréhender et commencer par du basique peut susciter l’envie d’aller plus loin. Et merci pour les précisons sur les tensions.

  2. esso1 ( brutos-nutos sur FB)

    très bien l’article, je vois que tu as fini ton installation. il y a plein de possibilité avec l’esp 😉 .pour l’electrique, tu as le wifinfo, ou autre capteur pour la mesure. Pour les capteur gaz, la , l’impulsion est bien , et cela est assez facile car ca reste un contact qu’il faut compter.