Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Code OLED 128*64
#1
MESSAGE MAJ SI NOUVELLE VERSION.
  - 11/07/24 : Ecran 1, affichage T° au lieu et place de la version si sonde de température présente.
  - 15/07/24 : Gestion bouton poussoir(on/off ou on avec extinction auto) ou capteur de présence (on avec extinction auto).
  - 12/10/24 : Adaptation version 12
  - 05/12/24 : Condensé 1 seul écran : Affichage logo au démarrage. Ensuite Ecran 1 alternance première ligne : injection/heure routage et Ip niveau wifi

Défilement de 4 écrans. Pour écran SSD1306 et SH1106.
[Image: ECR1-2-2.png]

[Image: ECR2.png]

[Image: ECR3.png]

[Image: Logo.png]

Si manque d'espace sur l'esp32 ne pas oublier :
Dans l'IDE, configuration carte, partition : Minimal SPIFFS 1,9MB with OTA

L'ecran 3 nécessite au moins une version 11 du routeur F1ATB.

Bibliothèque à ajouter à l'IDE :
  - Adafruit_GFX.h
  - Selon l'écran Adafruit_SSD1306.h ou Adafruit_SH110X.h


Les lignes à ajouter dans solar_router_V...ino :
  -  "InitSSD();" après la ligne "Serial.println("Booting");"
 - "OledAffiche();" après l'appel "EnergieQuotidienne();"



Créer un nouveau fichier (OLED.ino) dans le projet avec le code suivant :

A faire avant compilation du fichier :

   - Commenter/dé-commenter les lignes suivantes en fonction de votre écran.
   #define USE_SSD1306 1 //Pour les écrans SSD1306
   //#define USE_SH110X 1 //Pour les écrans SH1106


   - Définir les pin SDA,SCL pour l'écran : SDA_PIN et SCL_PIN ligne 34/35
   - Si vous voulez gérer un bouton poussoir/capteur de présence pour affichage ou non, définir le pin du bouton/capteur : pinBtnOled ligne 45
     Dans ce cas bouton ou capteur :
            - Définir le statut de l'écran à off au démarrage "OledState=false;" ligne 43
            - Définir le mode ligne 46, "ModeBtnOled" : 0 = bouton pour allumer/éteindre, 1 = Bouton/capteur pour allumer l'écran (Extinction auto après 40s)

1) Code avec défilement de 4 écrans
Code :
/***********************************
AFFICHAGE SUR SSD1306/SH110X
*************************************/

//Choisir son écran ICI ************************
#define USE_SSD1306 1 //Pour les écrans SSD1306
//#define USE_SH110X 1 //Pour les écrans SH1106
//Le reste du code ne devrait s'adapter à la compilation
//Voir pour modifier les pin (gpio) écran et bouton
//Choix ecran *************************************

#include <Adafruit_GFX.h>

#define OLED_BLACK 0
#define OLED_WHITE 1
#define OLED_INVERSE 2

//Pour SSD1306
#if(USE_SSD1306)
  #include <Adafruit_SSD1306.h>
#endif

//Pour écran SH110X
#if(USE_SH110X)
  #include <Adafruit_SH110X.h>
#endif


#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// Définir les broches SDA et SCL personalisées pour écran
#define SDA_PIN 26 //26
#define SCL_PIN 25 //25
bool OLED_on = false; //Si problème avec l'écran, les procédures sont ignorées

//*******BOUTON OLED***********/
//Changement état gérer dans boucle affichage, déconseillé dans l'interruption.
//gestion de la latence du bouton
volatile unsigned long button_time = 0;
int btn_latence = 250; // Latence en ms
volatile bool OledState=true; //Statut oled On/Off (Mettre à la valeur désiré au démarrage)
volatile bool OledChange=true; //Changement sur bouton, true = applique le statut OledState (affichage oui/non)
int pinBtnOled = 0; //Indiquer ici le pin du bouton pour gérer l'écran/capteur de présence
int ModeBtnOled = 0; // 0 = bouton poussoir (on/off sur écran), 1 = capteur présence ou bouton poussoir pour allumage on (off automatique)
unsigned long DureeAffichage = 40000; //Durée affichage 40 secondes
//******BOUTON OLED ***********/

int MATERIEL_ROUTAGE=-1; //Pour la recherche TRIAC OU RELAIS

#if USE_SSD1306
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

//Pour écran SH110X
#if USE_SH110X
  Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

const unsigned char bitmap_Sun[] PROGMEM = {
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  0x07,0xF0, // .....#######....
  0x11,0xC4, // ...#...###...#..
  0x20,0x02, // ..#...........#.
};

const unsigned char bitmap_Off[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x1F,0xF8, // ...##########...
  0x1F,0xF8, // ...##########...
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
};

const unsigned char bitmap_Signal1[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x40,0x00, // .#..............
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal2[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x04,0x00, // .....#..........
  0x0C,0x00, // ....##..........
  0x1C,0x00, // ...###..........
  0x5C,0x00, // .#.###..........
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal3[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x40, // .........#......
  0x00,0xC0, // ........##......
  0x01,0xC0, // .......###......
  0x05,0xC0, // .....#.###......
  0x0D,0xC0, // ....##.###......
  0x1D,0xC0, // ...###.###......
  0x5D,0xC0, // .#.###.###......
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal4[] PROGMEM = {
  0x00,0x04, // .............#..
  0x00,0x0C, // ............##..
  0x00,0x1C, // ...........###..
  0x00,0x1C, // ...........###..
  0x00,0x5C, // .........#.###..
  0x00,0xDC, // ........##.###..
  0x01,0xDC, // .......###.###..
  0x05,0xDC, // .....#.###.###..
  0x0D,0xDC, // ....##.###.###..
  0x1D,0xDC, // ...###.###.###..
  0x5D,0xDC, // .#.###.###.###..
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal0[] PROGMEM = {
  0x03,0xE0, // ......#####.....
  0x1F,0xFC, // ...###########..
  0x3E,0x3E, // ..#####...#####.
  0x38,0x7E, // ..###....######.
  0x71,0xF7, // .###...#####.###
  0x73,0xC7, // .###..####...###
  0x77,0x87, // .###.####....###
  0x3F,0x0E, // ..######....###.
  0x3E,0x1E, // ..#####....####.
  0x1F,0xFC, // ...###########..
  0x03,0xE0, // ......#####.....
};

const unsigned char bitmap_Logo[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x03,0xC1,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0xFF,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x01,0xFE,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x07,0xF8,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x0F,0xF0,0x60,0x61,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x3F,0xC0,0xE0,0x60,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0x80,0xE0,0x60,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFE,0x00,0xE0,0x60,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xFC,0x00,0xE0,0x60,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF8,0x00,0xE0,0x60,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x00,0xE0,0x60,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0x7C,0x03,0xFE,0x0E,0x07,0xF1,0xFF,0x8F,0xF0,0x00,
  0x01,0xE0,0x00,0x60,0x60,0x00,0x7C,0x03,0xFF,0x1E,0x0F,0xF9,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x00,0x00,0x00,0x00,0x7C,0x03,0xFE,0x3E,0x0F,0xFC,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x3E,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x03,0xFF,0xFC,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0E,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0x7F,0xE0,0x00,0x7C,0x03,0x00,0x0F,0x0C,0x1C,0x18,0x0E,0x38,0x00,
  0x01,0xE0,0x00,0x3F,0xC0,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x1C,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x0C,0x18,0x0F,0xF0,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x1F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x7F,0xC0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x01,0xFF,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x0F,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x03,0xFF,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x0F,0xE0,0xFF,0xC0,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x7F,0x80,0x3F,0xF1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF9,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x1F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
};

int cligSun = 0;
int BoucleOled = 0;

//Initialisation
void InitSSD(){
   //OLED init
  Wire.begin(SDA_PIN, SCL_PIN);

  //FORCE RESET DE L'ECRAN SI PIN PARTICULIER POUR RESET
  if(OLED_RESET != -1) {
    pinMode (OLED_RESET, OUTPUT);
    digitalWrite(OLED_RESET, HIGH);
    digitalWrite(OLED_RESET, LOW);
    delay(100);
  }
  #if USE_SSD1306
    delay(250);
    if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
      Serial.println("OLED SSD1306 init failed");
    }
    else {
        //Allumer l'écran.
       
        display.ssd1306_command(SSD1306_DISPLAYON);
        //oled_command(SH110X_DISPLAYON); //SH110X
        OledLogo();
        display.setCursor(70,50);
        display.print(F("Init..."));
        display.display();
        OLED_on=true;
    }
  #endif
 
  #if USE_SH110X
    delay(250); // wait for the OLED to power up
    if (!display.begin(SCREEN_ADDRESS, true)) { //Pour SH110X
      Serial.println("OLED SH110X init failed");
    }
    else {
      //Allumer l'écran.
      // ?
      OledLogo();
      display.setCursor(70,50);
      display.print(F("Init..."));
      display.display();
      OLED_on=true;
    }
  #endif

  //Partie gestion bouton
  if(pinBtnOled > 0) {
    pinMode(pinBtnOled, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(pinBtnOled), OledBouton, RISING) ;
  }
}

//Procédure boucle des écrans
void OledAffiche(){
  if(OLED_on==false) {
    return;
  }
  if(ModeBtnOled==1 && OledState==true) {
    //Contrôle durée d'affichage
    if(button_time-btn_latence+DureeAffichage < millis()) {
      //Durée affichage dépassé, on éteint
      OledState=false;
      OledChange=true;
    }
  }
  if (OledChange) {
    OledChange=false; //Changement traité
    if(OledState) {
      //Allumer écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYON);
      #endif
      #if USE_SH110X
        // ?
      #endif
      BoucleOled=0; //reprise début boucle écran
    }
    else {
      //Eteindre écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYOFF);
      #endif
      #if USE_SH110X
        // ?, pas trouvé la commande pour off
        display.clearDisplay();
        display.display();
      #endif
      return;
    }
  }
  if(MATERIEL_ROUTAGE == -1) {
    //Recherche matériel
     for (int i = 0; i < NbActions; i++) {
        if(LesActions[i].Actif != 0 && MATERIEL_ROUTAGE == -1 ) MATERIEL_ROUTAGE=i;
     }
  }
  if (BoucleOled <= 10 ) {
      //Ecran 1
      display.clearDisplay();
      BarreEtatDroite();
      Ecran1();
      display.display();
      BoucleOled++;
  }
  else if (BoucleOled <= 14 ) {
      //Ecran 2
      display.clearDisplay();
      Ecran2();
      display.display();
      BoucleOled++;
  }
   else if (BoucleOled <= 18 ) {
      //Ecran 3
      display.clearDisplay();
      Ecran3();
      display.display();
      BoucleOled++;
  }
  else if (BoucleOled <= 20 ) {
      OledLogo();
      BoucleOled++;
  }
  else {
    BoucleOled=0;
  }
}

//contenue écran 1
void Ecran1(){
  if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  //WIFI
  display.setCursor(0,1);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !"));
  }

  //Ligne de séparation
  display.drawLine(0,13,128,13,OLED_WHITE);

  //Puissance sonde maison
  display.setCursor(0,16);
  display.println(F("Puissance"));
  display.setCursor(0,29);
  display.setTextSize(2);
  display.print(int(PuissanceS_M - PuissanceI_M));
 
  display.setTextSize(1);
  //Ouverture du triac/ssr
  int Ouv = -1;
  if(MATERIEL_ROUTAGE != -1) {
    Ouv = 100 - Retard[MATERIEL_ROUTAGE];
  }
  if(Ouv>0) {
    //Icone clignote, signale le routage
    if(cligSun==0) {
      display.drawBitmap(92, 0, bitmap_Sun , 16, 10, OLED_WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(92, 0, bitmap_Off , 16, 10, OLED_WHITE);
    }
  }
  else {
    //Pas de triac/relais...
  }
  display.setCursor(0,38);
  if(Ouv == -1) {
    display.setCursor(72,16);
    display.print(F("Ouv")); //Triac erreur
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    display.setCursor(82,30);
    display.print(F(" !"));
  }
  else {
    //Affiche jauge Triac/Relais
    display.setCursor(72,16);
    display.print(F("Ouv"));
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    float t = (float(33)/100)*Ouv;
    display.fillRect(60+2, 16+(33-int(t)), 10-4 , int(t), OLED_WHITE);
    display.setTextSize(2);
    display.setCursor(73,29);
    display.print(Ouv);
    display.setTextSize(1);
  }

  // Affichage de la température canal 0
  if (TemperatureValide[0] > 0){
    display.setCursor(0, 57);
    display.print(F("T "));
    display.print(int(temperature[0]));
  }
  else
  {
    display.setCursor(0, 57);
    display.print(F("V"));
    display.print(Version);
  }

  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(108-(durOn.length()*6),57);
  display.print(durOn);
}

//barre d'action affiché en ecran 1
void BarreEtatDroite() { /*Affiche une barre d'état WIFI et mode action*/
   if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  display.drawLine(110,13,110,64,OLED_WHITE); //Ligne séparatrice à droite
  //Niveau Wifi
  if (WiFi.status() == WL_CONNECTED) {
    //Icone niveau connection
    int NivSignal = int(WiFi.RSSI()) ;
    if (NivSignal<-80) {display.drawBitmap(112, 0, bitmap_Signal1 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-60) {display.drawBitmap(112, 0, bitmap_Signal2 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-45) {display.drawBitmap(112, 0, bitmap_Signal3 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-30) {display.drawBitmap(112, 0, bitmap_Signal4 , 16, 12, OLED_WHITE); }
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE) : display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE);
  }
  //Mode en cours du Triac/ssr...
  int Mode = 0;
  float laTemperature = -120;
  if (TemperatureValide[0] > 0) {  //La température de ce canal est valide
    laTemperature = temperature[0];
  }
  if (MATERIEL_ROUTAGE != -1) Mode = LesActions[MATERIEL_ROUTAGE].TypeEnCours(HeureCouranteDeci, laTemperature, LTARFbin, Retard[MATERIEL_ROUTAGE]);
  display.setCursor(115,17);
  display.setTextColor(OLED_WHITE);
  if(Mode!=1){
    display.print(F("OF"));
  }
  else {
    display.fillRect(114,16,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("OF"));
  }

  display.setCursor(115,29);
  display.setTextColor(OLED_WHITE);
  if(Mode!=2){
    display.print(F("ON"));
  }
  else {
    display.fillRect(114,28,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("ON"));
  }

  display.setCursor(115,41);
  display.setTextColor(OLED_WHITE);
  if(Mode!=3){
    display.print(F("PW"));
  }
  else {
    display.fillRect(114,40,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("PW"));
  }

  display.setCursor(115,53);
  display.setTextColor(OLED_WHITE);
  if(Mode!=4){
    display.print(F("TR"));
  }
  else {
    display.fillRect(114,52,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("TR"));
  }
  display.setTextColor(OLED_WHITE);
}

//Ecran 2
void Ecran2() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  display.println(F("Injectee"));
  display.println(F("jour"));
  display.print(EnergieJour_M_Injectee);
  display.print(F(" Wh"));
  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
}

//Ecran 3
void Ecran3() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  float H = 0;
  if(MATERIEL_ROUTAGE != -1 ) H = LesActions[MATERIEL_ROUTAGE].H_Ouvre;
  display.println(F("Heure"));
  display.println(F("router"));
  display.print(H);
  display.println(F("h"));


  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,57);
  display.print(F("V"));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(128-(durOn.length()*6),57);
  display.print(durOn);
}

//Affichage du logo
void OledLogo() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.drawBitmap(0, 0, bitmap_Logo , 128, 68, OLED_WHITE);
  display.setCursor(70,50);
  display.print(F("V "));
  display.print(Version);
  display.display();
}

//Gestion du bouton
void OledBouton() {
 
   switch (ModeBtnOled)
   {
   case 0 :
      //Gestion bouton poussoir (allume/éteint)
      if (button_time > millis()) break;
      OledState = !OledState; // inverse l’état de la variable
      button_time = millis() + btn_latence;
      OledChange=true;
    break;
  
   case 1 :
      //Capteur ou bouton avec extinction auto (allume)
      if (button_time > millis()) break; //on garde la notion de latence
      if (OledState == false) {
        OledState = true; // inverse l’état de la variable
        button_time = millis() + btn_latence;
        OledChange=true;
      }
    break;

   default:
    break;
    }
 
}

2 ) Condensé en 1 seul écran : la 1er ligne alterne entre infos injection heure router et infos de connexion (Ip niveau wifi)

Code :
/***********************************
AFFICHAGE SUR SSD1306/SH110X
*************************************/

//Choisir son écran ICI ************************
#define USE_SSD1306 1 //Pour les écrans SSD1306
//#define USE_SH110X 1 //Pour les écrans SH1106
//Le reste du code ne devrait s'adapter à la compilation
//Voir pour modifier les pin (gpio) écran et bouton
//Choix ecran *************************************

#include <Adafruit_GFX.h>

#define OLED_BLACK 0
#define OLED_WHITE 1
#define OLED_INVERSE 2

//Pour SSD1306
#if(USE_SSD1306)
  #include <Adafruit_SSD1306.h>
#endif

//Pour écran SH110X
#if(USE_SH110X)
  #include <Adafruit_SH110X.h>
#endif


#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// Définir les broches SDA et SCL personalisées pour écran
#define SDA_PIN 26 //26
#define SCL_PIN 25 //25
bool OLED_on = false; //Si problème avec l'écran, les procédures sont ignorées

//*******BOUTON OLED***********/
//Changement état gérer dans boucle affichage, déconseillé dans l'interruption.
//gestion de la latence du bouton
volatile unsigned long button_time = 0;
int btn_latence = 250; // Latence en ms
volatile bool OledState=true; //Statut oled On/Off (Mettre à la valeur désiré au démarrage)
volatile bool OledChange=true; //Changement sur bouton, true = applique le statut OledState (affichage oui/non)
int pinBtnOled = 0; //Indiquer ici le pin du bouton pour gérer l'écran/capteur de présence
int ModeBtnOled = 0; // 0 = bouton poussoir (on/off sur écran), 1 = capteur présence ou bouton poussoir pour allumage on (off automatique)
unsigned long DureeAffichage = 40000; //Durée affichage 40 secondes
//******BOUTON OLED ***********/

int MATERIEL_ROUTAGE=-1; //Pour la recherche TRIAC OU RELAIS

#if USE_SSD1306
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

//Pour écran SH110X
#if USE_SH110X
  Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

const unsigned char bitmap_Sun[] PROGMEM = {
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  0x07,0xF0, // .....#######....
  0x11,0xC4, // ...#...###...#..
  0x20,0x02, // ..#...........#.
};

const unsigned char bitmap_Off[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x1F,0xF8, // ...##########...
  0x1F,0xF8, // ...##########...
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
};

const unsigned char bitmap_Signal1[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x40,0x00, // .#..............
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal2[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x04,0x00, // .....#..........
  0x0C,0x00, // ....##..........
  0x1C,0x00, // ...###..........
  0x5C,0x00, // .#.###..........
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal3[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x40, // .........#......
  0x00,0xC0, // ........##......
  0x01,0xC0, // .......###......
  0x05,0xC0, // .....#.###......
  0x0D,0xC0, // ....##.###......
  0x1D,0xC0, // ...###.###......
  0x5D,0xC0, // .#.###.###......
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal4[] PROGMEM = {
  0x00,0x04, // .............#..
  0x00,0x0C, // ............##..
  0x00,0x1C, // ...........###..
  0x00,0x1C, // ...........###..
  0x00,0x5C, // .........#.###..
  0x00,0xDC, // ........##.###..
  0x01,0xDC, // .......###.###..
  0x05,0xDC, // .....#.###.###..
  0x0D,0xDC, // ....##.###.###..
  0x1D,0xDC, // ...###.###.###..
  0x5D,0xDC, // .#.###.###.###..
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal0[] PROGMEM = {
  0x03,0xE0, // ......#####.....
  0x1F,0xFC, // ...###########..
  0x3E,0x3E, // ..#####...#####.
  0x38,0x7E, // ..###....######.
  0x71,0xF7, // .###...#####.###
  0x73,0xC7, // .###..####...###
  0x77,0x87, // .###.####....###
  0x3F,0x0E, // ..######....###.
  0x3E,0x1E, // ..#####....####.
  0x1F,0xFC, // ...###########..
  0x03,0xE0, // ......#####.....
};

const unsigned char bitmap_Logo[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x03,0xC1,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0xFF,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x01,0xFE,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x07,0xF8,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x0F,0xF0,0x60,0x61,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x3F,0xC0,0xE0,0x60,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0x80,0xE0,0x60,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFE,0x00,0xE0,0x60,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xFC,0x00,0xE0,0x60,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF8,0x00,0xE0,0x60,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x00,0xE0,0x60,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0x7C,0x03,0xFE,0x0E,0x07,0xF1,0xFF,0x8F,0xF0,0x00,
  0x01,0xE0,0x00,0x60,0x60,0x00,0x7C,0x03,0xFF,0x1E,0x0F,0xF9,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x00,0x00,0x00,0x00,0x7C,0x03,0xFE,0x3E,0x0F,0xFC,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x3E,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x03,0xFF,0xFC,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0E,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0x7F,0xE0,0x00,0x7C,0x03,0x00,0x0F,0x0C,0x1C,0x18,0x0E,0x38,0x00,
  0x01,0xE0,0x00,0x3F,0xC0,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x1C,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x0C,0x18,0x0F,0xF0,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x1F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x7F,0xC0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x01,0xFF,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x0F,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x03,0xFF,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x0F,0xE0,0xFF,0xC0,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x7F,0x80,0x3F,0xF1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF9,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x1F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
};

int cligSun = 0;
int BoucleOled = 0;

//Initialisation
void InitSSD(){
   //OLED init
  Wire.begin(SDA_PIN, SCL_PIN);

  //FORCE RESET DE L'ECRAN SI PIN PARTICULIER POUR RESET
  if(OLED_RESET != -1) {
    pinMode (OLED_RESET, OUTPUT);
    digitalWrite(OLED_RESET, HIGH);
    digitalWrite(OLED_RESET, LOW);
    delay(100);
  }
  #if USE_SSD1306
    delay(250);
    if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
      Serial.println("OLED SSD1306 init failed");
    }
    else {
        //Allumer l'écran.
       
        display.ssd1306_command(SSD1306_DISPLAYON);
        //oled_command(SH110X_DISPLAYON); //SH110X
        OledLogo();
        display.setCursor(70,50);
        display.print(F("Init..."));
        display.display();
        OLED_on=true;
    }
  #endif
 
  #if USE_SH110X
    delay(250); // wait for the OLED to power up
    if (!display.begin(SCREEN_ADDRESS, true)) { //Pour SH110X
      Serial.println("OLED SH110X init failed");
    }
    else {
      //Allumer l'écran.
      // ?
      OledLogo();
      display.setCursor(70,50);
      display.print(F("Init..."));
      display.display();
      OLED_on=true;
    }
  #endif

  //Partie gestion bouton
  if(pinBtnOled > 0) {
    pinMode(pinBtnOled, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(pinBtnOled), OledBouton, RISING) ;
  }
}

//contenue écran 1
void Ecran1(int info = 0){
 
  if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  display.setCursor(0,1);

  //Info première ligne (Ip, Injectée + Heure routé)
  switch (info)
  {
    case 0 :
      //IP
      if (WiFi.status() == WL_CONNECTED) {
      display.print(WiFi.localIP().toString());
      }
      else {
      (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !"));
      }
      break;

    case 1 :
      //Info injection et heure routé
      display.print("-I ");display.print(EnergieJour_M_Injectee);display.print("w");
      float H = 0;
      if(MATERIEL_ROUTAGE != -1 ) H = LesActions[MATERIEL_ROUTAGE].H_Ouvre;
      display.print(" -H ");display.print(H);
      break;
  }

  //Ligne de séparation
  display.drawLine(0,13,128,13,OLED_WHITE);

  //Puissance sonde maison
  display.setCursor(0,16);
  display.println(F("Puissance"));
  display.setCursor(0,29);
  display.setTextSize(2);
  display.print(int(PuissanceS_M - PuissanceI_M));
 
  display.setTextSize(1);
  //Ouverture du triac/ssr
  int Ouv = -1;
  if(MATERIEL_ROUTAGE != -1) {
    Ouv = 100 - Retard[MATERIEL_ROUTAGE];
  }
  if(Ouv>0 && info==0) {
    //Icone clignote, signale le routage
    if(cligSun==0) {
      display.drawBitmap(92, 0, bitmap_Sun , 16, 10, OLED_WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(92, 0, bitmap_Off , 16, 10, OLED_WHITE);
    }
  }
  else {
    //Pas de triac/relais...
  }
  display.setCursor(0,38);
  if(Ouv == -1) {
    display.setCursor(73,16);
    display.print(F("Ouv")); //Triac erreur
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    display.setCursor(82,30);
    display.print(F(" !"));
  }
  else {
    //Affiche jauge Triac/Relais
    display.setCursor(72,16);
    display.print(F("Ouv"));
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    float t = (float(33)/100)*Ouv;
    display.fillRect(60+2, 16+(33-int(t)), 10-4 , int(t), OLED_WHITE);
    display.setTextSize(2);
    display.setCursor(73,29);
    display.print(Ouv);
    display.setTextSize(1);
  }

  // Affichage de la température canal 0
  if (TemperatureValide[0] > 0){
    display.setCursor(0, 57);
    display.print(F("T "));
    display.print(int(temperature[0]));
  }
  else
  {
    display.setCursor(0, 57);
    display.print(F("V"));
    display.print(Version);
  }

  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(108-(durOn.length()*6),57);
  display.print(durOn);
}

//barre d'action affiché en ecran 1
void BarreEtatDroite(int info = 0) { /*Affiche une barre d'état WIFI et mode action*/
   if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  display.drawLine(110,13,110,64,OLED_WHITE); //Ligne séparatrice à droite
  //Niveau Wifi
  if (info == 0) {
    if (WiFi.status() == WL_CONNECTED) {
      //Icone niveau connection
      int NivSignal = int(WiFi.RSSI()) ;
      if (NivSignal<-80) {display.drawBitmap(112, 0, bitmap_Signal1 , 16, 12, OLED_WHITE); }
      else if(NivSignal<-60) {display.drawBitmap(112, 0, bitmap_Signal2 , 16, 12, OLED_WHITE); }
      else if(NivSignal<-45) {display.drawBitmap(112, 0, bitmap_Signal3 , 16, 12, OLED_WHITE); }
      else if(NivSignal<-30) {display.drawBitmap(112, 0, bitmap_Signal4 , 16, 12, OLED_WHITE); }
    }
    else {
      (WiFi.getMode() == WIFI_STA)==false ? display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE) : display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE);
    }
  }
  //Mode en cours du Triac/ssr...
  int Mode = 0;
  float laTemperature = -120;
  if (TemperatureValide[0] > 0) {  //La température de ce canal est valide
    laTemperature = temperature[0];
  }
  if (MATERIEL_ROUTAGE != -1) Mode = LesActions[MATERIEL_ROUTAGE].TypeEnCours(HeureCouranteDeci, laTemperature, LTARFbin, Retard[MATERIEL_ROUTAGE]);
  display.setCursor(115,17);
  display.setTextColor(OLED_WHITE);
  if(Mode!=1){
    display.print(F("OF"));
  }
  else {
    display.fillRect(114,16,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("OF"));
  }

  display.setCursor(115,29);
  display.setTextColor(OLED_WHITE);
  if(Mode!=2){
    display.print(F("ON"));
  }
  else {
    display.fillRect(114,28,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("ON"));
  }

  display.setCursor(115,41);
  display.setTextColor(OLED_WHITE);
  if(Mode!=3){
    display.print(F("PW"));
  }
  else {
    display.fillRect(114,40,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("PW"));
  }

  display.setCursor(115,53);
  display.setTextColor(OLED_WHITE);
  if(Mode!=4){
    display.print(F("TR"));
  }
  else {
    display.fillRect(114,52,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("TR"));
  }
  display.setTextColor(OLED_WHITE);
}

//Ecran 2
void Ecran2() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  display.println(F("Injectee"));
  display.println(F("jour"));
  display.print(EnergieJour_M_Injectee);
  display.print(F(" Wh"));
  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
}

//Ecran 3
void Ecran3() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  float H = 0;
  if(MATERIEL_ROUTAGE != -1 ) H = LesActions[MATERIEL_ROUTAGE].H_Ouvre;
  display.println(F("Heure"));
  display.println(F("router"));
  display.print(H);
  display.println(F("h"));


  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,57);
  display.print(F("V"));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(128-(durOn.length()*6),57);
  display.print(durOn);
}

//Affichage du logo
void OledLogo() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.drawBitmap(0, 0, bitmap_Logo , 128, 68, OLED_WHITE);
  display.setCursor(70,50);
  display.print(F("V "));
  display.print(Version);
  display.display();
}

//Gestion du bouton
void OledBouton() {
   switch (ModeBtnOled)
   {
   case 0 :
      //Gestion bouton poussoir (allume/éteint)
      if (button_time > millis()) break;
      OledState = !OledState; // inverse l’état de la variable
      button_time = millis() + btn_latence;
      OledChange=true;
    break;
  
   case 1 :
      //Capteur ou bouton avec extinction auto (allume)
      if (button_time > millis()) break; //on garde la notion de latence
      if (OledState == false) {
        OledState = true; // inverse l’état de la variable
        button_time = millis() + btn_latence;
        OledChange=true;
      }
    break;

   default:
    break;
    }
}


//Procédure boucle des écrans
void OledAffiche(){
  if(OLED_on==false) {
    return;
  }
  if(ModeBtnOled==1 && OledState==true) {
    //Contrôle durée d'affichage
    if(button_time-btn_latence+DureeAffichage < millis()) {
      //Durée affichage dépassé, on éteint
      OledState=false;
      OledChange=true;
    }
  }
  if (OledChange) {
    OledChange=false; //Changement traité
    if(OledState) {
      //Allumer écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYON);
      #endif
      #if USE_SH110X
        // ?
      #endif
      BoucleOled=0; //reprise début boucle écran
    }
    else {
      //Eteindre écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYOFF);
      #endif
      #if USE_SH110X
        // ?, pas trouvé la commande pour off
        display.clearDisplay();
        display.display();
      #endif
      return;
    }
  }
  if(MATERIEL_ROUTAGE == -1) {
    //Recherche matériel
     for (int i = 0; i < NbActions; i++) {
        if(LesActions[i].Actif != 0 && MATERIEL_ROUTAGE == -1 ) MATERIEL_ROUTAGE=i;
     }
  }
  if (BoucleOled <= 10 ) {
      //Ecran 1
      display.clearDisplay();
      BarreEtatDroite(1); //Sans WIFI
      Ecran1(1); //Affiche avec entête info
      display.display();
      BoucleOled++;
  }
  else if (BoucleOled <= 12 ) {
      //Ecran 2
      display.clearDisplay();
      BarreEtatDroite(0); //Avec niveau WIFI
      Ecran1(0); //Affiche avec entête IP
      display.display();
      BoucleOled++;
  }
  else {
    BoucleOled=0;
  }
}
Répondre
#2
Merci Raphael, Mon écran Oled est un SH1106. Tu pourrais le faire pour ceux modèles?
Répondre
#3
(23-06-2024, 07:46 PM)AL53 a écrit : Merci Raphael, Mon écran Oled est un SH1106. Tu pourrais le faire pour ceux modèles?

Difficile sans le matériel, une tentative, dis moi si ça passe !

Adaptation ecran SH1106

Bib à télécharger ADAFRUIT_SH110X.

Procédure dans setup InitSSD();
Procédure affichage OledAffiche();

Code fichier :
Code :
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3c ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// Définir les broches SDA et SCL personalisées
#define SDA_PIN 33
#define SCL_PIN 32
bool OLED_on = false;

Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// #define SSD1306_RESET 0xE4

const unsigned char bitmap_Sun[] PROGMEM = {
  0x00,0x00, // ................
  0x20,0x82, // ..#.....#.....#.
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  0x07,0xF0, // .....#######....
  0x07,0xF0, // .....#######....
  0x11,0xC4, // ...#...###...#..
  0x20,0x02, // ..#...........#.
  0x40,0x81, // .#......#......#
  0x00,0x80  // ........#.......
};

const unsigned char bitmap_Off[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x1F,0xF8, // ...##########...
  0x1F,0xF8, // ...##########...
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00  // ................
};

const unsigned char bitmap_Logo[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..........................########..............................................................................................
  0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........................############............................................................................................
  0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......................##############...........................................................................................
  0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...........................############.........................................................................................
  0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .............................###########........................................................................................
  0x00,0x00,0x03,0xC1,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ......................####.....###########......................................................................................
  0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..................########.......##########.....................................................................................
  0x00,0x00,0xFF,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................########..........###########...................................................................................
  0x00,0x01,0xFE,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...............########.............##########..................................................................................
  0x00,0x07,0xF8,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .............########.................##########................................................................................
  0x00,0x0F,0xF0,0x60,0x61,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ............########.....##......##....##########...............................................................................
  0x00,0x3F,0xC0,0xE0,0x60,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..........########......###......##......##########.............................................................................
  0x00,0x7F,0x80,0xE0,0x60,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .........########.......###......##.......##########............................................................................
  0x00,0xFE,0x00,0xE0,0x60,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........#######.........###......##.........########............................................................................
  0x01,0xFC,0x00,0xE0,0x60,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#######..........###......##..........########...........................................................................
  0x01,0xF8,0x00,0xE0,0x60,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......######...........###......##...........#######...........................................................................
  0x01,0xF0,0x00,0xE0,0x60,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#####............###......##............#######..........................................................................
  0x01,0xE0,0x00,0xE0,0x60,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.............###......##.............######..........................................................................
  0x01,0xE0,0x00,0xE0,0x60,0x00,0x7C,0x03,0xFE,0x0E,0x07,0xF1,0xFF,0x8F,0xF0,0x00, // .......####.............###......##..............#####........#########.....###......#######...##########...########............
  0x01,0xE0,0x00,0x60,0x60,0x00,0x7C,0x03,0xFF,0x1E,0x0F,0xF9,0xFF,0x8F,0xF8,0x00, // .......####..............##......##..............#####........##########...####.....#########..##########...#########...........
  0x01,0xE0,0x00,0x00,0x00,0x00,0x7C,0x03,0xFE,0x3E,0x0F,0xFC,0xFF,0x8F,0xF8,0x00, // .......####......................................#####........#########...#####.....##########..#########...#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x3E,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##..........#####.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x03,0xFF,0xFC,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####...........################...........#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00, // .......####............##############............#####........#######........##.....##########.....##.......#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00, // .......####............##############............#####........#######........##.....##########.....##.......#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0E,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....###....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####.............############.............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####.............############.............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0x7F,0xE0,0x00,0x7C,0x03,0x00,0x0F,0x0C,0x1C,0x18,0x0E,0x38,0x00, // .......####..............##########..............#####........##............####....##.....###.....##.......###...###...........
  0x01,0xE0,0x00,0x3F,0xC0,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x1C,0x18,0x0F,0xF8,0x00, // .......####...............########...............#####........##..........#######...##.....###.....##.......#########...........
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x0C,0x18,0x0F,0xF0,0x00, // .......####.................####.................#####........##..........#######...##......##.....##.......########............
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.................####.................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x1F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####................#####.................#####..........................................................................
  0x01,0xE0,0x00,0x7F,0xC0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..............#########...............#####..........................................................................
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.............############.............#####..........................................................................
  0x01,0xE0,0x01,0xFF,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####............###############...........#####..........................................................................
  0x01,0xE0,0x00,0x0F,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.................###########..........#####..........................................................................
  0x01,0xE0,0x00,0x03,0xFF,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####...................###########.......######..........................................................................
  0x01,0xE0,0x0F,0xE0,0xFF,0xC0,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.........#######.....##########......######..........................................................................
  0x01,0xF0,0x7F,0x80,0x3F,0xF1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#####.....########.........##########...######...........................................................................
  0x01,0xF9,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......######..#########...........##################...........................................................................
  0x00,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........##############...............################...........................................................................
  0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........#############.................##############............................................................................
  0x00,0x7F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .........##########.....................###########.............................................................................
  0x00,0x1F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...........#######.......................#########..............................................................................
  0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ............................................###.................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  // ................................................................................................................................
};

int cligSun = 0;
int BoucleOled = 0;



void InitSSD(){
   //OLED init
  Wire.begin(SDA_PIN, SCL_PIN);
 
  //FORCE RESET DE L'ECRAN SI PIN PARTICULIER POUR RESET
  if(OLED_RESET != -1) {
    pinMode (OLED_RESET, OUTPUT);
    digitalWrite(OLED_RESET, HIGH);
    digitalWrite(OLED_RESET, LOW);
    delay(100);
  }
  delay(250); // wait for the OLED to power up
  if (!display.begin(SCREEN_ADDRESS, true)) {
    Serial.println("SH1106 init failed");
  }
  else {
      display.display();
      delay(250);
      // Clear the buffer.
      display.clearDisplay();
      delay(250);
      OledLogo();
      OLED_on=true;
  }
  //
}

void OledAffiche(){
  if (BoucleOled <= 10 ) {
      //Ecran 1
      Ecran1();
      BoucleOled++;
  }
  else if (BoucleOled <= 15 ) {
      //Ecran 2
      Ecran2();
      BoucleOled++;
  }
  else if (BoucleOled <= 16 ) {
      OledLogo();
      BoucleOled++;
  }
  else {
    BoucleOled=0;
  }
}

void Ecran1(){
  if(OLED_on==false) {
    return;
  }
  Serial.println(F("Ecran1"));
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);
  //WIFI
  display.setCursor(0,3);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
    display.print(String(WiFi.RSSI()));
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !"));
  }
  //Ligne de séparation
  display.drawLine(0,16,128,16,SH110X_WHITE);
  //Puissance
  display.setCursor(0,20);
  display.print(F("Puissance "));
  display.print(int(PuissanceS_M - PuissanceI_M));
  display.print(F(" Watt"));
  //Ouverture du triac
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 0) {
       Ouv = 100 - Retard[i];
    }
  }
  display.setCursor(0,30);
  if(Ouv == -1) {
    display.print(F("Triac     -")); //Triac erreur
  }
  else {
    display.setCursor(0,30);
    display.print(F("Triac     "));
    display.drawRect(60, 30, 60, 10, SH110X_WHITE);
    float t = (float(60)/100)*Ouv;
    display.fillRect(62, 32, int(t), 6, SH110X_WHITE);
  }
  if(Ouv>0) {
    //Icone clignote, signale l'injection
    if(cligSun==0) {
      display.drawBitmap(112, 0, bitmap_Sun , 16, 16, SH110X_WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(112, 0, bitmap_Off , 16, 16, SH110X_WHITE);
    }
  }
  else {
    display.drawBitmap(112, 0, bitmap_Off , 16, 16, SH110X_WHITE);
  }
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
  display.display();
}

void Ecran2() {
  if(OLED_on==false){
    return;
  }
  Serial.println(F("Ecran2"));
  display.clearDisplay();
  delay(250);
  display.display();
  delay(250);
  display.setCursor(0,0);
  display.setTextSize(2);
  display.println(F("Injectee"));
  display.println(F("jour"));
  display.print(EnergieJour_M_Injectee);
  display.print(F(" Wh"));
  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
  display.display();
}

void OledLogo() {
   Serial.println(F("Logo"));
  display.clearDisplay();
  display.setCursor(0,0);
  display.drawBitmap(0, 0, bitmap_Logo , 128, 68, SH110X_WHITE);
  display.display();
}
Répondre
#4
(23-06-2024, 04:19 PM)Raphael591 a écrit : Pour ceux que ça intéresse, voici le code de mon affichage sur OLED

[Image: Capture-d-cran-2024-06-23-183753.png] [Image: Capture-d-cran-2024-06-23-183753-2.png] [Image: Capture-d-cran-2024-06-23-183753-3.png]

Nécessite de l'espace programme.
J'ai désactivé la partie allouer à la MAJ OTA -> Plus de MAJ via WIFI.
Dans l'IDE, configuration carte, partition : NO OTA (2MB APP/ 2MB SPIFFS)


Fichier à ajouter au sketch un fichier OLED.ino
Récupérer les bibliothèques Adafruit depuis l'IDE .
Modifier les PINs utilisés si nécessaire (Ici 26 et 25)
Contenu du fichier :

Code :
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// Définir les broches SDA et SCL personalisées
#define SDA_PIN 26
#define SCL_PIN 25
bool OLED_on = false;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// #define SSD1306_RESET 0xE4

const unsigned char bitmap_Sun[] PROGMEM = {
  0x00,0x00, // ................
  0x20,0x82, // ..#.....#.....#.
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  0x07,0xF0, // .....#######....
  0x07,0xF0, // .....#######....
  0x11,0xC4, // ...#...###...#..
  0x20,0x02, // ..#...........#.
  0x40,0x81, // .#......#......#
  0x00,0x80  // ........#.......
};

const unsigned char bitmap_Off[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x1F,0xF8, // ...##########...
  0x1F,0xF8, // ...##########...
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00  // ................
};

const unsigned char bitmap_Logo[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..........................########..............................................................................................
  0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........................############............................................................................................
  0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......................##############...........................................................................................
  0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...........................############.........................................................................................
  0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .............................###########........................................................................................
  0x00,0x00,0x03,0xC1,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ......................####.....###########......................................................................................
  0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..................########.......##########.....................................................................................
  0x00,0x00,0xFF,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................########..........###########...................................................................................
  0x00,0x01,0xFE,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...............########.............##########..................................................................................
  0x00,0x07,0xF8,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .............########.................##########................................................................................
  0x00,0x0F,0xF0,0x60,0x61,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ............########.....##......##....##########...............................................................................
  0x00,0x3F,0xC0,0xE0,0x60,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ..........########......###......##......##########.............................................................................
  0x00,0x7F,0x80,0xE0,0x60,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .........########.......###......##.......##########............................................................................
  0x00,0xFE,0x00,0xE0,0x60,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........#######.........###......##.........########............................................................................
  0x01,0xFC,0x00,0xE0,0x60,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#######..........###......##..........########...........................................................................
  0x01,0xF8,0x00,0xE0,0x60,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......######...........###......##...........#######...........................................................................
  0x01,0xF0,0x00,0xE0,0x60,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#####............###......##............#######..........................................................................
  0x01,0xE0,0x00,0xE0,0x60,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.............###......##.............######..........................................................................
  0x01,0xE0,0x00,0xE0,0x60,0x00,0x7C,0x03,0xFE,0x0E,0x07,0xF1,0xFF,0x8F,0xF0,0x00, // .......####.............###......##..............#####........#########.....###......#######...##########...########............
  0x01,0xE0,0x00,0x60,0x60,0x00,0x7C,0x03,0xFF,0x1E,0x0F,0xF9,0xFF,0x8F,0xF8,0x00, // .......####..............##......##..............#####........##########...####.....#########..##########...#########...........
  0x01,0xE0,0x00,0x00,0x00,0x00,0x7C,0x03,0xFE,0x3E,0x0F,0xFC,0xFF,0x8F,0xF8,0x00, // .......####......................................#####........#########...#####.....##########..#########...#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x3E,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##..........#####.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x03,0xFF,0xFC,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####...........################...........#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00, // .......####............##############............#####........#######........##.....##########.....##.......#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00, // .......####............##############............#####........#######........##.....##########.....##.......#########...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0E,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....###....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####............##############............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####.............############.............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00, // .......####.............############.............#####........##.............##.....##.....###.....##.......##.....##...........
  0x01,0xE0,0x00,0x7F,0xE0,0x00,0x7C,0x03,0x00,0x0F,0x0C,0x1C,0x18,0x0E,0x38,0x00, // .......####..............##########..............#####........##............####....##.....###.....##.......###...###...........
  0x01,0xE0,0x00,0x3F,0xC0,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x1C,0x18,0x0F,0xF8,0x00, // .......####...............########...............#####........##..........#######...##.....###.....##.......#########...........
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x0C,0x18,0x0F,0xF0,0x00, // .......####.................####.................#####........##..........#######...##......##.....##.......########............
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.................####.................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..................##..................#####..........................................................................
  0x01,0xE0,0x00,0x1F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####................#####.................#####..........................................................................
  0x01,0xE0,0x00,0x7F,0xC0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####..............#########...............#####..........................................................................
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.............############.............#####..........................................................................
  0x01,0xE0,0x01,0xFF,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####............###############...........#####..........................................................................
  0x01,0xE0,0x00,0x0F,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.................###########..........#####..........................................................................
  0x01,0xE0,0x00,0x03,0xFF,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####...................###########.......######..........................................................................
  0x01,0xE0,0x0F,0xE0,0xFF,0xC0,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......####.........#######.....##########......######..........................................................................
  0x01,0xF0,0x7F,0x80,0x3F,0xF1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......#####.....########.........##########...######...........................................................................
  0x01,0xF9,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .......######..#########...........##################...........................................................................
  0x00,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........##############...............################...........................................................................
  0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ........#############.................##############............................................................................
  0x00,0x7F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .........##########.....................###########.............................................................................
  0x00,0x1F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ...........#######.......................#########..............................................................................
  0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ............................................###.................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ................................................................................................................................
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  // ................................................................................................................................
};

int cligSun = 0;
int BoucleOled = 0;



void InitSSD(){
   //OLED init
  Wire.begin(SDA_PIN, SCL_PIN);
  pinMode (OLED_RESET, OUTPUT);

  //FORCE RESET DE L'ECRAN SI PIN PARTICULIER POUR RESET
  if(OLED_RESET != -1) {
  digitalWrite(OLED_RESET, HIGH);
  digitalWrite(OLED_RESET, LOW);
  delay(100);
  }

  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("SSD1306 failed");
    for (;;); // Don't proceed, loop forever
  }
  else {
      //Allumer l'écran.
      display.ssd1306_command(SSD1306_DISPLAYON);
      OledLogo();
      OLED_on=true;
  }
  //
}

void OledAffiche(){
  if (BoucleOled <= 10 ) {
      //Ecran 1
      Ecran1();
      BoucleOled++;
  }
  else if (BoucleOled <= 15 ) {
      //Ecran 2
      //Ecran2();
      Ecran2();
      BoucleOled++;
  }
  else if (BoucleOled <= 16 ) {
      OledLogo();
      BoucleOled++;
  }
  else {
    BoucleOled=0;
  }
}

void Ecran1(){
  if(OLED_on==false) {
    return;
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  //WIFI
  display.setCursor(0,3);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
    display.print(String(WiFi.RSSI()));
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !"));
  }
  //Ligne de séparation
  display.drawLine(0,16,128,16,WHITE);
  //Puissance
  display.setCursor(0,20);
  display.print(F("Puissance "));
  display.print(int(PuissanceS_M - PuissanceI_M));
  display.print(F(" Watt"));
  //Ouverture du triac
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 0) {
       Ouv = 100 - Retard[i];
    }
  }
  display.setCursor(0,30);
  if(Ouv == -1) {
    display.print(F("Triac     -")); //Triac erreur
  }
  else {
    display.setCursor(0,30);
    display.print(F("Triac     "));
    display.drawRect(60, 30, 60, 10, WHITE);
    float t = (float(60)/100)*Ouv;
    display.fillRect(62, 32, int(t), 6, WHITE);
  }
  if(Ouv>0) {
    //Icone clignote, signale l'injection
    if(cligSun==0) {
      display.drawBitmap(112, 0, bitmap_Sun , 16, 16, WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(112, 0, bitmap_Off , 16, 16, WHITE);
    }
  }
  else {
    display.drawBitmap(112, 0, bitmap_Off , 16, 16, WHITE);
  }
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
  display.display();
}

void Ecran2() {
  if(OLED_on==false){
    return;
  }
  display.clearDisplay();
  display.setCursor(0,0);
  display.setTextSize(2);
  display.println(F("Injectee"));
  display.println(F("jour"));
  display.print(EnergieJour_M_Injectee);
  display.print(F(" Wh"));
  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
  display.display();
}

void OledLogo() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.drawBitmap(0, 0, bitmap_Logo , 128, 68, WHITE);
  display.display();
}




Dans le fichier principal Solar_Router...ino

Dans la boucle setup() {}
Ajouter l'appel InitSSD(); après Serial.println(F("Booting"));

Dans la boule loop() {}
Ajouter l'appel OledAffiche(); après l'appel à la fonction EnergieQuotidienne();


Voila amusez-vous bien !


Bonjour,
Merci beaucoup pour ce code, je pensai m'y atteler prochainement mais bon, c'est fait !...
Question : ça ne passe pas en compilation avec une v10 et une configuration en ' Minimal SPIFFS 1,9MB' ? (on ne perd 'que' 100Ko... et ça permet de garder les mises à jour en OTA qui est très pratique...).
Merci !!!
_________________________________________________
Routeur Solaire en v11.11
Pilotage d'un cumulus de 3kW + Jeedom v4.4.8.1 + Station solaire 3,5kW
Répondre
#5
Merci Raphaël, ça a fonctionné du premier coup.


Pièces jointes Miniature(s)
       
Répondre
#6
Je confirme de mon côté également (OLED modèle SH1106) !

   

Et je confirme également que ca passe en sélectionnant le mode 'Minimal SPIFFS (1,9MB with OTA)', ce qui permet de conserver les fonctions de MAJ via OTA:

   
 
Je regarderai pour faire quelques modifications. En effet, déjà je n'utilise pas de triac, mais un relais SSR (et si c'est juste le libellé, ca ira vite...).
Par contre le logo est très bien, bravo !
_________________________________________________
Routeur Solaire en v11.11
Pilotage d'un cumulus de 3kW + Jeedom v4.4.8.1 + Station solaire 3,5kW
Répondre
#7
Super content que ça fonctionne du premier coup.
Merci pour l'info de conservation de l'ota, J'avais pas fait gaffe.

Je remarque un petit bug sur l'affichage de l'ip. J'affiche le niveau de wifi juste après mais coller après l'ip, faudrait ajouter un espace au moins, ou mettre des icônes en fonction du niveau de réception.
J'ai édité pour le SSD1306, voir premier post
Répondre
#8
(24-06-2024, 08:52 PM)Raphael591 a écrit : Super content que ça fonctionne du premier coup.
Merci pour l'info de conservation de l'ota, J'avais pas fait gaffe.

Je remarque un petit bug sur l'affichage de l'ip. J'affiche le niveau de wifi juste après mais coller après l'ip, faudrait ajouter un espace au moins, ou mettre des icônes en fonction du niveau de réception.

il n'y a pas de problème sur l'affichage de l'ip juste un bug photos
Répondre
#9
Bonjour
pouvez-vous mettre en téléchargement le fichier Solar_Router...ino et oled.ino
Je test de mon coté et a chaque foid plus de communication avec l'esp
J'ai bien mis No ota 2mo

Merci de votre aide
Cordialement Mickael
Répondre
#10
(24-06-2024, 10:56 PM)m_fasilleau@yahoo.fr a écrit : Bonjour
pouvez-vous mettre en téléchargement le fichier Solar_Router...ino et oled.ino
Je test de mon coté et a chaque foid plus de communication avec l'esp
J'ai bien mis No ota 2mo

Merci de votre aide
Cordialement Mickael

Dans l'IDE, configuration carte, partition : Minimal SPIFFS 1,9MB with OTA .
Vous garderez l'OTA ! C'est quand même bien pratique.

Plus de communication avec l'esp ? ça veux dire quoi exactement ?
L'esp ne redémarre pas ?

Quel affichage SSD13... ou SH11... ?
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 9 visiteur(s)