Accueil / Domotique / MySensors v2 : mesure de température et d’humidité (DHT11/DHT22)

MySensors v2 : mesure de température et d’humidité (DHT11/DHT22)

Le firmware MySensors permet de réaliser très facilement une sonde de température et d’humidité à base de DHT11 ou DHT22 dont on pourra très facilement récupérer les valeurs sur un logiciel domotique ou un programme quelconque. C’est un bon exercice pour découvrir la librairie MySensors et la domotique. Si vous débutez avec la librairie MySensors, vous pouvez commencer par cet article.

https://twitter.com/projetsdiy/status/771319183304949761

Matériel nécessaire

arduino nano v3 atmega328p Arduino Nano (conseillé)
rflink nrf24l01 Module radio nRF24L01

Portée standard ou longue portée (1000m ou environnement difficile)

adaptateur cablage nRF24L01 Adaptateur avec régulateur de tension 3V3 pour module antenne nRF24L01 ou nRF24L01 + PA + LNA
Broches DHT22 Capteur de température et d’humidité

DHT11 ou DHT22

jumper dupont Jumper Dupont
breadboard Breadboard

Branchement nRF24L01 et DHT22

Il est préférable d’utiliser un adaptateur avec un régulateur de tension intégré pour obtenir une meilleure qualité d’émission / réception du signal radio (et c’est aussi beaucoup plus facile à câbler). Le branchement du module nRFF24L01 à l’Arduino Nano est le suivant :

  • 5V -> V+
  • GND -> GND
  • D13 -> SCK (vert)
  • D12 -> MISO (violet)
  • D11 -> MOSI (bleu)
  • D10 -> CSN (jaune)
  • D9 -> CE (orange)
  • D2 -> IRQ (gris)

Le DHT22 ne comporte que 3 broches à câbler.

L’équipe de développement MySensors conseille l’utilisation d’un Arduino Nano comme base pour un noeud MySensors. Il est également possible d’ajouter un noeud à une gateway ou d’utiliser un ESP8266 depuis la v2.

mysensors arduino micro dht22 nrf24l01

Code

Copiez le code ci-dessous dans un nouveau projet Arduino. Vous pouvez modifier les paramètres suivants :

  • La force du signal. Ici il est réglé à LOW pour privilégié la portée compte tenu du faible volume de données à transmettre et de la fréquence de l’envoi.
  • Le type de module Radio.
  • L’identifiant du noeud. La v2 est stable mais l’attribution automatique d’un identifiant est encore aléatoire. Pour le moment, je préfère attribuer un numéro manuellement.
  • Le paramètre SLEEP_NODE permet de mettre en sommeil le module pour la période SLEEP_TIME

Vous aurez peut être aussi besoin d’ajouter la librairie DHT depuis le gestionnaire de librairie. Contrairement aux exemples que l’on trouve sur internet, j’ai utilisé la librairie Adafruit qui est disponible dans le gestionnaire de librairie.

/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 *******************************
 *
 * REVISION HISTORY
 * Version 1.0 - PROJETS DIY
 * 
 * DESCRIPTION
 * Example sketch showing how to measue light level using a LM393 photo-resistor 
 * http://www.mysensors.org/build/light
 */

// Active le mode debug / Enable debug prints to serial monitor
#define MY_DEBUG 

// Mode Radio / Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#define MY_RF24_PA_LEVEL RF24_PA_LOW

// Noeud de l'objet / Object Node
#define MY_NODE_ID 3

#include <SPI.h>
#include <MySensors.h>  
#include <DHT.h> 

#define CHILD_ID_TEMP 0  
#define CHILD_ID_HUM 1
#define SLEEP_NODE true // Mettre à True pour activer la mise en sommeil (Sleep Mode) / True to activate Sleep Mode
unsigned long SLEEP_TIME = 10 * 1000; // Temps de mise en sommeil (en ms) / Sleep time between reads (in milliseconds)

#define DHTPIN 3        // Broche sur laquelle est branché le DHT / what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), DHT11

float lastTemp;
float lastHum;
boolean metric = true; 
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);

void setup() { 
}

void presentation()  {
  // Présenttion du sketch / Send the sketch version information to the gateway and Controller
  sendSketchInfo("Sonde Temp/Hum DHT22", "1.0");

  // Déclaration des capteurs attachés au noeud
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_HUM, S_HUM);
}

void loop()      
{    
  DHT dht(DHTPIN, DHTTYPE,3); // Creation d'un objet dht dans la loop sinon les valeurs ne sont pas mesurées au réveil
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  if (isnan(temperature)) {
      Serial.println("Impossible de lire la temperature sur le DHT");
  } else {
    if (temperature != lastTemp) {
      lastTemp = temperature;
      if (!metric) {
        temperature = dht.readTemperature(true);
      }
      
      Serial.print("T: ");
      Serial.print(temperature);
      Serial.print(" | H: ");
      Serial.println(humidity);
      send(msgTemp.set(temperature, 1));
      send(msgHum.set(humidity, 1));
    } else {
      Serial.println("Temperature identique => on force l'envoi");  
      Serial.print("T: ");
      Serial.print(temperature);
      Serial.print(" | H: ");
      Serial.println(humidity);
      send(msgTemp.set(temperature, 1));
      send(msgHum.set(humidity, 1));
    }
  }  
  
  if (SLEEP_NODE) {
    Serial.println("Sleep");
    sleep(SLEEP_TIME);
  } else {
    delay (SLEEP_TIME);
  }
}

Visualisation sous Domoticz

Il ne nous reste plus qu’on intégrer cette petite sonde de température et d’humidité dans un logiciel domotique tel que Domoticz. Si vous débutez en domotique (ou Domoticz), lisez d’abord cet article qui explique comment ajouter une gateway réseau à base d’ESP8266.

Allez dans les dispositifs. Dès le premier envoi de données, Domoticz l’a ajouté automatiquement à la liste des dispositifs disponibles. Appuyez sur la flèche verte et donnez lui un nom.

domoticz dispositif mysensors temperature humidite dht11 dht22 arduino nano

Allez ensuite sur la page Température pour voir votre nouvelle sonde MySensors.

domoticz dispositif mysensors temperature humidite dht11 dht22 arduino nano