Esp32 - Scrolling des données sur Oled 0.96"
Scrolling de la température et de l'humidité
Nous utilisons le code d'affichage de la température et de l'humidité mesuré avec un DHT22 et un ESP32 sur l'afficheur Oled 0.96".
Voir ESP32 - DHT22 - Oled 0.96" - Afficher la température
(Le câblage est inchangé)
Modification du code *.ino
- Le code en tout petit est inchangé ......
- #include <Wire.h> // Communication avec les périphérique 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
- #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
- // Declaration SSD1306 Oled I2C (SDA, SCL pins)
- Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // SDA en D21 et SCL en D22
- int x; // position du curseur sur la ligne défilante
- int minX; // position minimale du curseur,fonction de la longueur du message
- char longueurAffichage[]="123456789012345678"; // Longueur max de l'affichage car Température + Humidité = 18 caractères
- void setup() {
- Serial.begin(115200);
- dht.begin(); // Activation du DHTxx
- if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Detection d'erreur d'adresse Oled - Address 0x3D for 128x64
- Serial.println(F("SSD1306 allocation failed"));
- for(;;);
- }
- delay(200);
- display.clearDisplay(); // efface l'afficheur
- display.setTextColor(WHITE); // texte en blanc sur fond noir
- display.setTextWrap(false); // inhibe le retour a la ligne sur OLED
- display.display(); // met a jour l'affichage
- x = display.width(); // initialise le curseur a longueur OLED en pixel
- minX = -12 * strlen(longueurAffichage); // 12 = 6 pixels/charactere * text size 2
- delay(200);
- }
- void loop() {
- 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(); // efface l'afficheur
- display.setCursor(0,7); // positionne le curseur 7eme ligne de pixel
- display.setTextSize(1); // taille 1 pour le texte statique
- display.print("Temperature Humidite"); // Texte "Température Humidité"
- // Affichage temperature
- display.setTextSize(2); // taille 2 pour le texte défilant
- display.setCursor(x,20); // position curseur variable (x) en longueur, 20 pixels en hauteur
- display.print(t); // texte défilant - Affichage de la temperature
- display.print(" "); // Affichage d'un espace
- display.cp437(true); // Driver cp437 pour ° Signe de temperature Celcius
- display.setTextSize(1); // Taille 1 pour le °
- display.write(167); // Code ascii 167 = °
- display.setTextSize(2); // Taille 2 pour le C
- display.print("C "); // Affichage du caractere C + 2 espaces
- // Affichage humidite
- display.print(h); // Affichage de l'huidité
- display.print(" %"); // Affichage du caractere %
- display.display(); // met a jour l'affichage
- x=x-8; // vitesse du défilement: 1 lent, 10 rapide etc.. (Valeur initiale=4)
- if(x < minX) x= display.width(); // reinitialisation curseur en x a chaque défilement complet
- }