Gagnez jusqu'à 500€ en bon d'achat sur Amazon Promos de Noël jusqu'à -70% sur Banggood

ESP8266 + DHT22 + MQTT, voici comment nous allons apprendre à réaliser notre premier objet connecté (une sonde de température) et le connecter au serveur domotique Home Assistant. Pour réaliser cet objet connecté nous aurons besoin d’un module WiFi ESP8266, d’un capteur de température et d’humidité DHT22 et d’une Led (pour simuler la commande d’une lampe). Pour la partie domotique, nous utiliserons le logiciel Home Assistant présenté précédemment.

Configuration nécessaire

Vous aurez besoin d’un ordinateur avec les logiciels suivants installés :

  • Un Broker (serveur) MQTT. Je vous conseille Mosquitto déjà présenté dans cet article
  • Un serveur domotique. Le plus facile si vous débutez en domotique et que l’anglais ne vous rebute pas trop, est d’installer Home-Assistant décrit dans cet article.

Pour réaliser cet article, j’ai utilisé un Raspberry Pi 3 avec une connexion SSH active (si vous avez besoin d’en savoir plus sur SSH, lisez cet article au préalable).

Matériel nécessaire

Pour réaliser ce projet, vous aurez besoin du matériel suivant

esp8266 Wemos D1 mini Module ESP8266 ESP-12. Par exemple Wemos D1 Mini
led 3mm Led (optionnel, pour suivre l’activité WiFi)
resistance 220ohms Résistance 220Ω (optionnel)
Broches DHT22 Capteur de température et d’humidité

DHT11 ou DHT22

jumper dupont Jumper Dupont (optionnel)
breadboard Breadboard (optionnel)

Circuit

La Wemos D1 mini se câble comme un Arduino classique. Lorsque la Wemos D1 Mini est branchée au port USB de l’ordinateur, on récupère l’alimentation sur le Pin +5V. Pour faire fonctionner la Wemos sur batterie LiPo ou piles il suffira de brancher sur les Pin 5V et G.

Dans le programme, le DHT22 est branché sur le Pin D4, la Led sur le Pin D2.

IOT object connecté domotique home-assistant ESP8266+DHT22+MQTT_bb

Schéma de branchement du DHT22 et de la Led au module ESP8266 Wemos D1 Mini

Code

L’ESP8266 (ESP-12) peut se programmer en Lua ou à l’aide de l’IDE Arduino. Encore une fois c’est question de goût. J’ai une préférence pour l’IDE par habitude mais surtout les librairies ESP8266Wifi et PubSub simplifient vraiment la vie des développeurs.

Pour publier les mesures sur le Broket MQTT Mosquitto, nous allons avoir besoin d’intégrer les 3 librairies suivante à notre projet Arduino :

  • ESP8266WiFi.h : cette librairie et la boîte à outil idéal pour connecter (et reconnecter) un ESP8266 à internet, à un serveur…
  • PubSubClient.h : cette librairie permet d’envoyer et de recevoir des messages MQTT et de gérer le QoS
  • DHT.h : cette librairie permet de récupérer facilement les mesures du capteur DHT11 ou DHT22

Créez un nouveau projet et collez le code suivant en l’adaptant à votre configuration.

Le code du projet est également disponible sur GitHub ici


Si vous découvre les modules ESP8266, lisez d’abord cet article pour apprendre comment le programmer et téléverser un programme à l’aide de l’IDE Arduino.

Intégration à un serveur domotique Home Assistant

Si vous ne connaissez pas Home-Assistant, je vous invite à lire cet article qui explique comment l’installer et y configurer votre box pour y accéder depuis internet.

Ce qui est génial avec Home-Assistant c’est qu’il n’y a qu’un script à modifier pour pouvoir afficher la température et l’humidité publiée par l’ESP8266 sur Mosquitto. Allez dans le répertoire d’installation d’Home-Assistant.io

puis ouvrez le fichier de configuration

On ajoute une section mqtt

Maintenant on ajoute un nouveau capteur (sensor) et on récupère la température sur le topic sensor/temperature. La valeur se trouve dans le payload

On fait de même pour l’humidité en ajoutant un sensor 2

Enregistrez la configuration (Ctrl + X puis O) et lancez le serveur avec la commande hass. Actualisez la page dans votre navigateur pour voir apparaître la mesure de température et d’humidité.

home assistant mqtt sensor esp8266

Allumer, éteindre une Led depuis Home-Assistant

Ajoutons maintenant un interrupteur qui va nous permettre d’allumer ou d’éteindre un Led. C’est un exemple général. On active simplement une sortie de l’Arduino. On pourrait très simplement remplacer la Led par un relai.

Arrêtez Home-Assistant et ouvrez de nouveau le fichier de configuration.yaml dans lequel on va ajouter un bloc switch

esp8266 wemos d1 mini home assistant switch interrupteur mqtt  

Relancez Home-Assistant. Vous avez maintenant un nouveau widget nommé “Switch” dans lequel se trouve l’interrupteur de la cuisine. Appuyez sur l’éclair pour allumer la LED.

Si vous avez configuré votre box pour rendre accessible le serveur Home-Assistant depuis internet, vous pouvez même allumer et éteindre la led depuis votre smartphone.

IOT object connecté domotique home-assistant ESP8266+DHT22+MQTT wemos d1 mini

J’espère que vous avez apprécié ce petit projet de découverte des modules ESP8266 intégrés à un serveur domotique. Dans un prochain article nous l’intégrerons à Jeedom.

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous dés inscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

  • visvic

    Bonjour 🙂

    Super tuto !! comme dis par email les tutos sont géniaux !

    Bon, je me heurte à un petit problème :s. J’ai repris la même base de votre projet et adapté un capteur DS18B20. Je récupère la température, je la convertis pour en faire une chaine et ensuite je publie sur test.mosquitto.fr. SAUF que très souvent les messages ne sont pas publiés. On regarde d’un peu plus près la doc de l’API (http://pubsubclient.knolleary.net/api.html#publish1) et la le message est soit trop long soit la connection est perdu. Pourtant il y a bien une vérif qui est faite en amont pour la connection wifi ET mqtt.

    Voici mon code:

    #include
    #include
    #include

    #define wifi_ssid “NUMERICABLE-A9BE”
    #define wifi_password “**********”
    #define mqtt_server “test.mosquitto.org”

    long lastMsg = 0;
    float DS18B20_temperature;

    WiFiClient espClient;
    PubSubClient client(espClient);
    OneWire ds(2);

    void setup() {
    Serial.begin(115200);
    setup_wifi();
    client.setServer(mqtt_server, 1883);
    }

    /* ————— loop ———————————– */
    void loop() {
    long now = millis();
    if (now – lastMsg > 1000 * 10) {
    lastMsg = now;

    if (WiFi.status() != WL_CONNECTED) {setup_wifi();}
    if (!client.connected()) {reconnect();}
    client.loop();

    char message_temperature[10] = “”;
    DS18B20_temperature = getTemperatureDS18b20();
    dtostrf(DS18B20_temperature, 3, 2, message_temperature);
    if (client.publish(“victor”, message_temperature, true)){
    Serial.println(“message publie”);
    } else {
    Serial.println(“Message non publie”);
    }
    Serial.println(message_temperature);
    }
    }

    /* ————— Connexion au réseau WIFI ———————————– */
    void setup_wifi() {
    delay(10);
    Serial.println();
    Serial.print(“Connection a “);
    Serial.print(wifi_ssid);

    WiFi.begin(wifi_ssid, wifi_password);

    while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(” .”);
    }

    Serial.println(“”);
    Serial.println(“WiFi connecte, “);
    Serial.print(“adresse IP : “);
    Serial.println(WiFi.localIP());
    }

    /* ————— Connexion au serveur MQTT ———————————– */
    void reconnect() {
    while (!client.connected()) {
    Serial.print(“Connexion au serveur MQTT…”);
    if (client.connect(“ESP8266Client”)) {
    Serial.println(“OK”);
    } else {
    Serial.println(“KO, erreur : “);
    Serial.print(client.state());
    if (client.state() == -2) {
    if (WiFi.status() != WL_CONNECTED) {setup_wifi();}
    }
    Serial.println(“On attend 5 secondes avant de recommencer”);
    delay(5000);
    }
    }
    }

    /* ————— Acquisition de la température ———————————– */
    float getTemperatureDS18b20() {
    byte i;
    byte data[12];
    byte addr[8];
    float temp = 0.0;

    ds.search(addr);

    // Cette fonction sert à surveiller si la transmission s’est bien passée
    if (OneWire::crc8( addr, 7) != addr[7]) {
    Serial.println(“CRC is not valid!”);
    return false;
    }

    // Demander au capteur de mesure et mémoriser la température
    ds.reset();
    ds.select(addr);
    ds.write(0x44);

    delay(800);

    // Demander au capteur de nous envoyer la température mémorisé
    ds.reset();
    ds.select(addr);
    ds.write(0xBE);

    // Le MOT reçu du capteur fait 9 octets, on les charge donc un par un dans le tableau data[]
    for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
    }

    // Puis on converti la température (*0.0625 car la température est stockée sur 12 bits)
    temp = ( (data[1] << 8) + data[0] ) * 0.0625;

    // Réinitialisation de la recherche (évite erreur CRC !!)
    ds.reset_search();
    return temp;
    }

    et voici le moniteur série (extrait):

    Connexion au serveur MQTT…OK
    Message non publie
    27.19
    Connexion au serveur MQTT…OK
    Connexion au serveur MQTT…OK
    Message non publie
    27.19
    Connexion au serveur MQTT…OK
    Message publie <=== HAA il s'envoie enfin :p
    27.19
    Connexion au serveur MQTT…OK
    Message non publie
    27.13
    Connexion au serveur MQTT…OK
    Message non publie
    27.19
    Connexion au serveur MQTT…OK
    Message non publie
    27.19

    bref, j'espère ne pas avoir été trop bourrin en mettant tout cela ici, et si vous avez une petit idée je suis preneur 🙂

    Merci d'avance =))
    A très vite

    Edit 23/08/2016, 18h09:
    Il faut laisser client.loop() en dehors du if qui s'effectue toutes les dix secondes 😉

    • christophe

      Bonjour visvic. Tout d’abord merci beaucoup pour votre message. Avez-vous essayé d’installer un serveur (+ client) mosquitto sur un ordi local. J’imagine que le serveur qui fait tourner test.mosquitto.org doit être très sollicité et qu’il n’y a aucune garantie sur son bon fonctionnement (du moins en permanence). Ca vaudrait le coup d’essayer en local avant de remettre en cause le programme. Tenez moi au courant. A très bientôt.

  • Ferhat MAMECHE

    Bonjour, je n’ai pas encore acheté le Raspberry Pi 3 mais j’ai tout de même essayé d’installer homeassistant, ce que je remarque par rapport aux vidéos tuto c’est que je n’ai pas forcément les mêmes options et notamment “straming update” est-ce normal? sinon comment installer homeassistant concrètement, étape par étape

    • Bonjour Ferhat. Home Assistant est un projet qui bouge beaucoup et rapidement. Pas facile pour moi de connaitre tous les paramètres de tous les logiciels domotiques. Pour installer sur Raspberry, il y a ce tutoriel https://www.projetsdiy.fr/home-assistant-serveur-domotique-raspberry-pi/, sinon on peut aussi tester sur Windows, Linux, macOS, NAS avec Docker (https://www.projetsdiy.fr/tester-logiciels-domotique-docker-jeedom-openhab-domoticz-ha/). A très bientôt.

      • Ferhat MAMECHE

        Je veux savoir si le Raspberry Pi3 est primordial pour réaliser ce projet, configurer et gérer HomeAssistant

        Le 20 janv. 2017 4:52 AM, “Disqus” a écrit :

        • Vous pouvez m’en dire un peu plus sur votre projet ?

          • Ferhat MAMECHE

            Je cherche à refaire le projet ESP8266+DHT22+MQTT, mais lorsque je telecharge et essaie d’utiliser homeassistant, je remarque que je n’ai pas le même que dans les tutoriels, je n’ai pas notamment l’option “streaming update”, je ne peux pas rajouter aussi la partie Sensor au fichier configuration.ymal,  serait-ce parce que je n’ai pas utiliser de raspberry ?

            Sent from my Galaxy Tab® A——– Message d’origine ——–De : Disqus Date : 20/01/2017 23:24 (GMT-05:00) À : mameche.ferhat@gmail.com Objet : Re: Comment on ESP8266 + DHT22 + MQTT : réaliser votre 1er objet connecté
            “Vous pouvez m’en dire un peu plus sur votre projet ?”

            Settings

            A new comment was posted on projetsdiy

            Projets DIY

            Vous pouvez m’en dire un peu plus sur votre projet ?

            11:24 p.m., Friday Jan. 20

            |

            Other comments by Projets DIY

            Reply

            to Projets DIY

            Projets DIY’s comment is in reply to

            Ferhat MAMECHE:

            Je veux savoir si le Raspberry Pi3 est primordial pour réaliser ce projet, configurer et gérer HomeAssistantLe 20 janv. 2017 4:52 AM, “Disqus … Read more

            You’re receiving this message because you’re signed up to receive notifications about replies to ferhatmameche.

            You can unsubscribe
            from emails about replies to ferhatmameche
            by replying to this email with “unsubscribe”
            or reduce the rate with which these emails are sent by
            adjusting your notification settings.

          • Bonjour Ferhat, si vous débutez en domotique, je vous conseille plutot de démarrer avec Domoticz sur Raspberry Pi https://www.projetsdiy.fr/domoticz-installation-configuration-raspberry-pi-3/ ou jeedom https://www.projetsdiy.fr/jeedom-raspberry-pi-3-installation-wifi/ (en français)

          • Ferhat MAMECHE

            Mais est-ce que ce projet est réalisable avec ce que vous me suggérer, et dois je toujours utiliser MTQQ

            Le 23 janv. 2017 1:47 PM, “Disqus” a écrit :

          • Oui sans aucun problème, il y a tous les tutos necessaires sur mon blog 😉

          • Ferhat MAMECHE

            Vous pouvez m’envoyer le lien du blog et ainsi pouvoir entamer cela ? Merci d’avance

            Le 23 janv. 2017 3:34 PM, “Disqus” a écrit :

          • Ferhat MAMECHE

            je voulais savoir, dans le cas de l’utilisastion d’un Raspeberry, aurai-je besoin d’un module WiFi ESP8266 ou pas? parce que je suis novice dans le domaine et je ne sais pas à quoi sert exactement le Raspeberry

            2017-01-23 13:43 GMT-05:00 Disqus :

          • Bonjour Ferhat. Pas facile de tout expliquer dans un commentaire mais voici pour commencer quelques infos :
            – Raspberry = (mini) ordinateur qui fonctionne sous Linux (une version spéciale pour les microprocesseurs ARM, différent d’Intel). On installe un logiciel domotique dessus (Domoticz, Jeedom…)
            – ESP8266 : arduino avec du Wifi. Si vous voulez fabriquer vos propres modules domotiques
            Pour faire de la domotique, vous pouvez achetez des modules (détecteurs d’ouverture de porte, de fumée, météo, interrupteur…) qui vont communiquer avec le logiciel domotique. Il y a beaucoup de façon de communiquer. ZWave (ondes radio made in samsung), Ethernet (pas très utilisé), RFLink (ondes radio), WiFi…. la liste est longue comme le bras.
            Bref, vous êtes au bon endroit pour débuter (sur mon blog) il y a déjà pas mal de choses, prenez le temps de (tout) lire et faire des essais. Bon courage.

  • Frederic S

    Bonjour!
    J’ai quelques petites questions concernant le code de l’ESP8266
    1- A quoi sert le petit bout de code:
    if (now – lastRecu > 100 ) {
    lastRecu = now;
    client.subscribe(“homeassistant/switch1”);

    Si j’ai bien compris, on re-souscrit au topic homeassistant/switch1 toutes les 100ms ?
    Pourquoi pas le faire à l’initi et dans reconnect (juste une fois) ? (je decouvre, peut etre que j’ai mal compris comment ca fonctionne)

    2- Le code:
    //Envoi d’un message par minute
    if (now – lastMsg > 1000 * 10) {

    Pour moi ca fait toutes les 10secondes et non une fois par minutes, me trompe-je ?

    3- si j’ai bien compris la fonction millis() repart à zero au bout d’un moment ( https://www.arduino.cc/en/reference/millis ), au bout de 50jours environs…
    Pour faire un exercice par de soucis, mais si on veut faire un capteur type station météo, il faudrait gerer le moment du retour à 0 non ?
    Pourquoi utiliser millis() plutot qu’un simple delay(x)

    Super tutoriel par contre! je découvre l’ESP8266 et mqtt, c’est génial d’avoir fait un petit exemple avec la chaîne complète.

    • Bonjour Frédéric,
      1. Oui, c’est ça effectivement. On vérifie toutes les 100ms si un nouveau message a été envoyé par home assistant. Je vais faire un article sur le sujet, ce sera plus claire
      2. Oui, c’est exact, j’ai mis un temps plus court pour mes tests et ensuite j’ai oublié de modifier mon code . Merci !
      3. millis() donne le temps écoulé depuis le démarrage de l’Arduino / ESP8266. C’est n’est pas bloquant. On va simplement stocker le dernier passage dans la boucle lastRecu = now pour le tester au tour suivant. Par contre lorsqu’on appel un delay, le reste du programme est bloqué
      Merci beaucoup et à très bientôt. J’ai mis en place une newsletter par email. L’envoi se fera tous les vendredis.

  • Ferhat MAMECHE

    Bonjour, ai-je nécessairement besoin d’un Raspeberry pour réaliser ce projet ou pas ?

    • Bonjour Ferhat. Non ce n’est pas nécessaire. Vous pouvez installer un broker MQTT sur windows (si vous êtes sur Windows). MQTT est un protocole très répandu , c’est même un standard depuis l’année dernière, vous pourrez récupérer les données sur beaucoup de logiciels. A très bientôt

  • Alasta

    Bonjour,

    n’est-il pas necessaire de mettre une résistance de pull-up sur la sonde ?
    a+

    • Bonjour Alasta. C’est vrai qu’elle est toujours présente sur les anciens tutos et en principe il en faut une mais ça fonctionne très bien sans.

  • BabyfacePi

    Bonjour

    Merci pour ce tuto, étant donné qu’ils il y plusieurs autres pin de disponibles.
    Est-il possible de connecter d’autres capteurs ?
    cdmt

    • Bonjour et merci beaucoup. Oui absolument. Tout va dépendre du type de bus de données utilisé par le capteur/actionneur. Les capteurs numériques I2C utilisent 2 broches (D1 et D2) mais ils sont connectés en réseau. On peut donc avoir jusqu’à 127 capteurs (de mémoire). Si c’est un signal analogique, on ne pourra connecter qu’un seul capteur car l’ESP8266 ne dispose que d’un seul convertisseur (à moins d’utiliser une carte additionnelle qui va ajouter des entrées supplémentaires). A très bientôt

      • BabyfacePi

        Merci pour votre réponse très rapide

        Du coup pour ajouter un autre objets j’ai juste à a jouter un objet et changer le pin D2 par D4 ou D4 par exemple ?

        //Création des objets
        DHT dht(DHTPIN, DHTTYPE);
        DHT dht2(DHTPIN, DHTTYPE);
        WiFiClient espClient;
        PubSubClient client(espClient);
        //Création des objets

        void setup() {
        Serial.begin(9600); //Facultatif pour le debug
        pinMode(D2,OUTPUT); //Pin 2
        setup_wifi(); //On se connecte au réseau wifi
        client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT
        client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message
        dht.begin();
        }
        void setup() {
        Serial.begin(9600); //Facultatif pour le debug
        pinMode(D3,OUTPUT); //Pin 3
        setup_wifi(); //On se connecte au réseau wifi
        client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT
        client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message
        dht.begin();
        }

        • Oui, c’est ça. Par contre il ne peut y avoir qu’une seule fonction setup. C’est la boucle d’initialisation. Pour créer un 2nd objet (au sens objet C/C++) on fera par exemple
          int PINDHT1 D4;
          int PINDHT2 D2;
          DHT dht(PINDHT1,DHTTYPE);
          DHT dht2(PINDHT2,DHTTYPE);

          • BabyfacePi

            D’accord
            Merci beaucoup

          • Avec plaisir

          • BabyfacePi

            149 lines (126 sloc)

            4.19 KB

            /*

            Projet d’apprentissage d’un objet connecté (IoT) pour réaliser une sonde de température

            ESP8266 + DHT22 + LED + MQTT + Home-Assistant

            Projets DIY (https://www.projetsdiy.fr) – Mai 2016

            Article du projet : https://www.projetsdiy.fr/esp8266-dht22-mqtt-projet-objet-connecte/

            Licence : MIT

            */

            #include

            #include

            #include “DHT.h” // Librairie des capteurs DHT

            #define wifi_ssid “SSID”

            #define wifi_password “MOT-DE-PASSE”

            #define mqtt_server “ADRESSE-IP-MOSQUITTO”

            #define mqtt_user “guest” //s’il a été configuré sur Mosquitto

            #define mqtt_password “guest” //idem

            #define temperature_topic “sensor/temperature” //Topic température

            #define humidity_topic “sensor/humidity” //Topic humidité

            //Buffer qui permet de décoder les messages MQTT reçus

            char message_buff[100];

            long lastMsg = 0; //Horodatage du dernier message publié sur MQTT

            long lastRecu = 0;

            bool debug = false; //Affiche sur la console si True

            #define DHTPIN D4 // Pin sur lequel est branché le DHT

            // Dé-commentez la ligne qui correspond à votre capteur

            //#define DHTTYPE DHT11 // DHT 11

            #define DHTTYPE DHT22 // DHT 22 (AM2302)

            //Création des objets

            int PINDHT1 D4;
            int PINDHT2 D3;
            DHT dht(PINDHT1,DHTTYPE);
            DHT dht2(PINDHT2,DHTTYPE);

            WiFiClient espClient;

            PubSubClient client(espClient);

            void setup() {

            Serial.begin(9600); //Facultatif pour le debug

            pinMode(D2,OUTPUT); //Pin 2

            setup_wifi(); //On se connecte au réseau wifi

            client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT

            client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message

            dht.begin();

            }

            //Connexion au réseau WiFi

            void setup_wifi() {

            delay(10);

            Serial.println();

            Serial.print(“Connexion a “);

            Serial.println(wifi_ssid);

            WiFi.begin(wifi_ssid, wifi_password);

            while (WiFi.status() != WL_CONNECTED) {

            delay(500);

            Serial.print(“.”);

            }

            Serial.println(“”);

            Serial.println(“Connexion WiFi etablie “);

            Serial.print(“=> Addresse IP : “);

            Serial.print(WiFi.localIP());

            }

            //Reconnexion

            void reconnect() {

            //Boucle jusqu’à obtenur une reconnexion

            while (!client.connected()) {

            Serial.print(“Connexion au serveur MQTT…”);

            if (client.connect(“ESP8266Client”, mqtt_user, mqtt_password)) {

            Serial.println(“OK”);

            } else {

            Serial.print(“KO, erreur : “);

            Serial.print(client.state());

            Serial.println(” On attend 5 secondes avant de recommencer”);

            delay(5000);

            }

            }

            }

            void loop() {

            if (!client.connected()) {

            reconnect();

            }

            client.loop();

            long now = millis();

            //Envoi d’un message par minute

            if (now – lastMsg > 1000 * 10) {

            lastMsg = now;

            //Lecture de l’humidité ambiante

            float h = dht.readHumidity();

            // Lecture de la température en Celcius

            float t = dht.readTemperature();

            //Inutile d’aller plus loin si le capteur ne renvoi rien

            /*

            if ( isnan(t) || isnan(h)) {

            Serial.println(“Echec de lecture ! Verifiez votre capteur DHT”);

            return;

            }

            */

            if ( debug ) {

            Serial.print(“Temperature : “);

            Serial.print(t);

            Serial.print(” | Humidite : “);

            Serial.println(h);

            }

            client.publish(temperature_topic, String(t).c_str(), true); //Publie la température sur le topic temperature_topic

            client.publish(humidity_topic, String(h).c_str(), true); //Et l’humidité

            }

            if (now – lastRecu > 100 ) {

            lastRecu = now;

            client.subscribe(“homeassistant/switch1”);

            }

            }

            // Déclenche les actions à la réception d’un message

            // D’après http://m2mio.tumblr.com/post/30048662088/a-simple-example-arduino-mqtt-m2mio

            void callback(char* topic, byte* payload, unsigned int length) {

            int i = 0;

            if ( debug ) {

            Serial.println(“Message recu => topic: ” + String(topic));

            Serial.print(” | longueur: ” + String(length,DEC));

            }

            // create character buffer with ending null terminator (string)

            for(i=0; i<length; i++) {

            message_buff[i] = payload[i];

            }

            message_buff[i] = '';

            String msgString = String(message_buff);

            if ( debug ) {

            Serial.println("Payload: " + msgString);

            }

            if ( msgString == "ON" ) {

            digitalWrite(D2,HIGH);

            } else {

            digitalWrite(D2,LOW);

            }

            }

          • BabyfacePi

            Re bonjour je reviens vous embêter à nouveau depuis la derniere fois j’ai tenté d’additionner d’autres Capteurs sur des pin libres mais au moment de charger le code sur la carte j’ai erreur rouge je voudrais rajouter un DHT11 SR pin3 et DS18B20 sur pin 5 mais null comme je suis je n’y arrive pas pouvez-vous ou quelqu’un d’autre m’aider s’il vous plait? il y a beaucoup d’autres pin de disponible je trouve domage de ne pas pouvoir les utiliser.

            Merci d’avance

          • Bonsoir Babyface. Serait-il possible de m’envoyer le message d’erreur pour que je puisse chercher une piste ?

          • BabyfacePi

            Bonsoir
            Désolé unpeu du retatrd j’ai essayé de trouver la solution par moi même mais je n’ai pas reussi.

            J’obtien cette erreur :

            exit status 1
            expected initializer before ‘D4’

          • BabyfacePi

            exit status 1
            ‘DS18B20’ was not declared in this scope

          • Bonsoir Babyface. D’après cette erreur, l’objet DS18B20 n’a pas été initialisé (instancié) avant d’être utilisé. Un bon exemple à suivre http://forum.arduino.cc/index.php?topic=176697.0
            #include
            #include

            // Data wire is plugged into pin 2 on the Arduino
            #define ONE_WIRE_BUS 2

            // Setup a oneWire instance to communicate with any OneWire devices
            // (not just Maxim/Dallas temperature ICs)
            OneWire oneWire(ONE_WIRE_BUS);

            // Pass our oneWire reference to Dallas Temperature.
            DallasTemperature sensors(&oneWire);

            => donc cela va donner avec l’objet DS18B20 : DallasTemperature DS18B20(&oneWire);

            Voilà, amusez vous bien !

          • BabyfacePi

            Merci
            Beaucoup, mais j’ai laissé tombé, je suis novice dans le domaine.

          • D’accord, je vais ajouter le thème pour un prochain projet si ça peut vous aider. Bon week-end

          • BabyfacePi

            Ouiii!!
            Ca m’aiderai beaucoup,
            J’ai des aquariums super posé, j’ai voulue utiliser ce projet pour mettre plusieur DS18B20 sur seul carte ESP8622 wemos mais mes competances sont limitées 🙂

          • D’accord alors, je vais m’y coller !

          • BabyfacePi

            Merci beaucoup

          • Il manque probablement le point virgule à la ligne précédente

    • BabyfacePi

      Merci pour votre réponse très rapide

      Du coup pour ajouter un autre objets j’ai juste à a jouter un objet et changer le pin D2 par D4 ou D4 par exemple ?

      //Création des objets
      DHT dht(DHTPIN, DHTTYPE);
      DHT dht2(DHTPIN, DHTTYPE);
      WiFiClient espClient;
      PubSubClient client(espClient);
      //Création des objets

      void setup() {
      Serial.begin(9600); //Facultatif pour le debug
      pinMode(D2,OUTPUT); //Pin 2
      setup_wifi(); //On se connecte au réseau wifi
      client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT
      client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message
      dht.begin();
      }
      void setup() {
      Serial.begin(9600); //Facultatif pour le debug
      pinMode(D3,OUTPUT); //Pin 3
      setup_wifi(); //On se connecte au réseau wifi
      client.setServer(mqtt_server, 1883); //Configuration de la connexion au serveur MQTT
      client.setCallback(callback); //La fonction de callback qui est executée à chaque réception de message
      dht.begin();
      }

Projets DIY - Domotique et objets connectés à faire soi-même