Afficher sur plusieurs OLED 0.96 et 1.3 à la fois

Bonjour à tous

Alors pardonnez moi si mon post n'est pas totalement complet mais c'est la 1ère fois que je viens vous voir pour demander un peu d'aide
Je suis un débutant et je m'inspire de ci de là des différents bout de code.

Dans mn projet je souhaite afficher des informations sur un écran OLED 1.3 SH1106 et des information plus précise et en plus grand sur 2 écrans OLED SSD1306.
Pour cela j'utilise une carte TCA9548A multiplexer I2C pour mes écrans.
Avec Espeasy en flash cela fonctionne comme il faut sur mon Lolin wemos D1 mini mais je veux gérer la taille de l'affichage et donc je passe par du code via arduino.

le code que j'utilise est celui ci :

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//#include <Adafruit_SH110X.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64



Adafruit_SSD1306 display1(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//Adafruit_SSD1306 display4(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Select I2C BUS
void TCA9548A(uint8_t bus){
  Wire.beginTransmission(0x70);  // TCA9548A address
  Wire.write(1 << bus);          // send byte to select bus
  Wire.endTransmission();
  Serial.print(bus);
}

void setup() {
  Serial.begin(115200);

  // Start I2C communication with the Multiplexer
  Wire.begin();

  // Init OLED display on bus number 1 (display 1)
  TCA9548A(1);
  if(!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display1.clearDisplay();

  // Init OLED display on bus number 2
  TCA9548A(2);
  if(!display2.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display2.clearDisplay();

  // Init OLED display on bus number 3
  TCA9548A(3);
  if(!display3.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display3.clearDisplay();

/*  // Init OLED display on bus number 4
  TCA9548A(4);
  if(!display4.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display4.clearDisplay();*/

  // Write to OLED on bus number 1
  TCA9548A(1);
  display1.setTextSize(8);
  display1.setTextColor(WHITE);
  display1.setCursor(45, 10);
  // Display static text
  display1.println("1");
  display1.display(); 
  
  // Write to OLED on bus number 2
  TCA9548A(2);
  display2.setTextSize(8);
  display2.setTextColor(WHITE);
  display2.setCursor(45, 10);
  // Display static text
  display2.println("2");
  display2.display(); 
  
  // Write to OLED on bus number 3
  TCA9548A(3);
  display3.setTextSize(8);
  display3.setTextColor(WHITE);
  display3.setCursor(45, 10);
  // Display static text
  display3.println("3");
  display3.display(); 
  
/*  // Write to OLED on bus number 4
  TCA9548A(4);
  display4.setTextSize(8);
  display4.setTextColor(WHITE);
  display4.setCursor(45, 10);
  // Display static text
  display4.println("4");
  display4.display();*/
}
 
void loop() {
  
}

Mais avec ce code j'ai ce résultat :

J'ai du faire une erreur quelque part !

Est-ce que je peux mélanger les 2 types d'écran avec le multiplexeur I2C ?
Merci de votre aide sur le sujet je tourne en rond

Bonjour

Alors je ne sais pas pourquoi mais ce matin j'ai eu une lumière après avoir réfléchi plusieurs jours autour du problème.
Et bien malgré le fait que certains librairies où flash semblent gérer les écrans de la même manière dans le cas de mon code il me manquait une librairie en faite :frowning:

J'ai donc ajouté #include <Adafruit_SH110X.h>
modifié un peu les configuration de départ, le setup et le loop et miracle oh miracle !!!

Affichage indépendant sur mes 3 écrans c'est cool, je vais pouvoir mettre autour de ceci les affichages que je souhaitais, puis ajouter quelques éléments en plus comme des led verte et rouge pour montrer visuellement que je suis connecté au wifi ou pas mise en place de l'OTA etc....

Cela me boost la semaine après ce week end à chercher sans trouver

voici mon code final qui peut potentiellement être amélioré et je prends aussi vos conseils :wink:

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

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64



Adafruit_SH1106G display1(132, 64, &Wire, -1);
Adafruit_SSD1306 display2(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Adafruit_SSD1306 display3(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//Adafruit_SSD1306 display4(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Select I2C BUS
void TCA9548A(uint8_t bus){
  Wire.beginTransmission(0x70);  // TCA9548A address
  Wire.write(1 << bus);          // send byte to select bus
  Wire.endTransmission();
  Serial.print(bus);
}

void setup() {
  Serial.begin(115200);

  // Start I2C communication with the Multiplexer
  Wire.begin();

  // Init OLED display on bus number 1 (display 1)
  TCA9548A(3);
  if(!display1.begin(0x3C, true)) {
    Serial.println(F("SH1106G allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display1.clearDisplay();

  // Init OLED display on bus number 2
  TCA9548A(2);
  if(!display2.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display2.clearDisplay();

  // Init OLED display on bus number 3
  TCA9548A(1);
  if(!display3.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display3.clearDisplay();

/*  // Init OLED display on bus number 4
  TCA9548A(4);
  if(!display4.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  } 
  // Clear the buffer
  display4.clearDisplay();*/

  // Write to OLED on bus number 1
  TCA9548A(1);
  display3.setTextSize(7);
  display3.setTextColor(SH110X_WHITE);
  display3.setCursor(45, 10);
  // Display static text
  display3.println("1");
  display3.display(); 
  
  // Write to OLED on bus number 2
  TCA9548A(2);
  display2.setTextSize(8);
  display2.setTextColor(WHITE);
  display2.setCursor(45, 10);
  // Display static text
  display2.println("2");
  display2.display(); 
  
  // Write to OLED on bus number 3
  TCA9548A(3);
  display1.setTextSize(8);
  display1.setTextColor(WHITE);
  display1.setCursor(45, 10);
  // Display static text
  display1.println("3");
  display1.display(); 
  
/*  // Write to OLED on bus number 4
  TCA9548A(4);
  display4.setTextSize(8);
  display4.setTextColor(WHITE);
  display4.setCursor(45, 10);
  // Display static text
  display4.println("4");
  display4.display();*/
}
 
void loop() {
  
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.