ESP32/ESP8266 : relevés de température et d’humidité DHT sur l’écran OLED

ESP32/ESP8266 : relevés de température et d'humidité DHT sur l'écran OLED

Découvrez comment afficher les relevés de température et d’humidité d’un capteur DHT11/DHT22 sur un écran OLED SSD1306 à l’aide d’un ESP32 ou d’un ESP8266 avec Arduino IDE.

ESP32 ESP8266 Affichage DHT11 DHT22 Lectures de température et d'humidité dans l'affichage OLED

L’idée d’utiliser l’écran OLED avec l’ESP32 ou l’ESP8266 est d’illustrer comment vous pouvez créer une interface utilisateur physique pour vos cartes.

Aperçu du projet

Dans ce projet, nous utiliserons un Écran OLED I2C SSD1306 128 × 64 comme le montre la figure suivante.

Écran OLED I2C SSD1306 128x64 0,96 pouces pour ESP32 ESP8266

La température et l’humidité seront mesurées à l’aide du Capteur de température et d’humidité DHT22 (vous pouvez aussi utiliser DHT11).

DHT11 DHT22 Capteur de température et d'humidité pour ESP32 ESP8266

Si vous n’êtes pas familier avec le capteur DHT11/DHT22, nous vous recommandons de lire le guide suivant :

Pièces nécessaires

Pour ce tutoriel, vous avez besoin des composants suivants :

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

ESP32ESP8266 releves de temperature et dhumidite DHT sur lecran OLED

Schématique

L’écran OLED que nous utilisons communique via le protocole de communication I2C, vous devez donc le connecter aux broches I2C ESP32 ou ESP8266.

Par défaut, les broches ESP32 I2C sont :

Si vous utilisez un ESP8266, les broches I2C par défaut sont :

  • GPIO 5 (D1) : SCL
  • GPIO 4 (D2) : APS

Suivez le diagramme schématique suivant si vous utilisez une carte ESP32 :

Schéma du circuit du capteur ESP32 OLED DHT11 DHT22

Lecture recommandée: Guide de référence du brochage ESP32

Si vous utilisez un ESP8266, suivez plutôt le schéma suivant.

Schéma du circuit du capteur ESP8266 OLED DHT11 DHT22

Dans ce cas, nous connectons la broche de données DHT à GPIO 14, mais vous pouvez utiliser n’importe quel autre GPIO approprié.

Lecture recommandée: Guide de référence de brochage ESP8266

Installation des bibliothèques

Avant de télécharger le code, vous devez installer les bibliothèques pour écrire sur l’écran OLED et les bibliothèques pour lire à partir du capteur DHT.

Installation des bibliothèques OLED

Il existe plusieurs bibliothèques disponibles pour contrôler l’écran OLED avec l’ESP8266. Dans ce tutoriel, nous utiliserons les bibliothèques d’adafruit : les Bibliothèque Adafruit_SSD1306 et le Bibliothèque Adafruit_GFX. Suivez les étapes suivantes pour installer ces bibliothèques :

1. Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.

2. Taper « SSD1306 » dans la zone de recherche et installez la bibliothèque SSD1306 d’Adafruit.

Installation de la bibliothèque SSD1306 OLED Adafruit dans l'IDE Arduino

3. Après avoir installé la bibliothèque SSD1306 d’Adafruit, tapez « FX” dans le champ de recherche et installez la bibliothèque.

Installation de la bibliothèque GFX Adafruit dans l'IDE Arduino

Installation des bibliothèques de capteurs DHT

Pour lire à partir du capteur DHT, nous utiliserons les bibliothèques d’Adafruit.

1. Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.

2. Rechercher « DHT » dans la zone de recherche et installez la bibliothèque DHT d’Adafruit.

Installation de la bibliothèque Adafruit DHT dans l'IDE Arduino

3. Après avoir installé la bibliothèque DHT d’Adafruit, tapez « Capteur unifié Adafruit” dans le champ de recherche. Faites défiler vers le bas pour trouver la bibliothèque et installez-la.

Installation de la bibliothèque de pilotes Adafruit Unified Sensor dans Arduino IDE

Installation des cartes ESP

Nous allons programmer l’ESP32/ESP8266 à l’aide de l’IDE Arduino, vous devez donc avoir le module complémentaire ESP32/ESP8266 installé dans votre IDE Arduino. Si ce n’est pas le cas, suivez d’abord le didacticiel suivant qui correspond à vos besoins :

Enfin, redémarrez votre IDE Arduino.

Code

Après avoir installé les bibliothèques nécessaires, vous pouvez copier le code suivant sur votre IDE Arduino et le télécharger sur votre carte ESP32 ou ESP8266.

/*********
  Rui Santos
  Complete project details at https://raspberryme.com  
*********/

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

#define DHTPIN 14     // Digital pin connected to the DHT sensor

// Uncomment the type of sensor in use:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);

  dht.begin();

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  delay(5000);

  //read temperature and humidity
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(h) || isnan
    Serial.println("Failed to read from DHT sensor!");
  }
  // clear display
  display.clearDisplay();
  
  // display temperature
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
  
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %"); 
  
  display.display(); 
}

Afficher le code brut

Comment fonctionne le code

Voyons rapidement comment fonctionne le code.

Importation de bibliothèques

Le code commence par inclure les bibliothèques nécessaires. le Fil, Adafruit_GFX et Adafruit_SSD1306 sont utilisés pour s’interfacer avec l’écran OLED. le Adafruit_Sensor et le DHT bibliothèques sont utilisées pour s’interfacer avec les capteurs DHT22 ou DHT11.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

Créer un objet d’affichage

Ensuite, définissez les dimensions de votre écran OLED. Dans ce cas, nous utilisons un écran de 128 × 64 pixels.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Ensuite, initialisez un objet d’affichage avec la largeur et la hauteur définies précédemment avec le protocole de communication I2C (&Fil).

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

Le paramètre (-1) signifie que votre écran OLED n’a pas de broche RESET. Si votre écran OLED a une broche RESET, il doit être connecté à un GPIO. Dans ce cas, vous devez passer le numéro GPIO en paramètre.

Créer un objet DHT

Ensuite, définissez le type de capteur DHT que vous utilisez. Si vous utilisez un DHT22, vous n’avez rien à changer dans le code. Si vous utilisez un autre capteur, décommentez simplement le capteur que vous utilisez et commentez les autres.

//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

Initialiser un DHT objet capteur avec la broche et le type définis précédemment.

DHT dht(DHTPIN, DHTTYPE);

mettre en place()

Dans le mettre en place(), initialisez le moniteur série à des fins de débogage.

Serial.begin(115200);

Initialisez le capteur DHT :

dht.begin();

Ensuite, initialisez l’écran OLED.

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
  Serial.println(F("SSD1306 allocation failed"));
  for(;;);
}

Dans ce cas, l’adresse de l’écran OLED que nous utilisons est 0x3C. Si cette adresse ne fonctionne pas, vous pouvez exécuter une esquisse de scanner I2C pour trouver votre adresse OLED. Tu peux trouver le croquis du scanner I2C ici.

Ajoutez un délai pour donner le temps à l’affichage de s’initialiser, d’effacer l’affichage et de définir la couleur du texte sur blanc :

delay(2000);
display.clearDisplay();
display.setTextColor(WHITE)

Dans le boucler() C’est là que nous lisons le capteur et affichons la température et l’humidité sur l’écran.

Obtenez des lectures de température et d’humidité de DHT

La température et l’humidité sont enregistrées sur le t et h variables, respectivement. La lecture de la température et de l’humidité est aussi simple que d’utiliser le readTemperature() et readHumidity() méthodes sur le dht objet.

float t = dht.readTemperature();
float h = dht.readHumidity();

Si nous ne sommes pas en mesure d’obtenir les lectures, affichez un message d’erreur :

if (isnan(h) || isnan
  Serial.println("Failed to read from DHT sensor!");
}

Si vous obtenez ce message d’erreur, lisez notre guide de dépannage : comment réparer « Échec de la lecture du capteur DHT ».

Afficher les lectures du capteur sur l’écran OLED

Les lignes suivantes affichent la température sur l’écran OLED.

  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");

Nous utilisons le setTextSize() méthode pour définir la taille de la police, la setCurseur() définit où le texte doit commencer à être affiché et le imprimer() méthode est utilisée pour écrire quelque chose sur l’écran.

Pour imprimer la température et l’humidité, il vous suffit de passer leurs variables au imprimer() méthode comme suit :

display.print



L'étiquette « Température » ​​est affichée en taille 1 et la lecture réelle est affichée en taille 2.

Pour afficher le symbole º, nous utilisons le Page de code 437 Police de caractère. Pour cela, vous devez définir le cp437 à vrai comme suit:

display.cp437(true);

Ensuite, utilisez le écrivez() méthode pour afficher le personnage que vous avez choisi. Le symbole º correspond au caractère 167.

display.write(167);

Une approche similaire est utilisée pour afficher l'humidité :

display.setTextSize(1);
display.setCursor(0, 35);
display.print("Humidity: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(h);
display.print(" %"); 

N'oubliez pas que vous devez appeler display.display() à la fin, afin que vous puissiez réellement afficher quelque chose sur l'OLED.

display.display(); 

Lecture recommandée: ESP32 avec capteur de température et d'humidité DHT11/DHT22 utilisant Arduino IDE

Manifestation

La figure suivante montre ce que vous devriez obtenir à la fin de ce didacticiel. Les lectures d'humidité et de température sont affichées sur l'OLED.

Le capteur DHT11 DHT22 affiche les lectures d'humidité de la température dans l'affichage OLED ESP8266 ESP32 à l'aide d'Arduino IDE

Dépannage

Si votre capteur DHT ne parvient pas à obtenir les lectures ou si vous obtenez le message "Échec de la lecture du capteur DHT", lisez notre Guide de dépannage DHT pour vous aider à résoudre ce problème.

Si vous obtenez le "Échec de l'allocation SSD1306” ou si l'OLED n'affiche rien à l'écran, il peut s'agir de l'un des problèmes suivants :

Mauvaise adresse I2C

L'adresse I2C de l'écran OLED que nous utilisons est 0x3C. Cependant, le vôtre peut être différent. Assurez-vous donc de vérifier votre adresse I2C d'affichage à l'aide d'un Croquis du scanner I2C.

SDA et SCL ne sont pas correctement connectés

Assurez-vous que les broches SDA et SCL de l'écran OLED sont correctement câblées. Si vous utilisez :

  • ESP32 : connectez la broche SDA à GPIO 21 et la broche SCL à GPIO 22
  • ESP8266 : connectez la broche SDA à GPIO 4 (D2) et la broche SCL à GPIO 5 (D1)

Emballer

Nous espérons que vous avez trouvé ce didacticiel sur l'affichage des lectures de capteur sur l'écran OLED utile. L'écran OLED est un excellent moyen d'ajouter une interface utilisateur à vos projets. Si vous aimez ce projet, vous aimerez peut-être aussi savoir comment afficher les relevés des capteurs dans votre navigateur à l'aide d'un serveur Web ESP :

Vous pouvez en apprendre plus sur l'ESP32 et l'ESP8266 avec nos cours :

Merci d'avoir lu.