/*
Claude EMERY 08/02/2025
Pascal Pradines 15/02/2025 ajout temperature ressentie
ESP32 + Oled 0.96 + dht22
DHT22 SDA en D5
Oled 0.96 SSD1306 SDA en D21 / SCL en D22
https://randomnerdtutorials.com/esp32-esp8266-dht-temperature-and-humidity-oled-display/
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#define SCREEN_WIDTH 128 // OLED largeur en pixels
#define SCREEN_HEIGHT 64 // OLED hauteur en pixels
// Declaration SSD1306 Oled I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // SDA en D21 et SCL en D22
#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);
void setup() {
Serial.begin(115200);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Detection d'erreur d'adresse Oled
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE); // Couleur du texte WHITE
}
void loop() {
delay(5000);
float t = dht.readTemperature(); // Lecture temperature
float h = dht.readHumidity(); // Lecture humidité
float tr = dht.computeHeatIndex(t, h, false); // température ressentie,Le "false" est là pour dire qu'on travaille en °C, et non en °F
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!"); // Detection erreur du DHT
}
display.clearDisplay(); // Effacement Oled
// Affichage Température et Humidité
display.setTextSize(1); // Par defaut le texte est de taille normale - Taille 1 - sans grossissement aucun
display.setCursor(0,0); // colonne 0 ligne 0
display.print("Temperature Humidite");
display.setTextSize(2); // Taille 2 pour le chiffre de la température
display.setCursor(0,10); // colonne 0 ligne 10
display.print(t,1); // 1 chiffre apres la virgule pour valeur Température
display.setTextSize(1); // Taille 1 pour affichage °
display.cp437(true); // Driver cp437 pour ° Signe de temperature Celsius
display.write(167); // code ascii 167 = °
//display.setTextSize(1); // Taille 1 pour le C
display.print("C ");
display.setTextSize(2); //Taille 2 pour le chiffre de l'humidité
display.print(h,1); // 0 chiffre apres la virgule pour valeur humidité (en %) - 1chiffre apres la virgule
display.setTextSize(1); // Taille 1 pour %
display.print("%");
// Affichage Température ressentie
display.setTextSize(1);
display.setCursor(0, 35); // colonne 0 ligne 35
display.print("Temperature ressentie");
display.setTextSize(2);
display.setCursor(30, 45); //colonne 30 ligne 45 decalage curseur pour centrage affichage
display.print(tr,1); // 1 chiffre apres la virgule pour valeur Température ressentie
display.setTextSize(1);
display.cp437(true); // Driver cp437 pour ° Signe de temperature Celsius
display.write(167); // code ascii 167 = °
display.setTextSize(2);
display.print("C ");
display.display();
/* RECHERCHE ERREUR*/
Serial.print("Temp: ");
Serial.println(t);
Serial.print("Humid: ");
Serial.println(h);
Serial.println("***************");
delay(1000);
}