/*
* Claude EMERY 21/06/2025
* Affichage température/humidité + Indicateur Led
* Sur afficheur Oled 0.96" avec Adafruit_SSD1306.h
* Arduino Nano + Oled 0.96 + dht22
* DHT22 SDA en D5
* Oled 0.96 SSD1306 SDA en A4/SCL en A5
* 6 x Led + 6 x 220Ohm en pin 7, 8, 9, 10, 11 et 12
**********************************************************************
* ATTENTION
* Si erreur: avrdude: ser_open(): can't set com-state for "\\.\COM3"
* Solution: Re-installer le CH341SER.EXE
**********************************************************************
*/
// 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
// Définition des led
int v1=7, v2=8, o1=9, o2=10, r1=11, r2=12;
// Definition des seuils de température
int t1=20, t2=24, t3=26, t4=28, t5=30, t6=32;
void setup() {
Serial.begin(9600);
// Initialisation des led
pinMode(v1, OUTPUT);
pinMode(v2, OUTPUT);
pinMode(o1, OUTPUT);
pinMode(o2, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
// 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é
// Led OFF
if (t<t1){
digitalWrite(v1,0);
digitalWrite(v2,0);
digitalWrite(o1,0);
digitalWrite(o2,0);
digitalWrite(r1,0);
digitalWrite(r2,0);
}
// Led v1 ON > t1
if (t>t1){
digitalWrite(v1,1);
digitalWrite(v2,0);
digitalWrite(o1,0);
digitalWrite(o2,0);
digitalWrite(r1,0);
digitalWrite(r2,0);
}
// Led v2 ON > t2
if (t>t2){
digitalWrite(v1,1);
digitalWrite(v2,1);
digitalWrite(o1,0);
digitalWrite(o2,0);
digitalWrite(r1,0);
digitalWrite(r2,0);
}
// Led o1 ON > t3
if (t>t3){
digitalWrite(v1,1);
digitalWrite(v2,1);
digitalWrite(o1,1);
digitalWrite(o2,0);
digitalWrite(r1,0);
digitalWrite(r2,0);
}
// Led o2 ON > t4
if (t>t4){
digitalWrite(v1,1);
digitalWrite(v2,1);
digitalWrite(o1,1);
digitalWrite(o2,1);
digitalWrite(r1,0);
digitalWrite(r2,0);
}
// Led r1 ON > t5
if (t>t5){
digitalWrite(v1,1);
digitalWrite(v2,1);
digitalWrite(o1,1);
digitalWrite(o2,1);
digitalWrite(r1,1);
digitalWrite(r2,0);
}
// Led r2 ON > t6
if (t>t6){
digitalWrite(v1,1);
digitalWrite(v2,1);
digitalWrite(o1,1);
digitalWrite(o2,1);
digitalWrite(r1,1);
digitalWrite(r2,1);
}
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
// 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(35,11); // Position du curseur - colonne 35 et ligne 11 - Affichage avec 2 chiffres apres la virgule, mettre (28,49)
display.setTextSize(2);
display.print(t,1); // Affichage du contenu de la variable t - (t,1) = Affichage 1 chiffre 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(35, 49); // Position du curseur - colonne 35 et ligne 49 - Affichage avec 2 chiffres apres la virgule, mettre (28,49)
display.setTextSize(2);
display.print(h,1); // Affichage du contenu de la variable h - (h,1) = Affichage 1 chiffre apres la virgule
display.setTextSize(1);
display.print(" %");
display.display();
delay(500); // Mise à jour chaque seconde
}