Arduino Nano - Afficher la température sur Oled I2C
Afficher la température et l'humidité du capteur DHT22 (ou DHT11) sur un afficheur Oled 0.96" I2C connecté à un Arduino Nano
L'afficheur Oled est très lumineux, ce qui peut étre gênant, donc allons modifier le code, afin de contrôler l'affichage de l'Oled
A la mise sous tension:
- L'afficheur n'affiche rien
- Appuyer sur le bouton-poussoir pour afficher la température et l'humidité sur l'Oled durant 05 secondes
- Au bout de 05 secondes, l'afficheur Oled s'éteint
- Ré-appuyer sur le bouton-poussoir, pour ré-afficher la température et l'humidité
- etc ...
DHT22 == Nano
- Vcc == +3.3v
- Gnd == Gnd
- Data == D5
Oled == Nano
- Vcc == +3.3v
- Gnd == Gnd
- SDA == A4 (SDA)
- SCL == A5 (SCL)
Bouton-poussoir == Nano
- 2.r == GND
- 1.l == D2
Résistance 10kohm == Nano
- un coté == +3.3v
- l'autre coté == D2
Le code .ino
// 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(9600);
// 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(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 après la virgule, mettre (28,49)
display.setTextSize(2);
display.print(h,1); // Affichage du contenu de la variable h - (h,1) = Affichage 1 chiffre après 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();
}
}
Erreur au téléversement ....
J'ai constaté que lors du premier téléversement du code, l'IDE Arduino version 2.xx, affichait l'erreur ci-dessous:
avrdude: ser_open(): can't set com-state for "\\.\COM3"
La solution pour corriger cette erreur, il suffit de réinstaller le CH341SER.EXE