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 5V et l’alimentation +5v du capteur DHT11
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).