/*
Claude EMERY 08/02/2025
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> // Communication avec les périphériques I2C
#include <Adafruit_GFX.h> // Fonction graphique pour Oled
#include <Adafruit_SSD1306.h> // Driver pour ssd1306
#include <Adafruit_Sensor.h> // Drivers pour capteurs Adafruit
#include <DHT.h> // Capteur DHT11-22 - Température - Humidité
#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); // Configuration du DHTxx
void setup() {
Serial.begin(115200);
dht.begin(); // Activation du DHTxx
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é
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!"); // Detection erreur du DHT
}
display.clearDisplay(); // Effacement Oled
// Affichage temperature
display.setTextSize(1); // Par defaut le texte est de taille normale - sans grossissement aucun
display.setCursor(0,0); // ligne colonne
display.print("Temperature: ");
display.setTextSize(2); // Taille 2*1
display.setCursor(0,10);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true); // Driver cp437 pour ° Signe de temperature Celcius
display.write(167); // code ascii 167 = °
display.setTextSize(2);
display.print("C");
// Affichage humidite
display.setTextSize(1);
display.setCursor(0, 35);
display.print("Humidite: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(h);
display.print(" %");
display.display();
}