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.
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.
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).
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 !
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 :
Lecture recommandée: Guide de référence du brochage ESP32
Si vous utilisez un ESP8266, suivez plutôt le schéma suivant.
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.
3. Après avoir installé la bibliothèque SSD1306 d’Adafruit, tapez « FX” dans le champ de recherche et installez la bibliothèque.
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.
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 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://www.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();
}
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.
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)
Conclusion
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.