Arduino Nano - Afficher la température sur Oled I2C

nano_temperature


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 ...




Matériel et Câblage

  • cablage
  • bouton-poussoir


Matériel:

  • 1 x Arduino Nano
  • 1 x DHT22 (ou DHT11)
  • 1 x Afficheur Oled 0.96" I2C (SSSD1306)
  • 1 x Bouton poussoir
  • 1 x résistance de 10Kohom






blage:

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
(Voir schéma ci-contre)

Résistance 10kohm == Nano

  • un coté  ==  +3.3v
  • l'autre coté  ==  D2

Le code .ino

code



// 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();
    }
}


Lien vers Wokwi



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



Personnaliser

Google Analytics

Google Analytics est un service utilisé sur notre site Web qui permet de suivre, de signaler le trafic et de mesurer la manière dont les utilisateurs interagissent avec le contenu de notre site Web afin de l’améliorer et de fournir de meilleurs services.

Facebook

Notre site Web vous permet d’aimer ou de partager son contenu sur le réseau social Facebook. En l'utilisant, vous acceptez les règles de confidentialité de Facebook: https://www.facebook.com/policy/cookies/

Twitter

Les tweets intégrés et les services de partage de Twitter sont utilisés sur notre site Web. En activant et utilisant ceux-ci, vous acceptez la politique de confidentialité de Twitter: https://help.twitter.com/fr/rules-and-policies/twitter-cookies