Un capteur de température wifi avec un ESP8266 et Jeedom.

Bonsoir,

Je vous parlais il y a quelques temps du microcontrôleur wifi ESP8266 et de ses possibilités. Aujourd’hui on va de nouveau jouer avec afin de créer notre propre capteur de température connecté. On va récupérer la température qu’on affichera sur une page web et en parallèle on alimentera un objet virtuel sur Jeedom afin de l’afficher sur notre dashboard et bien sûr garder un historique.

Prérequis

Voici la liste des courses pour réaliser notre capteur connecté 🙂 :

  • 1 ESP8266 (modèle de votre choix, perso ce sera un « 03 »)
  • 1 adaptateur USB/Serial pour injecter le programme et nous connecter sur l’ESP.
  • 1 capteur de température DS18B20.
  • 1 résistance de 1kΩ.
  • 1 planche d’essai.
  • Quelques petits câbles pour relier le tout.
  • Le plugin « Virtuel » sur Jeedom
  • Le logiciel LuaLoader pour dialoguer avec l’ESP (ou autre si vous avez votre préféré…)

Je pense que je ne vous apprendrez rien en vous disant que vous trouverez tout sur ebay pour quelques euros. Privilégié les vendeurs français quand vous le pouvez, en général un poil plus chère mais ça vous évitera d’attendre 1 mois pour une résistance…

En prérequis je vais vous demander d’installer NodeMCU sur votre ESP8266 si ce n’est pas déjà fait. Cette étape est détaillée dans un de mes précédents post.
Et voilà nous sommes prêts…

…Partez 🙂

Configuration Jeedom

Comme je vous le disais en préambule, nous aurons besoin du plugin gratuit et officiel « virtuel ». Installez le depuis le market si vous ne l’avez pas encore et activez le ! Comme son nom l’indique il va nous permettre de créer des objets virtuels. Vous pouvez jeter un œil à la doc pour vous faire une idée. Dans notre cas vous l’avez devinez on l’utilisera pour réaliser notre capteur de température. C’est lui qui récupérera la valeur de la température et l’historisera.

Sans plus attendre, nous allons ajouter notre capteur virtuel, pour ça vous vous en doutez : Plugins > Programmation > Virtuel, et vous aurez compris sans trop de difficulté j’imagine, qu’il vous faut ensuite cliquer sur le gros bouton tout vert « Ajouter ». Donnez lui le nom que vous voulez, pour ma part : « Temperature Bureau »

esp18b20_jeedom_virtuel

Si vous avez l’habitude d’utiliser Jeedom, rien de nouveau.

Nom de l’équipement : Nom arbitraire et unique de votre capteur.
Objet Parent : L’objet auquel votre capteur sera rattaché.
Catégorie : Si vous voulez le rattacher à une catégorie, par exemple Chauffage ou Energie.
Activer : Active ou non le capteur virtuel.
Visible : Visible ou non sur le dashboard.

Rien de folichon, mais c’est maintenant que ça va nous intéresser. Il va falloir que l’on ajoute une info virtuelle, je vous laisse donc cliquer sur le joli (vous en jugerez par vous même) bouton créé à cet effet et remplissez la nouvelle ligne comme moi :

esp18b20_jeedom_virtuel_2

Vous aurez remarquez qu’entre temps j’ai activé mon capteur et je l’ai rendu visible.
Sinon là encore rien d’extraordinaire, j’ai juste donné un nom « temp » de type « Numérique » que j’historise et que j’affiche. Notez l’id « 443 » en début de ligne, il nous sera utile plus tard, bien sur ça n’est probablement pas le même id chez vous !

Sauvegardez tout ça !

Voilà notre capteur est créé ! c’est déjà un bon début 🙂 Intéressons nous maintenant à l’API Jeedom qui va nous permettre de générer la requête qu’on utilisera pour mettre à jour notre capteur avec les valeurs des températures. Là encore on ne va rien inventer puisque Jeedom a pensé à tout. Voilà sans plus attendre la requête officielle récupéré dans la doc :

http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=virtual&id=#ID#&value=#value#

Il faut évidemment remplacer les éléments entre « # », un peu d’explication :

#IP_JEEDOM# : Ai-je vraiment besoin de l’expliquer ?? Bah oui, c’est l’IP de votre serveur Jeedom.
#APIKEY# : Votre clé API que vous pouvez récupérer dans le menu utilisateur en haut à droite (le petit bonhomme) > Profil admin > Autre > Clef API.
#ID# : L’id de notre capteur que vous avez noté un peu plus haut.
#value# : A remplacer par la valeur à mettre à jour, en l’occurrence la température. Bien sur il s’agira d’une variable qu’on ira récupérer automatiquement plus tard dans le TP.

Attention : Si comme moi vous n’avez pas installé Jeedom via l’image officielle mais que vous l’avez fait via le script d’install sur une raspbian par exemple, il ne faudra pas oublier de rajouter « /jeedom/ » dans le chemin de l’API.

Je vous donne la requête finie et basée sur mon cas concret (bon j’ai changé quelques chiffres/lettres de ma clé API, j’ai confiance en vous mais sait-on jamais ;)) :

http://192.168.1.200/jeedom/core/api/jeeApi.php?apikey=e884u2cdde3729ae36g6e5e8a144e054bb99c4fr&type=virtual&id=443&temp=#value#

Pareil, gardez cette requête dans un coin !

Si vous voulez être sur que votre requête est fonctionnelle, vous pouvez remplacer #value# par une valeur et l’exécuter dans votre navigateur. Faites l’opération plusieurs fois avec des valeurs différentes. Si dans Jeedom, vous allez dans l’historique, vous devriez voir apparaître vos mesures fictives. A noter que Jeedom va faire une moyenne des valeurs reçues sur les 5 dernières minutes. Si par exemple vous testez avec « value=20 » et « value= 22 » dans le même créneau de 5mn, Jeedom devrait vous afficher une moyenne de 21 pour ce créneau. J’ai balancé quelques valeurs en vrac sur plusieurs minutes, voilà ce que ça donne :

esp18b20_graph_exemple

La partie est Jeedom est prête, intéressons nous maintenant à notre ESP et au montage.

Montage

Le montage est très basique encore une fois  ! Bah oui, ils sont toujours faciles pour la simple et bonne raison que je ne suis pas capable d’en faire des compliqués… Mais avouez que ça vous arrange aussi 😉

esp18B20_bb

Configuration ESP8266

Bon, normalement vous avez déjà installé NodeMCU sur votre ESP (Pour les retardataires, vous pouvez toujours vous aider de mon précédent article). Connectez vous avec LuaLoader sur votre ESP, c’est le logiciel que j’utilise pour la suite du TP, mais rien ne vous empêche d’en utiliser un autre.

esp18b20_lualoader_connect

Ensuite, il faut savoir que l’API de NodeMCU ne permet pas d’interagir nativement avec notre capteur de température. Pour que cela fonctionne il faut donc que l’on upload un fichier ds18b20.lua, une sorte de librairie qu’on appellera depuis notre programme principal.

J’ai pris des versions trouvées sur Internet mais toutes ne fonctionnaient pas, je vous copie donc celle que j’ai utilisé :

Recopiez le code et créez un fichier texte que vous appellerez « ds18b20.lua »

Ensuite, via LuaLoader, cliquez sur le bouton « Upload File » et sélectionnez votre fichier fraîchement créé. Cela prends un peu de temps à être uploadé mais vous devriez arriver à vos fins en quelques dizaines de secondes.

esp18b20_lualoader_upload

Pour info, vous avez aussi la possibilité de voir les fichiers présents sur NodeMCU grâce au bouton « file.list ».

On va maintenant pouvoir faire un test. Copiez le code suivant et collez le grâce à « Paste Text » :

Voilà ce que ça devrait vous donner :

esp18b20_lualoader_temp

Il se peut que comme moi la première mesure soit erronée, car non il ne fait pas 85° chez moi rassurez-vous 🙂 Exécutez à nouveau les 2 dernières lignes du code pour relancer une mesure, ça devrait aller mieux !

Cela nous permet de valider que notre capteur fonctionne bien !

Le but du jeu maintenant va être de créer notre programme qui nous permettra à la fois de mettre à jour notre capteur Jeedom et qui nous affichera la température sur une page web. Pour ça il va vous falloir créer 2 fichiers. Le premier « web_temp_to_jeedom.lua » que voici, agrémenter de quelques commentaires qui vous permettront, je l’espère, de comprendre :

Il s’agit là du programme principal, n’oubliez pas de changer les quelques paramètres au début du code.

Maintenant nous avons besoin d’un autre fichier qui initialisera le programme, on en profitera pour y glisser la configuration wifi. Celui là s’appelle « init.lua ». Attention respectez bien le nom car il sera exécuté automatiquement à chaque démarrage :

Uploadez ces 2 fichiers et redémarrez votre ESP (débrancher/rebrancher la patte vcc suffit !).

Petit récap des différents fichiers que vous devriez avoir sur votre ESP:

  • ds18b20.lua : fichier librairie qui va nous permettre de dialoguer avec le capteur DS18B20.
  • web_temp_to_jeedom.lua : Notre programme principal (il utilise ds18b20.lua pour récupérer les valeurs).
  • init.lua : C’est le fichier qui est executé au démarrage de l’ESP, son nom est très important (Il appelle l’execution du fichier web_temp_to_jeedom.lua).

A ce stade, le capteur se mets à jour tout seul dans Jeedom. Vous pouvez choisir de l’afficher ou non sur votre dashboard. De plus n’oublions pas que nous avons intégré un serveur web et donc que vous pouvez visualiser la température sur une page web (je vous l’accorde, ce n’est pas forcement très utile mais à vous d’imaginer des cas plus concrets, là c’est juste pour vous montrer). Si vous ne connaissez pas l’ip de votre ESP, vous pouvez utiliser le bouton « Get IP » sur LuaLoader ou la commande « wifi.sta.getip() » qui va vous l’indiquer. Vous n’avez plus qu’à vous y rendre avec votre navigateur !

esp18b20_jeedom_dashboard   esp18b20_test_navigateur

Si vous attendez quelques minutes vous pouvez regardez dans l’historique de Jeedom, vous devriez voir un graph qui commence à se profiler. N’oubliez pas que même si notre ESP envoi une valeur toute les minutes, Jeedom lui va faire une moyenne sur 5 minutes, il vous faudra donc attendre 10 minutes pour 2 valeurs (et ouais les maths c’est mon dada…).

esp18b20_jeedom_graph

Bon j’étais en plein test, donc j’ai pas mal de fausses valeurs d’où les grands écarts… Mais vous avez compris l’idée 🙂

Voilà, le TP touche à sa fin. Bien sur maintenant que notre ESP est programmé, vous pouvez débrancher l’adaptateur USB/série. Et si vous voulez une installation un peu plus pérenne, n’hésitez pas à souder tout ça sur une plaque prototype.

En attendant un nouvel article je vous souhaite une bonne soirée 🙂

5 commentaires

  1. Bonjour,
    Super tuto mais j’aurais quelques petites questions.
    Je suis super nul en électronique, résistances, ohm, et tous ce bazar.
    J’ai acheté le matériel mais j’aimerais un peu d’aide pour la valeur de/des résistance(s) et surtout pour le montage. Si en plus le programme était adapté ce serait le top.
    Voilà le matériel dont je dispose:
    – NodeMCU LUA ESP8266 (CH340G TE390) de XSource
    – Breadboard 3.3V-5V (avec alim. 5V 3000 mA)
    – Résistances 1 K Ohm (0.25W)
    – 2 sondes DS18B20 (longueur de câble 1 M)
    – 1 capteur T°/Humidité DHT22/AM2302

    J’aimerais donc pouvoir adapté ce tuto pour non pas une seule sonde mais pour les 3.
    Comme dit plus haut je suis nul en électronique donc comment assembler tous ce petit monde pour avoir dans mon Jeedom la remontée des 2 capteurs de T° plus celle d’humidité.

    Si quelqu’un avait l’amabilité (et la patience) de me faire un petit plan de montage, ainsi que l’adaptation du programme je lui serais éternellement reconnaissant 😉

    Un grand merci d’avance
    Bonne journée,
    @+ Benoît

  2. Merci pour ce tuto !
    Je ne comprenais pas pourquoi je ne pouvais pas tester le plugin virtuel sur mon navigateur….
    En fait j’ai trouvé ! tu as mis temp=#value# alors que c’est value=#value# sur la ligne en bleue.
    Merci encore

  3. Bonjour !
    J’ai utilisé votre tuto pour construire une sonde wifi de Temp qui est lue dans mon Jeedom. J’ai utilisé un ESP 07. Ca marche nickel !! bravo pour votre tuto !!
    J’ai du faire quelques modifications:
    Dans la requête, j’ai du enlever jeedom/ comme mentionné dans votre tuto.
    Dans init.lua, j’ai modifié le script pour avoir une IP fixe que je choisi, ça marche mieux chez moi comme cela.
    Donc tout va bien, (24h de test seulement !) la température remonte bien dans Jeedom.
    Petite question: serait il possible de faire remonter un chiffre après la virgule ? pour avoir un affichage comme cela: 22.3°C ?
    Je ne suis pas du tout un spécialiste de la programation, mais je pense qu’il doit y avoir moyen de le faire. Ce qui est étonnant, c’est que dans le graphique de l’historique, il y a 2 chiffres après la virgule !
    Est ce au niveau de Jeedom ou au niveau du script lua (nombre entier ou a virgule ?)
    Si vous avez une solution, je serait preneur !

    Merci,

    Bien cordialement,
    Philippe

    1. Bonjour Philippe et merci pour ton commentaire.
      Là tout de suite à froid je n’ai pas de réponse à te donner, je me replongerai dans le tuto en rentrant chez moi et te tiendrai informé si j’ai la solution.

      1. Bonsoir Arnaud,
        OK ! merci de voir cela. Je regarde aussi de mon coté, au cas ou je tomberai sur quelque chose d’intéressant !

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.