Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Code OLED 128*64
#29
Rebonjour,

J'ai retravaillé le code de Raphaël pour intégrer :
- un bouton poussoir qui active l'affichage principal pendant 10 secondes si celui-ci est éteint, au démarrage, ou après un RESET,
- un appui pendant ces 10 secondes sur le même bouton poussoir provoque un changement de page pour afficher jusqu'à un total de 4 autres informations secondaires (comme le N° de version par exemple).
- Hors activation, l'affichage reste éteint en permanence (cela permet d'éviter un risque de marquage de l'écran OLED...)
- Commun aux pages principales et secondaires, on retrouve un bandeau supérieur avec l'@IP, une icône représentant le force du signal Wifi, et une icône clignotante si on est en injection de puissance vers le réseau. Un bandeau inférieur, avec la date (JJ/MM) et l'heure courante (HH:MM), ainsi que la durée de fonctionnement de l'ESP depuis son démarrage (ou sa RAZ) en heures et 1/10 d'heures.
- Sur la page principale s'affiche la puissance injectée (-) ou consommée (+), ainsi que le % d'ouverture du relais ou du triac utilisé (numérique + bargraphe)
- Sur la page secondaire, 4 lignes d'informations complémentaires peuvent s'afficher; Pour l'instant, je n'y ai mis que le N° de la version logicielle du routeur Solaire, mais on peut facilement en ajouter d'autres.

Pour la prise en compte de l'appui sur le bouton poussoir, j'utilise le système de gestion des interruptions intégrées à l'ESP32. 
Ce principe permet de prendre en compte tout appui sans aucune latence, ni rebond, contrairement à un codage classique qui testerai l'état du bouton à chaque itération, mais qui est moins agréable à utiliser et beaucoup moins efficace (on doit laisser le bouton appuyé plus ou moins longtemps...). 
Mais je sais que dans le code d'André, cette interruption est aussi utilisée pour le passage à 0 (zero-crossing) pour la commande du triac toutes les 10ms, et toutes les 100µs pour le timer interne.
N'ayant pas de triac (uniquement un relais SSR), est-ce qu'André ou quelqu'un d'autre pourrait me confirmer qu'il n'y a pas d'interférence possible entre ces différentes interruptions de nature différente ? A priori je ne le pense pas, mais je n'en suis pas sûr... Merci d'avance.

Voilà, je vous livre ce code modifié si cela vous intéresse pour être repris tel quel, ou pour le modifier/vous en inspirer suivant vos propres besoins.
Pour la compilation, pensez bien à sélectionner "Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)" dans le menu "outils" de l'IDE Arduino (on conserve la possibilité de mettre à jour le code par OTA en Wifi).

Côté onglet principal (Solar_Router_Vxxx), j'intègre les numéros de pins GPIO utilisés à la suite de ceux déjà définis. Libre à vous de choisir celles qui vous intéresse parmi les pins disponibles.

Exemple :

Code :
#define pulseTriac_2 25
#define zeroCross_2 23
#define pinTemp 13  //Capteur température
#define SDA_PIN 21  //pilotage écran OLED
#define SCL_PIN 22  //pilotage écran OLED
#define PAGE_OLED 15//PIN - IN : changement page d'écran d'informations

Outre les trois dernières lignes, attention à la modification de la ligne PulseTriac qui est affecté à la broche 25 au lieu de 22 (repris par le signal SCL pour l'écran OLED) dans le fichier initial.

Et toujours l'insertion de la commande d'initialisation ici :

Code :
//Ports Série ESP
  Serial.begin(115200);
  Serial.println("Booting");

  InitSSD();                           //Intégration d'un écran OLED

Et ici pour appeler la routine OledAffiche() :

Code :
if (tps - previousTimer2sMillis >= 2000) {
      previousTimer2sMillis = tps;
      tabPw_Maison_2s[IdxStock2s] = PuissanceS_M - PuissanceI_M;
      tabPw_Triac_2s[IdxStock2s] = PuissanceS_T - PuissanceI_T;
      tabPva_Maison_2s[IdxStock2s] = PVAS_M - PVAI_M;
      tabPva_Triac_2s[IdxStock2s] = PVAS_T - PVAI_T;
      IdxStock2s = (IdxStock2s + 1) % 300;
      JourHeureChange();
      EnergieQuotidienne();
      OledAffiche();            // Appel de la routine d'affichage sur l'écran OLED
    }


Côté onglet OLED.ino, je préfère vous redonner l'ensemble du code que j'ai modifié plutôt que de le refaire ligne par ligne (trop compliqué).
Attention, ce code est prévu pour :
- un écran OLED SH1106
- un relais SSR (voir le commentaire "//Taux d'ouverture du triac/relais" pour la prise en compte d'un triac ou d'un relais)

Code :
// ****************************************************
// Intégration d'un écran OLED SH1106
// ****************************************************

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

// Les caractères sont dans une matrice de 6x8 pixels.
// Un paramètre optionnel (size pour taille) peut être passé à la fonction pour changer l'échelle d'affichage du caractère.
// La taille du caractère est multiplié par le facteur utilisé (ex: size=2 fera un rendu en 12x16 pixels par caractère).

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET    -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3c ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
#define TIMER_PAGE 10000 //Défini le nombre de secondes (en ms) pendant lequel l'écran restera affiché
// GPIO pour SDA, SCL et bouton poussoir d'activation de l'affichage et de changement de page : voir le programme principal dans la partie définition des GPIO

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 = {
  0x20,0x82, // ..#.....#.....#.
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  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, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  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, // .#..............
  0xC0,0x00, // ##..............
  0xC0,0x00  // ##..............
};

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, // .#.###..........
  0xDC,0x00, // ##.###..........
  0xDC,0x00  // ##.###..........
};

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,0xC0, // ##.###.###......
  0xDD,0xC0  // ##.###.###......
};

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, // ##.###.###.###..
  0xDD,0xDC  // ##.###.###.###..
};

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;
bool EtatBP;
bool Selecteur_page = 1;    //indicateur de sélection de la page courante
unsigned long millis_start; //horodatage du début d'affichage de la page

void InitSSD(){
 
  //Initialisation du bouton poussoir (affectation GPIO, mode de fonctionnement)
  pinMode (PAGE_OLED, INPUT_PULLUP);

  //Initialisation de l'interruption (GPIO affecté au BP, pgm à exécuter, activé sur front descendant)
  attachInterrupt(PAGE_OLED, page_change_ISR, FALLING);
 
   //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;
  }
  //Permet d'afficher la première page après un démarrage ou un RESET.
  millis_start = millis();
  //
}

void page_change_ISR() {
// Code éxecuté à chaque appui sur le bouton poussoir de changement de page via une IRQ.
Selecteur_page = !Selecteur_page;
millis_start = millis();
}

void OledAffiche(){
     
    if (millis()-millis_start < TIMER_PAGE) {
      Ecran_permanent();
      if (Selecteur_page == 1) {
        Ecran1();
      }
      else {
        Ecran2();
      }
    }
    else {
    Selecteur_page = 0; // On repart sur la page principale si appui sur le BP après l'extinction de l'écran
    display.clearDisplay();
    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();
}

void Ecran_permanent(){
 
  // Défini l'affichage des lignes du haut et du bas, affichés en permanence quelle que soit la page affichée en cours.
  if(OLED_on==false) {
    return;
  }
  Serial.println(F("Ecran permanent"));
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SH110X_WHITE);

  //Lignes de séparation
  display.drawLine(0,15,128,15,SH110X_WHITE);
  display.drawLine(0,52,128,52,SH110X_WHITE);
 
  //Wifi - Affichage de l'@IP
  display.setCursor(0,2);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
 
  //Wifi - Niveau de connection
    int NivSignal = int(WiFi.RSSI()) ;
         if(NivSignal<-80) {display.drawBitmap(92, 0, bitmap_Signal1 , 16, 13, SH110X_WHITE); }
    else if(NivSignal<-60) {display.drawBitmap(92, 0, bitmap_Signal2 , 16, 13, SH110X_WHITE); }
    else if(NivSignal<-45) {display.drawBitmap(92, 0, bitmap_Signal3 , 16, 13, SH110X_WHITE); }
    else if(NivSignal<-30) {display.drawBitmap(92, 0, bitmap_Signal4 , 16, 13, SH110X_WHITE); }
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !")); display.drawBitmap(92, 0, bitmap_Off, 16, 13, SH110X_WHITE);
  }

  //Affichage de la date DD/MM et heure HH:MM courant
  String time = DATE.substring(0, 5);    // "27/06"
  display.setCursor(0,55);
  display.print(time);
  time = DATE.substring(10, 16);         // " 14:30"
  display.setCursor(30,55);
  display.print(time);
 
  //Affichage de la durée de fonctionnement de l'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);

  //Affichage de l'icône signalant l'injection de puissance
  int Pw = int(PuissanceS_M - PuissanceI_M);
  if(Pw<0) {
    //Icone clignote, signale l'injection
    if(cligSun==0) {
      display.drawBitmap(112, 0, bitmap_Sun , 16, 13, SH110X_WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(112, 0, bitmap_Off , 16, 13, SH110X_WHITE);
    }
  }
  else {
    display.drawBitmap(112, 0, bitmap_Off , 16, 13, SH110X_WHITE);
  }
}

void Ecran1(){
  if(OLED_on==false) {
    return;
  }

  //Affichage des informations principales sur la page 1

  Serial.println(F("Ecran1"));
  //Puissance
  display.setCursor(0,23);
  display.print(F("Pw"));
  int Pw = int(PuissanceS_M - PuissanceI_M);
  String Pwaff=String(Pw)+" W";
  display.setCursor(128-(Pwaff.length()*12),19);
  display.setTextSize(2);
  display.print(Pwaff);
  display.setTextSize(1);

  //Taux d'ouverture du triac/relais. Valeurs : i==0 >Triac, i==1 >Relais1, i==2 >Relais2
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 1) {
       Ouv = 100 - Retard[i];
    }
  }
  display.setCursor(0,39);
  if(Ouv == -1) {
    display.print(F("Erreur SSR")); //Relais SSR en erreur
  }
  else {
    display.setCursor(0,39);
    display.print(F("SSR  "));
    display.print(int(Ouv));
    display.print(F("%"));
    display.drawRect(60, 38, 60, 10, SH110X_WHITE);
    float t = (float(60)/100)*Ouv;
    display.fillRect(61, 38, int(t), 10, SH110X_WHITE);
  }

  display.display();
}

void Ecran2(){
    if(OLED_on==false) {
    return;
  }
 
  //Affichage des informations secondaires sur la page 2

  Serial.println(F("Ecran2"));
  display.setCursor(0,17);
  display.print(F("Version"));
  String Version_routeur = Version;
  display.setCursor(128-(Version_routeur.length()*6),17);
  display.print(Version_routeur);
  // Insérer ici en lignes 25, 33, et 41 les informations secondaires à afficher
  //display.setCursor(0,25);
  //display.print(F("Info 2"));
  //display.setCursor(0,33);
  //display.print(F("Info 3"));
  //display.setCursor(0,41);
  //display.print(F("Info 4"));
  display.display();
}


Quelques photos d'écrans pour montrer le résultat :

   

   

Encore une fois, je n'ai fait que modifier le code de Raphaël qui, j'insiste, a fait le plus gros du travail (merci encore à lui !), pour proposer une version alternative qui me convient principalement, et qui conviendra peut-être à certains d'entre vous.
Enjoy ! Smile
_________________________________________________
Routeur Solaire en v11.11
Pilotage d'un cumulus de 3kW + Jeedom v4.4.8.1 + Station solaire 3,5kW
Répondre


Messages dans ce sujet
Code OLED 128*64 - par Raphael591 - 23-06-2024, 04:19 PM
RE: Code OLED 128*64 - par AL53 - 23-06-2024, 07:46 PM
RE: Code OLED 128*64 - par Raphael591 - 23-06-2024, 11:46 PM
RE: Code OLED 128*64 - par AL53 - 24-06-2024, 06:07 PM
RE: Code OLED 128*64 - par DanielJ - 24-06-2024, 04:22 PM
RE: Code OLED 128*64 - par DanielJ - 24-06-2024, 06:32 PM
RE: Code OLED 128*64 - par Raphael591 - 24-06-2024, 08:52 PM
RE: Code OLED 128*64 - par AL53 - 24-06-2024, 10:52 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 24-06-2024, 10:56 PM
RE: Code OLED 128*64 - par Raphael591 - 24-06-2024, 11:03 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 25-06-2024, 08:37 AM
RE: Code OLED 128*64 - par Raphael591 - 25-06-2024, 01:40 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 25-06-2024, 04:11 PM
RE: Code OLED 128*64 - par Psykoz23 - 25-06-2024, 05:17 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 25-06-2024, 07:18 PM
RE: Code OLED 128*64 - par Raphael591 - 25-06-2024, 07:30 PM
RE: Code OLED 128*64 - par Psykoz23 - 25-06-2024, 09:57 PM
RE: Code OLED 128*64 - par Raphael591 - 26-06-2024, 12:39 AM
RE: Code OLED 128*64 - par Psykoz23 - 26-06-2024, 02:00 PM
RE: Code OLED 128*64 - par DanielJ - 26-06-2024, 04:12 PM
RE: Code OLED 128*64 - par F1ATB - 26-06-2024, 04:42 PM
RE: Code OLED 128*64 - par DanielJ - 26-06-2024, 04:53 PM
RE: Code OLED 128*64 - par Raphael591 - 26-06-2024, 05:37 PM
RE: Code OLED 128*64 - par DanielJ - 26-06-2024, 06:33 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 27-06-2024, 08:29 PM
RE: Code OLED 128*64 - par DanielJ - 27-06-2024, 09:05 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 30-06-2024, 09:02 PM
RE: Code OLED 128*64 - par Serge 11 - 28-06-2024, 05:10 PM
RE: Code OLED 128*64 - par DanielJ - 28-06-2024, 05:30 PM
RE: Code OLED 128*64 - par DanielJ - 28-06-2024, 07:41 PM
RE: Code OLED 128*64 - par Raphael591 - 04-07-2024, 09:01 PM
RE: Code OLED 128*64 - par Serge 11 - 07-07-2024, 09:01 PM
RE: Code OLED 128*64 - par Raphael591 - 08-07-2024, 02:17 PM
RE: Code OLED 128*64 - par Serge 11 - 08-07-2024, 04:42 PM
RE: Code OLED 128*64 - par F1ATB - 05-07-2024, 06:15 AM
RE: Code OLED 128*64 - par lucky - 05-07-2024, 08:48 AM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 08-07-2024, 08:32 PM
RE: Code OLED 128*64 - par Raphael591 - 08-07-2024, 11:39 PM
RE: Code OLED 128*64 - par m_fasilleau@yahoo.fr - 09-07-2024, 08:14 PM
RE: Code OLED 128*64 - par Raphael591 - 09-07-2024, 10:37 AM
RE: Code OLED 128*64 - par lucky - 09-07-2024, 10:51 AM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 10:24 AM
RE: Code OLED 128*64 - par Raphael591 - 10-07-2024, 11:37 AM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 11:48 AM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 03:42 PM
RE: Code OLED 128*64 - par Raphael591 - 10-07-2024, 04:12 PM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 05:02 PM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 06:23 PM
RE: Code OLED 128*64 - par Raphael591 - 10-07-2024, 07:09 PM
RE: Code OLED 128*64 - par Fabio63 - 10-07-2024, 08:06 PM
RE: Code OLED 128*64 - par Fabio63 - 11-07-2024, 01:21 PM
RE: Code OLED 128*64 - par Raphael591 - 11-07-2024, 02:57 PM
RE: Code OLED 128*64 - par Fabio63 - 11-07-2024, 03:00 PM
RE: Code OLED 128*64 - par Raphael591 - 11-07-2024, 03:36 PM
RE: Code OLED 128*64 - par Alain_C38 - 11-07-2024, 04:07 PM
Code OLED 128*64 - par dede - 12-07-2024, 04:24 PM
RE: Code OLED 128*64 - par Raphael591 - 13-07-2024, 10:33 AM
RE: Code OLED 128*64 - par dede - 14-07-2024, 12:54 PM
RE: Code OLED 128*64 - par Raphael591 - 15-07-2024, 11:30 AM
RE: Code OLED 128*64 - par dede - 26-07-2024, 07:45 PM
RE: Code OLED 128*64 - par Raphael591 - 26-07-2024, 10:35 PM
RE: Code OLED 128*64 - par cmichel - 01-08-2024, 02:12 PM
RE: Code OLED 128*64 - par Psykoz23 - 13-08-2024, 06:08 PM
RE: Code OLED 128*64 - par Alain_C38 - 14-08-2024, 08:58 AM
RE: Code OLED 128*64 - par Alain H - 17-08-2024, 08:41 PM
RE: Code OLED 128*64 - par Sgb31 - 14-08-2024, 03:22 PM
RE: Code OLED 128*64 - par Psykoz23 - 14-08-2024, 08:08 PM
RE: Code OLED 128*64 - par Sgb31 - 15-08-2024, 12:11 PM
RE: Code OLED 128*64 - par Sgb31 - 15-08-2024, 07:31 PM
RE: Code OLED 128*64 - par Serge111 - 14-08-2024, 08:00 PM
RE: Code OLED 128*64 - par Sgb31 - 17-08-2024, 03:09 PM
RE: Code OLED 128*64 - par Raphael591 - 19-08-2024, 07:50 PM
RE: Code OLED 128*64 - par Alain_C38 - 22-08-2024, 08:32 PM

Atteindre :


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