Câblage du capteur DHT11
Le capteur DHT11 (datasheet) offre la possibilité de mesurer à la fois la température et l’humidité. Il possède 4 broches numérotées de 1 à 4. La broche 3 n’est pas utilisée.
Pour l’alimentation de ce capteur :
- la broche 1 du DHT11 est à relier au +5v de l’Arduino
- la broche 4 du DHT11 est mettre à la masse de l’Arduino (GND)
Pour la mesure :
- la broche 2 est à relier à l’entrée digitale 4 de l’Arduino
- une résistance de 4,7 kΩ est à connecter entre la branche 2 du capteur DHT11 et l’alimentation +5v
Installation d’une bibliothèque pour le capteur DHT11
Afin de nous faciliter la gestion du capteur DHT11, nous allons installer la bibliothèque Arduino SimpleDHT. Pour cela, dans le menu “Outils”, choisir “Gérer les bibliothèques”. Puis, dans la fenêtre des bibliothèques qui s’affiche, saisir “DHT11” dans la zone de recherche:

Utilisez la barre de défilement pour descendre tout en bas et installez la bibliothèque “SimpleDHT by Winlin”:

Une fois cette bibliothèque installée, fermez cette fenêtre pour passer à la programmation.
Modification du code logiciel pour le capteur DHT11
Afin de faciliter la compréhension de la mise à jour de votre code logiciel, je vous propose d’insérer des sauts de ligne dans votre code pour obtenir le résultat suivant:
// Déclaration des librairies utilisées #include "lcdgfx.h" // Déclaration globales DisplaySSD1306_128x64_I2C Afficheur_G(-1); // Fonction de démarrage, s'exécute une seule fois: void setup() { /* Sélection de la fonte de 6x8 */ Afficheur_G.setFixedFont( ssd1306xled_font6x8 ); // Initialisation et effacement de l'écran Afficheur_G.begin(); Afficheur_G.clear(); } // Fonction principale du programme, s'exécute en boucle: void loop() { Afficheur_G.printFixed (5, 16, "Temperature: xxC", STYLE_NORMAL); Afficheur_G.printFixed (5, 42, "Humidite: xx%", STYLE_NORMAL); delay(2000); Afficheur_G.clear(); }
Comme précédemment, vous allez commencer par indiquer au compilateur Arduino que vous utilisez la bibliothèque SimpleDHT:
#include "SimpleDHT.h"
Là encore il s’agit d’une bibliothèque utilisant la programmation objet. Vous aller déclarer l’objet CapteurDHT11_G de type “SimpleDHT11” en lui précisant entre parenthèse l’entrée de la carte Arduino utilisées pour le capteur (4 dans notre cas).
SimpleDHT11 CapteurDHT11_G(4);
Nous allons pouvoir maintenant appeler la fonction “CapteurDHT11_G.read” qui réalise l’acquisition des données du capteur DHT11:
CodeRetour_L = CapteurDHT11_G.read(&temperature_L, &humidite_L, NULL);
Ces valeurs lues par cette fonctions sont stockées dans deux variable “temperature_L” et “humidite_L” qu’il est nécessaire de déclarer au préalable par les instructions:
byte temperature_L = 0; byte humidite_L = 0;
La fonction “CapteurDHT11_G.read” que nous avons écrite précédemment, fournit également un indicateur de succès de l’acquisition de données. Indicateur que nous avons stocké dans la variable“CodeRetour_L” qu’il est nécessaire également de déclarer:
int CodeRetour_L;
Afin de pouvoir gérer les erreurs, testons ce “CodeRetour_L” et écrivons un message d’erreur en cas d’impossibilité d’acquérir ces données:
if( CodeRetour_L == SimpleDHTErrSuccess) {
et:
} else { Afficheur_G.printFixed (5, 30, "Erreur d'acquisition !!!", STYLE_NORMAL); }
Maintenant que nous avons nos variable “temperature_L” et “humidite_L” remplies avec les valeurs numérique de mesures, il reste à le convertir en chaine de caractères afin de pouvoir les afficher. Nous utilisons la fonction “sprintf“ du langage C portée sur Arduino pour pouvoir afficher cette température et cette humidité:
sprintf(TexteTemperature_L, "Temperature: %d C", temperature_L); sprintf(TexteHumidite_L, "Humidite: %d%%", humidite_L);
Les chaines de caractères “TexteTemperature_L” et “TexteHumidite_L” contiennent le résultat de cette conversion. Leur déclaration s’effectue par l’écriture des lignes suivantes:
char TexteTemperature_L[100]; char TexteHumidite_L[100];
Et pour terminer, nous allons modifier les 2 lignes qui utilisent la fonction “printFixed” pour sur l’écran OLED afin qu’elles utilisent les 2 chaines de caractères “TexteTemperature_L” et “TexteHumidite_L”:
Afficheur_G.printFixed (5, 16, TexteTemperature_L, STYLE_NORMAL); Afficheur_G.printFixed (5, 42, TexteHumidite_L, STYLE_NORMAL);
Votre programme de mesure de la température et de l’humidité avec Arduino est terminé, il correspond maintenant à:
// Déclaration des librairies utilisées #include "lcdgfx.h" #include "SimpleDHT.h" // Déclaration globales DisplaySSD1306_128x64_I2C Afficheur_G(-1); SimpleDHT11 CapteurDHT11_G(4); // Fonction de démarrage, s'exécute une seule fois: void setup() { /* Sélection de la fonte de 6x8 */ Afficheur_G.setFixedFont( ssd1306xled_font6x8 ); // Initialisation et effacement de l'écran Afficheur_G.begin(); Afficheur_G.clear(); } // Fonction principale du programme, s'exécute en boucle: void loop() { byte temperature_L = 0; byte humidite_L = 0; char TexteTemperature_L[100]; char TexteHumidite_L[100]; int CodeRetour_L; CodeRetour_L = CapteurDHT11_G.read(&temperature_L, &humidite_L, NULL); if( CodeRetour_L == SimpleDHTErrSuccess) { sprintf(TexteTemperature_L, "Temperature: %d C", temperature_L); sprintf(TexteHumidite_L, "Humidite: %d%%", humidite_L); Afficheur_G.printFixed (5, 16, TexteTemperature_L, STYLE_NORMAL); Afficheur_G.printFixed (5, 42, TexteHumidite_L, STYLE_NORMAL); } else { Afficheur_G.printFixed (5, 30, "Erreur d'acquisition !!!", STYLE_NORMAL); } delay(2000); Afficheur_G.clear(); }
Vous pouvez maintenant compiler votre programme puis le transférer dans l’Arduino. Voici le résultat obtenu:

Et si on améliorait notre projet ? Rendez-vous (page 3).
merci beaucoup pour le partage , ca fonctionne parfaitement 🙂