Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Code OLED 128*64
#21
retard[0], c'est pour le triac
retard[1] , c'est pour le premier relais
retard[2] , c'est pour le deuxiemer relais
Répondre
#22
Zut grillé ! Je viens de trouver cette correspondance en effet... Blush 

J'ai testé, ca fonctionne en remplaçant :


Code :
  //Ouverture du triac
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 0) {
       Ouv = 100 - Retard[i];
    }
  }

par

Code :
//Ouverture du relais SSR
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 1) {
       Ouv = 100 - Retard[i];
    }
  }

modif sur la ligne if (i==1) {
(ou 2)

   

Merci André !
_________________________________________________
Routeur Solaire en v10.00 (modifié pour intégration d'un Shelly PRO EM-50). 
Pilotage d'un cumulus de 3kW + Jeedom v4.4.7 + Station solaire 3,5kW
Répondre
#23
Merci André !
Content que t'es pu adapter.
C'est du 0.96 '' l'écran comme le mien, c'est quand même un peu petit.
Je remplacerai probablement par un peu plus grand 2.5 pouce !
Répondre
#24
(26-06-2024, 05:37 PM)Raphael591 a écrit : Merci André !
Content que t'es pu adapter.
C'est du 0.96 '' l'écran comme le mien, c'est quand même un peu petit.
Je remplacerai probablement par un peu plus grand 2.5 pouce !

Oui, il fait 128x64 px mais cela suffit je pense pour afficher l'essentiel.

Sinon j'ai repris un peu ton code pour l'adapter à ce que je souhaitais, à savoir :

1.- Un écran affichant le logo (que je n'ai pas touché car je le trouve vraiment bien !) au démarrage, ou après un reset, puis un seul écran fixe (pas de turn-over) qui affiche en permanence les données sélectionnées.
Vu que c'est un écran OLED, ce n'est pas terrible de le laisser allumé en permanence (effet de marquage à plus ou moins long terme). Je verrai pour ajouter un économiseur d'écran (décalage périodique de quelques pixels par exemple, ou extinction de l'écran de temps à autre ou sur une plage horaire). 

2.- L'affichage de la puissance injectée (-) / consommée (+) vers/du réseau, en double taille et justifié à droite.
Je préfère voir cette donnée qui reflète mieux le comportement actuel de mon chauffe-eau pour vérifier s'il consomme ou pas, plutôt que la puissance injectée/jour qui me semble secondaire.

3.- L'ouverture en pourcentage + bargraph du taux d'ouverture du relais SSR utilisé.

4.- L'icône du soleil ne clignote (soleil/rien) que s'il y a injection de puissance, mais pas sur une ouverture de triac/relais.
En effet, l'ouverture d'un triac/relais ne préjuge pas de la consommation du chauffe-eau, car si l'eau est assez chaude, le thermostat interne au cumulus va couper le cumulus, et la consommation sera nulle même avec un triac/relais à 100%.

Et si quelqu'un est intéressé par ces petites modifs, je peux bien sûr fournir le code...
_________________________________________________
Routeur Solaire en v10.00 (modifié pour intégration d'un Shelly PRO EM-50). 
Pilotage d'un cumulus de 3kW + Jeedom v4.4.7 + Station solaire 3,5kW
Répondre
#25
Bonjour a tous
j'aurais besoin et je pense que cela pourrai intéressé d'autre personne.
Sur l'affichage ou on a l'ip, la puissance, le triac avec barre de proogression
version...

Codi ino oLFED.INO
  display.setCursor(0,30);
  if(Ouv == -1) {
    display.print(F("Triac     -")); //Triac erreur
  }
  else {
    display.setCursor(0,30);
    display.print(F("Triac  "ICI AFFICHER ù OUVERTURE triac"));

je pense qu'il serai intéressant d'avoir le % douverture du trianc  puis le "graph"

Le petit truc en plus "lol j'adore"  avec cela je serais proches de l' a pour trouvé la solution
affichage qui me convient 
Si vous avez mieux je suis preneur, je persévère de mon coté.
Bien à vous

(26-06-2024, 04:53 PM)DanielJ a écrit : Zut grillé ! Je viens de trouver cette correspondance en effet... Blush 

J'ai testé, ca fonctionne en remplaçant :


Code :
  //Ouverture du triac
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 0) {
       Ouv = 100 - Retard[i];
    }
  }

par

Code :
//Ouverture du relais SSR
  int Ouv = -1;
  for (int i = 0; i < NbActions; i++) {
    if (i == 1) {
       Ouv = 100 - Retard[i];
    }
  }

modif sur la ligne if (i==1) {
(ou 2)



Merci André !

Bonjour
Le % d'ouverture sur le relais ssr est super, comment peut on l'adapter sur un robodym 40A.
Dans le code ouverture du triac correspond a mes attente, cependant je suis perdu, j'arriva pas à comprendre le code pour afficher le %
Merci d'éclairé ma lanterne
Force à tous,  pour les aides et à André le GOAT, Le routeur original fonctione a merveille et Vous, Nous, Tous améliorons la performance de ce routeur
Cdt
Répondre
#26
(Hier, 08:29 PM)m_fasilleau@yahoo.fr a écrit : Bonjour
Le % d'ouverture sur le relais ssr est super, comment peut on l'adapter sur un robodym 40A.
Dans le code ouverture du triac correspond a mes attente, cependant je suis perdu, j'arriva pas à comprendre le code pour afficher le %
Merci d'éclairé ma lanterne
Force à tous,  pour les aides et à André le GOAT, Le routeur original fonctione a merveille et Vous, Nous, Tous améliorons la performance de ce routeur
Cdt

Bonjour,
Pour afficher les pourcentages, c'est assez simple. Il suffit d'insérer dans ce code les lignes :

Code :
  else {
    display.setCursor(0,39);
    display.print(F("TRIAC "));
    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);
  }

Voici les lignes de code insérées :

    display.print(int(Ouv));
    display.print(F("%"));


Shy
_________________________________________________
Routeur Solaire en v10.00 (modifié pour intégration d'un Shelly PRO EM-50). 
Pilotage d'un cumulus de 3kW + Jeedom v4.4.7 + Station solaire 3,5kW
Répondre
#27
(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.
Dans l'IDE, configuration carte, partition : Minimal SPIFFS 1,9MB with OTA


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_Signal1[] 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, // ................
  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, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x04,0x00, // .....#..........
  0x0C,0x00, // ....##..........
  0x1C,0x00, // ...###..........
  0x1C,0x00, // ...###..........
  0x5C,0x00, // .#.###..........
  0xDC,0x00, // ##.###..........
  0xDC,0x00  // ##.###..........
};

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

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

const unsigned char bitmap_Signal0[] PROGMEM = {
  0x00,0x00, // ................
  0x03,0xE0, // ......#####.....
  0x0F,0xF8, // ....#########...
  0x1F,0xFC, // ...###########..
  0x3E,0x3E, // ..#####...#####.
  0x38,0x7E, // ..###....######.
  0x70,0xFF, // .###....########
  0x71,0xF7, // .###...#####.###
  0x73,0xC7, // .###..####...###
  0x77,0x87, // .###.####....###
  0x3F,0x0E, // ..######....###.
  0x3E,0x1E, // ..#####....####.
  0x1F,0xFC, // ...###########..
  0x0F,0xF8, // ....#########...
  0x03,0xE0, // ......#####.....
  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();
      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,5);
  display.drawLine(91,1,91,15,WHITE);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
   
    //Niveau connection
    int NivSignal = int(WiFi.RSSI()) ;
    if (NivSignal<-80) {display.drawBitmap(92, 1, bitmap_Signal1 , 16, 16, WHITE); }
    else if(NivSignal<-60) {display.drawBitmap(92, 1, bitmap_Signal2 , 16, 16, WHITE); }
    else if(NivSignal<-45) {display.drawBitmap(92, 1, bitmap_Signal3 , 16, 16, WHITE); }
    else if(NivSignal<-30) {display.drawBitmap(92, 1, bitmap_Signal4 , 16, 16, WHITE); }
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !")); display.drawBitmap(92, 0, bitmap_Signal0 , 16, 16, WHITE);
  }

 

  //Ligne de séparation
  display.drawLine(0,18,128,18,WHITE);

  //Puissance
  display.setCursor(0,24);
  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.drawLine(109,1,109,15,WHITE);
  if(Ouv>0) {
    //Icone clignote, signale l'injection
    if(cligSun==0) {
      display.drawBitmap(110, 1, bitmap_Sun , 16, 16, WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(110, 1, bitmap_Off , 16, 16, WHITE);
    }
  }
  else {
    display.drawBitmap(110, 1, bitmap_Off , 16, 16, WHITE);
  }
  display.setCursor(0,36);
  if(Ouv == -1) {
    display.print(F("Triac     -")); //Triac erreur
  }
  else {
    //Affiche jauge Triac
    display.setCursor(0,38);
    display.print(F("Triac     "));
    display.drawRect(60, 38, 60, 10, WHITE);
    float t = (float(60)/100)*Ouv;
    display.fillRect(62, 40, int(t), 4, 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.setCursor(70,50);
  display.print(F("V "));
  display.print(Version);
  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,
J'utilise ce routeur depuis la version 2 et avais au début intégré un écran OLED mais avec les mises a jours, j'ai renoncé à l'utiliser aussi je suis satisfait d'avoir trouvé votre sujet sur le forum.
Je pense l'installer mais je ne trouve pas la ligne de commande "  Serial.println(F("Booting")); " dans l'onglet solar routeur V10.00.ino . Je ne trouve que " Serial.println("Booting");" . Je ne trouve pas la fonction du F.
Vous êtes sur quelle version? Avez vous un numéro de ligne pour m'aider a trouver l'emplacement de la commande?

Autre question. Dans ma version, j'utilise un poussoir sur le GPIO 25 pour allumer l'écran. Il s’éteint ensuite après une tempo. vous pensez que je peux reprendre cette option dans vos lignes de commandes?
D'avance merci.
Cordialement.
Serge 11.
Répondre
#28
Citation :Bonjour,
J'utilise ce routeur depuis la version 2 et avais au début intégré un écran OLED mais avec les mises a jours, j'ai renoncé à l'utiliser aussi je suis satisfait d'avoir trouvé votre sujet sur le forum.
Je pense l'installer mais je ne trouve pas la ligne de commande "  Serial.println(F("Booting")); " dans l'onglet solar routeur V10.00.ino . Je ne trouve que " Serial.println("Booting");" . Je ne trouve pas la fonction du F.
Vous êtes sur quelle version? Avez vous un numéro de ligne pour m'aider a trouver l'emplacement de la commande?

Autre question. Dans ma version, j'utilise un poussoir sur le GPIO 25 pour allumer l'écran. Il s’éteint ensuite après une tempo. vous pensez que je peux reprendre cette option dans vos lignes de commandes?
D'avance merci.
Cordialement.
Serge 11.


Bonjour,

Je vais répondre pour Raphaël : c'est une coquille... Wink
C'est bien après "Serial.println("Booting");" en effet qu'il faut insérer l'instruction "InitSSD();", vers les lignes 450 de l'onglet du pgm principal.
D'ailleurs, l'instruction correcte serait "display.print(F("texte"));", car celle-ci fait appel à la librairie AdaFruitGFX.h, alors que "Serial.println(F("Booting"));" renverrait une erreur de compilation.

Bien vu pour le bouton poussoir qui commande un affichage momentané, je vais voir pour proposer une modif en ce sens car cela m’intéresse aussi. Je suis justement en train de voir pour afficher une page avec des infos secondaires après l'appui sur un BP qui pourrait avoir également cette fonction, et j'en profite pour ajouter aussi un autre BP RESET physique de l'ESP32 en cas de plantage non récupérable (plus d'accès au serveur par ex.).
_________________________________________________
Routeur Solaire en v10.00 (modifié pour intégration d'un Shelly PRO EM-50). 
Pilotage d'un cumulus de 3kW + Jeedom v4.4.7 + Station solaire 3,5kW
Répondre
#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 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. 

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

Côté onglet OLED, 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 et un relais SSR (voir les commentaires pour passer sur un triac ou autre)

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 5x8 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 10x16 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, pour proposer une version alternative qui me convient principalement, et qui conviendra peut-être à certains d'entre vous.
Enjoy ! Smile
_________________________________________________
Routeur Solaire en v10.00 (modifié pour intégration d'un Shelly PRO EM-50). 
Pilotage d'un cumulus de 3kW + Jeedom v4.4.7 + Station solaire 3,5kW
Répondre


Atteindre :


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