/*
Claude EMERY 25/03/2025
Affichage durant 05 secondes
Puis Oled eteint au bout de 05 secondes
ré-allumage de l'Oled apres pression sur bouton poussoir
ESP32 + Oled 0.96 + dht22
DHT22 SDA en D5
Oled 0.96 SSD1306 SDA en D21 / SCL en D22
Bouton poussoir en D2 + resistance 10K
*/
// Librairies
#include <Wire.h> // Gestion I2C pour Oled SDA / SCL
#include <Adafruit_GFX.h> // Affichage graphique
#include <Adafruit_SSD1306.h> // Driver Oled 0.96" - SSD1306
#include <Adafruit_Sensor.h> // Sensor Adafruit
#include <DHT.h> // DHT22-DHT11
// Configuration OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // SDA=A4 SCL=A5
//Configuration DHT
#define DHTPIN 5 // DHT22 en D5
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE); // Initialisation du DHT
//Configuration Bouton Poussoir
const int buttonPin = 2; // Broche du bouton poussoir en D2
//Configuration du timer
unsigned long timer = 0; // Stocke le temps de début
void setup() {
Serial.begin(115200);
// Définition du Bouton Poussoir - Utilisation de la résistance interne de pull
pinMode(buttonPin, INPUT_PULLUP);
// Demarrage du DHT
dht.begin();
// Initialisation de l'écran OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Échec de l'initialisation de l'écran OLED !");
for (;;);
display.display();
display.clearDisplay();
}
delay(1000);
}
void loop() {
float t = dht.readTemperature(); // Lecture temperature
float h = dht.readHumidity(); // Lecture humidité
if (isnan(h) || isnan(t)) { // Si h ou t sont faux (isnan) = affichage message d'erreur
Serial.println("Failed to read from DHT sensor!"); // Detection erreur du DHT
}
// Effacer l'écran et définition de la taille des caractéres
display.clearDisplay(); // Effacement de l'afficheur
display.setTextColor(WHITE); // Couleur du texte en BLANC
// Test état Bouton Poussoir
if (digitalRead(buttonPin) == LOW) { // Si bouton pressé (LOW car pull-up activé)
// Preparation de l'affichage température
display.setCursor(0,0); // Position du curseur - colonne 0 et ligne 0
display.setTextSize(1);
display.print("---- Temp");
display.cp437(true);
display.write(130); // Caractere é
display.print("rature ----");
display.setCursor(28,11); // Position du curseur - colonne 28 et ligne 11
display.setTextSize(2);
display.print(t,1); // Affichage du contenu de la variable t - (t,1)=Affichage 1 digit apres la virgule
display.setTextSize(1);
display.print(" ");
display.cp437(true); // Driver cp437 pour ° Signe de temperature Celcius
display.write(167); // code cp437 167 = °
display.print("C");
// Preparation de l'affichage humidité
display.setCursor(0, 37); // Position du curseur - colonne 0 et ligne 37
display.setTextSize(1);
display.print("----- Humidit");
display.cp437(true);
display.write(130); // Caractere é
display.print(" ------");
display.setCursor(28, 49); // Position du curseur - colonne 28 et ligne 49
display.setTextSize(2);
display.print(h,1); // Affichage du contenu de la variable h - (h,1)=Affichage 1 digit apres la virgule
display.setTextSize(1);
display.print(" %");
display.display();
delay(1000); // Mise à jour chaque seconde
timer = millis(); // Démarre le chrono
}
// Vérifie si les 05 secondes se sont écoulées et efface l'Oled
if (millis() - timer >= 5000) {
display.clearDisplay();
display.display();
}
}