Projet IoT, sonde DHT22 MySensors v2 nRF24L01 intégrée à Domoticz

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Dans ce tutoriel, nous allons développer un petit objet connecté à l’aide d’un Arduino Nano pour collecter des mesures de température et d’humidité à l’aide d’un capteur DHT22 (le code fonctionne Arduino fonctionne également avec un capteur DHT11). Les mesures seront transmises par ondes radio à l’aide d’un circuit nRF24L01 (2,4GHz) suivant le protocole MySensors v2.

 

Dernière mise à jour : 25 mars 2020

C’est un bon exercice pour découvrir la librairie MySensors et le développement d’objets connectés DIY. Si vous débutez avec la librairie MySensors, vous pouvez commencer par lire cet article.

La gateway réseau MySensor v2.3

Pour ce tutoriel, vous aurez également besoin d’une gateway réseau WiFi qui va permettre de récupérer les mesures en provenance de votre réseau de capteurs MySensors. Suivez ce tutoriel qui explique étape par étape comment l’assembler et la configurer.

Fabriquer une Gateway WiFi avec un module ESP8266
Il est très facile de communiquer avec un réseau d'objets connectés MySensors depuis en serveur domotique en fabriquant une Gateway WiFi à l'aide d'un module ESP8266
Fabriquer une Gateway WiFi avec un module ESP8266

 

Pour augmenter la portée de vos objets connectés MySensors, je vous conseille également de lire ce tutoriel qui explique comment faire

Comment augmenter la portée des modules radio nRF24L01
Lisez ce guide pour augmenter la portée radio de vos projets. Montage, type d'antenne
Comment augmenter la portée des modules radio nRF24L01

Matériel nécessaire

Conseils :

  • Achetez un module radio nRF24L01 + LNA qui dispose d’un connecteur IPEX permettant de connecter une antenne externe.
  • Utilisez un socket pour alimenter le module radio pour obtenir une meilleure stabilité de la communication radio.
  • Pour augmenter la portée, il est préférable d’ajouter une antenne d’au moins 2,5dBi. Le mieux étant une antenne 2,4GHz avec un gain de 6dBi.
Dernière mise à jour effectuée le: 14 juillet 2020 16 h 55 min

Branchement du circuit radio nRF24L01 2,4GHz 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égier 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 measure 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()  {
  // Presentation 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’à 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

D’autres tutoriels et projets MySensors pour aller plus loin

D’autres tutoriels sur la librairie MySensors pour développer vos objets connectés et les inclure à un serveur domotique DIY

Voir tous les tutoriels consacrés à MySensors

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

Ressources utiles
quel modèle esp8266 choisir
Quel modèle d'ESP8266EX choisir en 2020 ?
guide choix esp32 development board
Quel ESP32 choisir en 2020 ?
5 Commentaires
  1. Bonjour !
    Je suis ton blog avec attention étant moi même passionné mais pas aussi qualifié c’est certain.
    Juste pour dire que les erreurs de câblage sont toujours présente… je viens de les faire.
    Lorsque l’on télécharge la bibliothèques DHT by Adafruit avec le gestionnaires arduino il fait un erreur de compilation car il trouve pas Adafruit_Sensor.h ben faut le rajouter manuellement après ça marche !
    Trop géniale, franchement merci à toi pour tes tutos car tout seul je n’y arrivais pas (flemme/déprime/…)

  2. Bonjour !

    J’ai testé votre sketch : ca marche !! Mais voici quelques remarques :

    Sur votre schéma, il y a une erreur de connexion au niveau du module radio, il faut inverser les fils bleu et mauve (je me suis fait avoir, trop regardé le schéma !!). Mais pas d’erreurs dans texte !!

    Toujours sur le schéma, vous alimentez le module radio en 5V….Pas bon pour lui !!! 🙂 j’ai rajouté un régulateur de tension en 3.3V (ou faire comme vous le proposez, ajouter un adaptateur sur le module radio).

    Dans le sketch la syntaxe #include <SPI.h> ne passe pas lors de la compilation dans IDE. Mettre : #include , idem pour les deux autres #include !

    Voilà, rien de bien gênant, juste quelques précisions !! 🙂

    Pour info, j’ai fait le capteur avec une Arduino Mini, nickel !

    Je lis les valeurs de température et humidité dans Jeedom avec le plugin Mysensors.

    Le capteur semble très bien marcher, je vais le laissé en test un bon moment.

    Juste une question : pour le mode sleep, peut on passer à 1 min ? , voir plus ?

    En tout cas, merci pour votre article et le sketch fonctionnel !!

    Je vous souhaite de passer un bon réveillon et à l’année prochaine !! 🙂

    • Bonjour Philippe et merci beaucoup pour tous vos retours. Désolé pour la couleur sur le schéma, je vais corriger rapidement. Concernant le temps de mise en sommeil, oui, vous pouvez indiquer ce que vous voulez. Vous pouvez le réveiller une fois par heure si c’est suffisant. Passez un bon réveillons également et à l’année prochaine avec plein de nouveaux tutos !

    Laisser 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.

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