VOUS ÊTES ICI: Accueil » Blog » Guides » Fabriquer une sonde de température connectée wifi avec nodemcu et MQTT et la lire dans Jeedom
Guides

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

tuto-guide-sonde-temperature-wifi-mqtt

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 budget : Fabriquer une sonde de température de piscine connectée performante à moindre coût

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…

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.

node mcu
câbles
sonde
résistance de 4.7K ohms
fer à souder
étain
quelques gaines thermo

liste-materiel-sonde-nodemcu-mqtt

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.

Comment créer un serveur MQTT sur le Raspberry Pi avec Mosquitto

Comment créer un serveur MQTT sur le 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…


A vous de jouer les amis. Voilà donc un nouveau guide pour vous occuper en période de confinement !

Dernière mise à jour du tarif le  2020-04-26 at 08:24

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

Choix box domotique
promos domotique