TUTO : Utilisation de 2 ecrans oled sur la même ligne I2ccrans

Supposons que l'on veuille utiliser 2 ecrans OLED 128x64 sur lesquels afficher des données differentes fournies par un seul et même sketch

1ere étape : changer l'adresse de l'un des ecrans OLED

Pour cela il faut un fer à souder pour enlever la résistance SMD installée en usine en 0x7B et comme elle a 90% de chance qu'elle ne sera plus utilisable, il faudra installer une resistance classique de 4,7 Kohms en 0x7A

De cette façon l'ecran avec la resistance en 0x7B aura l'adresse 0x3C et celui avec avec la resistance en 0x7A aura l'adresse 0x3D

2eme étape : cablage en // des 2 afficheurs
VCC ===> VCC
GND ===> GND
SCL ===> SCL
SDA ===> SDA

3eme étape : utilisation
Ajouter ces lignes au début du sketch :

#include <Adafruit_SSD1306.h>

#define LargeurEcran 128  // largeur de l'ecran OLED en pixels
#define HauteurEcran 64   // hauteur de l'ecran OLED en pixels

Adafruit_SSD1306 Oled1(LargeurEcran, HauteurEcran, &Wire, Oled1_RESET); 
// initialisation de l'écran avec le nom Oled1 ou autre à choisir
Adafruit_SSD1306 Oled2(LargeurEcran, HauteurEcran, &Wire, Oled2_RESET);
// initialisation de l'écran avec le nom Oled2 ou autre à choisir

#define Oled1_RESET -1   // Reset de l'ecran Oled1 partagé avec l'Arduino (d'où la valeur à -1, et non un numéro de pin)
#define Oled2_RESET -1   // Reset de l'écran Oled2 partagé avec l'Arduino (d'où la valeur à -1, et non un numéro de pin)

#define Oled1_ADDRESS 0x3C  // Adresse de l'écran Oled1 sur le bus i2c 
#define Oled2_ADDRESS 0x3D  // Adresse de l'écran Oled2 sur le bus i2c


Ensuite utiliser ces noms Oled1 et Oled2 pour envoyer les commandes d'affichage vers le bon ecran

Merci du partage

(vous pouvez ne conserver qu'un seul #define OledReset -1 et l'utiliser pour les deux - le -1 dit que le reset n'est pas câblé)

Je retiens ta remarque bien sûr mais ici comme c'est de la vulgarisation, les choses sont plus claires en gardant les 2

Oui et non, il est bien utilisé qu’un seul #define pour la taille de l’écran. Vous auriez pu faire de même pour le reset.

Bonjour
on pourrait aussi vouloir utiliser 2 écrans de tailles différentes .
garder tout séparé pourrait être aussi un plus (pour la taille et le reste)

mais quand on arrive la je suppose qu'on peut faire soi même les modifs.

Pas vraiment, on peut vouloir deux écrans de taille différentes et ne pas être à l'aise avec la programme C

ne polluons pas le tuto avec une discussion un peu stérile

cependant il serait mieux de définir les constantes et les define avant de les utiliser

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

#define LargeurEcran 128    // largeur de l'ecran OLED en pixels
#define HauteurEcran 64     // hauteur de l'ecran OLED en pixels
#define ResetPin  -1        // pas de pin RST connectée
#define Oled1_ADDRESS 0x3C  // Adresse de l'écran Oled1 sur le bus i2c 
#define Oled2_ADDRESS 0x3D  // Adresse de l'écran Oled2 sur le bus i2c

Adafruit_SSD1306 oled1(LargeurEcran, HauteurEcran, &Wire, ResetPin);  // initialisation de l'écran avec le nom oled1 ou autre à choisir
Adafruit_SSD1306 oled2(LargeurEcran, HauteurEcran, &Wire, ResetPin);  // initialisation de l'écran avec le nom oled2 ou autre à choisir

il faudrait aussi mentionner le begin qui est là où on passe l'adresse

// dans le setup

  if(! oled1.begin(SSD1306_SWITCHCAPVCC, Oled1_ADDRESS)) {
    Serial.println(F("oled1 erreur"));
    for(;;); // on arrête là
  }

  if(! oled2.begin(SSD1306_SWITCHCAPVCC, Oled2_ADDRESS)) {
    Serial.println(F("oled2 erreur"));
    for(;;); // on arrête là
  }

A post was split to a new topic: Gestion de 2 écrans OLED