Accueil » Domotique » guides domotiques » Fabriquer une sonde de température connectée wifi avec nodemcu et MQTT et la lire dans Jeedom
guides domotiques

Fabriquer une sonde de température connectée wifi avec nodemcu et MQTT et la lire dans Jeedom

tuto-guide-sonde-temperature-wifi-mqtt

Guide mis à jour le 27 mars 2022

Nous avons vu dans un précédent guide du domo-lab comment mettre en place un serveur MQTT sur un Raspberry Pi pour collecter de nombreuses informations domotiques efficacement et rapidement issues de vos périphériques domotique do it yourself.

Parmi les nombreux guides DIY du blog, nous avons également vu comment réaliser une sonde de température de piscine depuis une sonde Oregon modifiée avec une sonde étanche. Aujourd’hui, je vous propose un nouveau guide afin de fabriquer une nouvelle sonde de température pour la piscine, plus performante, à l’aide d’un nodemcu et MQTT.

domotique-piscine-sonde-temperature-diy-oregon-fabrication-eco

Domotique budget : Fabriquer une sonde de température de piscine connectée performante à moindre coût

Malheureusement, il existe peu voir pas de sonde de température connectée faite pour cet usage spécifique qui soit capable de dialoguer sur un protocole exploitable par une box domotique. Il y a bien la marque Oregon qui proposait une référence…


Le node MCU dispose d’une connexion Wifi ce qui en fait un excellent support pour une problématique de portée par exemple. Avec ce module contrairement à la sonde oregon, ce n’est plus la portée de réception du RFXCom qui importe, étant donné que le node MCU utilise le réseau wifi de la maison, la portée est étendue à toute la maison et même une grande partie de l’extérieur si votre réseau wifi est correctement dimensionné. C’est mon cas, j’ai donc une portée wifi qui couvre largement la piscine et ses abords. C’est donc parfait pour ce nouveau projet.

La liste des composants

Pour fabriquer cette sonde nous aurons besoin de quelques composants et un peu de matériel.

liste-materiel-sonde-nodemcu-mqtt
Le materiel necessaire à ce guide DIY
11,99€
En stock
2 neufs à 11,99€
dernière maj 28 mars 2024 19 h 06 min
6,92€
En stock
6 neufs à 6,92€
dernière maj 28 mars 2024 19 h 06 min
5,10€
En stock
dernière maj 28 mars 2024 19 h 06 min
Last updated on 28 mars 2024 19 h 06 min

Le schéma de câblage

le câblage est assez simple à réaliser. La sonde de température étanche étant pré-cablée, il n’y a qu’à souder les fils sur les PIN du nodeMCU et ajouter la résistance de 4,7Kohms entre le fil data et le fil d’alimentation.

cablage-nodemcu-wifi-mqtt-jeedom-temp

Le code du programme

Le code n’est pas plus compliqué. Il faudra au préalable ajouter les différentes bibliothèques au programme Arduino et c’est parti. Pensez naturellement à modifier les différentes variables avec vos informations concernant le SSID wifi et son password ou encore l’adresse du serveur MQTT.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Streaming.h>

#define SLEEP_DELAY_IN_SECONDS  30
#define ONE_WIRE_BUS            D4      // DS18B20 data

const char* ssid = "IoTNet";      // Nom du wifi
const char* password = "password";    // Mot de passe wifi

const char* mqtt_server = "192.168.1.114";   // Adresse IP du brovker MQTT
const char* mqtt_username = "";     // User MQTT
const char* mqtt_password = "";    // Password MQTT
const char* mqtt_topic = "temp";   // Nom du topic MQTT

WiFiClient espClient;
PubSubClient client(espClient);

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

char temperatureString[6];

void setup() {
  // setup serial port
  Serial.begin(115200);

  // setup WiFi
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

  // setup OneWire bus
  DS18B20.begin();
}

void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client", mqtt_username, mqtt_password)) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

float getTemperature() {
  Serial << "Requesting DS18B20 temperature..." << endl;
  float temp;
  do {
    DS18B20.requestTemperatures(); 
    temp = DS18B20.getTempCByIndex(0);
    delay(100);
  } while (temp == 85.0 || temp == (-127.0));
  return temp;
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  float temperature = getTemperature();
  // convert temperature to a string with two digits before the comma and 2 digits for precision
  dtostrf(temperature, 2, 2, temperatureString);
  // send temperature to the serial console
  Serial << "Sending temperature: " << temperatureString << endl;
  // send temperature to the MQTT topic
  client.publish(mqtt_topic, temperatureString);
}

// #### OPTIONS ####

  //Serial << "Closing MQTT connection..." << endl;
  //client.disconnect();

  //Serial << "Closing WiFi connection..." << endl;
  //WiFi.disconnect();
  //delay(100);

  //Serial << "Entering deep sleep mode for " << 60 << " seconds..." << endl;
  //ESP.deepSleep(30 * 1000000);
  delay(600000);

Une fois le programme poussé dans le nodmcu, vous pouvez au besoin faire un test avec le moniteur série, ou simplement passer à l’installation de la sonde.

La configuration de Jeedom

Coté Jeedom, il faudra installer un plugin MQTT si ce n’est pas encore fait. jMQTT est un excellent plugin gratuit et très intuitif. Vos devices seront par exemple automatiquement détectés et ajoutés.

Personnalisez donc la nouvelle sonde qui apparaît dans le plugin jMQTT.

detail sonde temperature wifi nodemcu jeedom

Du côté de la commande, ajustez les paramètres comme ci-dessous.

Résultat

Voilà une sonde de température très peu coûteuse mais très performante. Le wifi permet une portée bien supérieure aux différents autres protocoles, ce qui permet de suivre la température d’un local éloigné ou encore une serre au fond du jardin ou l’eau d’une piscine comme ici.

Notez que j’ai configuré ma sonde pour poster la température toutes les 10 minutes. Ce paramètre peut parfaitement être ajusté si vous envisagez une alimentation sur batterie par exemple. J’ai laissé en commentaire les paramètres de sleep mode, si toutefois vous envisagez un module sur accus, je vous conseille vivement de l’utiliser pour prolonger la vie de vos accus.

Pour ceux qui ne connaissent pas, le sleep mode permet de passer le node mcu en veille profonde pendant un certain temps, le réveiller régulièrement pour jouer son programme, envoyer la température dans MQTT, puis retomber en sommeil profond.

De mon coté, j’ai une alimentation dans le poolhouse, c’est pourquoi j’applique un relevé plus fréquent de la température.

Si vous envisagez de vous lancer dans ce projet DIY et très peu couteux, vous aurez sans doute besoin de créer un serveur MQTT personnel. Sachez que c’est tout à fait possible sur un Raspberry Pi et nous avons même un guide pour vous accompagner.

mqtt-raspberry-pi-guide

Comment installer MQTT sur Raspberry Pi avec Mosquitto

Qui dit Do It Yourself dans la maison connectée, dit bien souvent Raspberry Pi. Vous le savez, au domo-lab, nous sommes friands de projets connectés autour du nano ordinateur. C’est pourquoi j’ai voulu vous parler de MQTT (Message Queuing Telemetry…


Domo-blog a fait le choix de ne pas polluer votre lecture avec de la publicité. Vous trouverez cependant des liens affiliés vers les produits recommandés dans le contenu. Cela ne perturbe en rien votre experience de lecture et permet de financer le blog.
Vous pouvez également soutenir le blog en m'offrant un café sur Ko-Fi.


discord

Restez connecté aux nouveautés domotiques, inscrivez-vous à notre newsletter

A propos de cet auteur

Aurélien Brunet

Chef de projet informatique, anciennement informaticien spécialisé dans l'IT industrielle, le réseau et les bases de données. Un peu geek à mes heures perdues, je me suis mis à la domotique en 2012 pour sécuriser mon domicile.
Depuis, je teste, j’installe, je code, j’améliore mon installation et surtout, je partage avec vous mon expertise via ce blog et mon podcast Domotique Chronique pour améliorer votre quotidien dans la maison connectée !

Add Comment

Cliquez ici pour poster un commentaire

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

construction et domotique
promos domotique
Choix box domotique
promos domotique

La liste des composants

Pour fabriquer cette sonde nous aurons besoin de quelques composants et un peu de matériel.

Le schéma de câblage

le câblage est assez simple à réaliser. La sonde de température étanche étant pré-cablée, il n’y a qu’à souder les

Le code du programme

Le code n’est pas plus compliqué. Il faudra au préalable ajouter les différentes bibliothèques au programme Arduino et c’est parti.

La configuration de Jeedom

Coté Jeedom, il faudra installer un plugin MQTT si ce n’est pas encore fait. jMQTT est un excellent plugin gratuit

Résultat

Voilà une sonde de température très peu coûteuse mais très performante. Le wifi permet une portée bien supérieure aux différents

  • La liste des composants
  • Le schéma de câblage
  • Le code du programme
  • La configuration de Jeedom
  • Résultat