Dans ce guide, vous apprendrez à étendre les ports de bus I2C (ESP32, ESP8266, Arduino) à l’aide du multiplexeur TCA9458A 1 à 8 I2C. Ce matériel est utile si vous souhaitez contrôler plusieurs périphériques I2C avec la même adresse I2C. Par exemple, plusieurs écrans OLED ou plusieurs capteurs comme le BME280.

Ce tutoriel est compatible avec les cartes ESP32, ESP8266 et Arduino. Nous programmerons les cartes à l’aide de l’IDE Arduino.
Table des matières
Dans ce didacticiel, nous aborderons les sujets suivants :
Présentation du multiplexeur TCA9548A 1 à 8 I2C

Le protocole de communication I2C vous permet de communiquer avec plusieurs appareils I2C sur le même bus I2C tant que tous les appareils ont une adresse I2C unique. Cependant, cela ne fonctionnera pas si vous souhaitez connecter plusieurs périphériques I2C avec la même adresse.
Le Multiplexeur TCA9548A I2C vous permet de communiquer avec jusqu’à 8 appareils I2C avec le même bus I2C. Le multiplexeur communique avec un microcontrôleur en utilisant le protocole de communication I2C. Ensuite, vous pouvez sélectionner le bus I2C du multiplexeur que vous souhaitez adresser.
Pour adresser un port spécifique, il vous suffit d’envoyer un seul octet au multiplexeur avec le numéro de port de sortie souhaité.

Caractéristiques du multiplexeur TCA9548A
Voici un résumé de ses principales fonctionnalités :
- 1 à 8 commutateurs de traduction bidirectionnels
- Entrée de réinitialisation active-basse
- Trois broches d’adresse – jusqu’à 8 appareils TCA9548A sur le même bus I2C
- Sélection de canal via un bus I2C
- Plage de tension d’alimentation de fonctionnement : 1,65 V à 5,5 V
- Broches tolérantes 5V
Pour une description plus détaillée, consultez la fiche technique.
Adresse I2C du multiplexeur TCA9548A
Le multiplexeur TCA9548A communique avec un microcontrôleur en utilisant le protocole de communication I2C. Donc, il a besoin d’une adresse I2C. L’adresse du multiplexeur est configurable. Vous pouvez sélectionner une valeur comprise entre 0x70 et 0x77 en ajustant les valeurs des broches A0, A1 et A2, comme indiqué dans le tableau ci-dessous.
A0 | A1 | A2 | Adresse I2C |
FAIBLE | FAIBLE | FAIBLE | 0x70 |
HAUT | FAIBLE | FAIBLE | 0x71 |
FAIBLE | HAUT | FAIBLE | 0x72 |
HAUT | HAUT | FAIBLE | 0x73 |
FAIBLE | FAIBLE | HAUT | 0x74 |
HAUT | FAIBLE | HAUT | 0x75 |
FAIBLE | HAUT | HAUT | 0x76 |
HAUT | HAUT | HAUT | 0x77 |
Ainsi, vous pouvez connecter jusqu’à 8 multiplexeurs TCA9548A au même bus I2C, ce qui vous permettrait de connecter 64 appareils avec la même adresse en utilisant un seul bus I2C du microcontrôleur.
Par exemple, si vous connectez A0, A1 et A2 à GND, cela définit l’adresse 0x70 pour le multiplexeur.
Brochage TCA9548A
Le tableau suivant décrit le brochage du TCA9584A.
Broche | Description |
NIV | Alimente le multiplexeur |
Terre | Connectez-vous à GND |
SDA | Connectez-vous à la broche SDA du microcontrôleur maître |
SCL | Connectez-vous à la broche SCL du microcontrôleur maître |
TVD | Broche RST basse active – peut être utilisée pour réinitialiser le multiplexeur |
A0 | Sélectionne l’adresse I2C du multiplexeur – se connecte à GND ou VCC |
A1 | Sélectionne l’adresse I2C du multiplexeur – se connecte à GND ou VCC |
A2 | Sélectionne l’adresse I2C du multiplexeur – se connecte à GND ou VCC |
SD0 | SDA pour le canal 0 |
SC0 | SCL pour le canal 0 |
SD1 | SDA pour le canal 1 |
SC1 | SCL pour le canal 1 |
SD2 | SDA pour le canal 2 |
SC2 | SCL pour le canal 2 |
SD3 | SDA pour le canal 3 |
SC3 | SCL pour le canal 3 |
SD4 | SDA pour le canal 4 |
SC4 | SCL pour le canal 4 |
SD5 | SDA pour le canal 5 |
SC5 | SCL pour le canal 5 |
SD6 | SDA pour le canal 6 |
SC6 | SCL pour le canal 6 |
SD7 | SDA pour le canal 7 |
SC7 | SCL pour le canal 7 |
Multiplexeur TCA9548A I2C Sélection d’un bus I2C
Comme mentionné précédemment, pour sélectionner un bus I2C spécifique pour lire/écrire des données, il vous suffit d’envoyer un seul octet au multiplexeur avec le numéro de port de sortie souhaité (0 à 7).
Pour ce faire, vous pouvez simplement utiliser la fonction définie par l’utilisateur suivante :
void TCA9548A(uint8_t bus){
Wire.beginTransmission(0x70); // TCA9548A address is 0x70
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
Serial.print(bus);
}
Ensuite, il vous suffit d’appeler cette fonction et de passer en argument le numéro de bus du port que vous souhaitez contrôler avant d’envoyer les commandes I2C. Par exemple, pour contrôler l’appareil connecté au bus numéro 3, vous appelleriez la ligne suivante avant d’appeler d’autres commandes I2C (notez qu’elle commence à 0) :
TCA9548A(2);
Vous verrez comment cela fonctionne avec des exemples pratiques dans les sections suivantes.
Contrôlez plusieurs écrans OLED—Multiplexeur I2C TCA9548A
Dans cette section, nous allons vous montrer comment contrôler plusieurs écrans OLED. À titre d’exemple, nous contrôlerons quatre écrans OLED, mais vous pouvez connecter jusqu’à 8 écrans.
Pièces requises
Voici une liste des pièces nécessaires pour cet exemple :
Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Plusieurs écrans OLED avec circuit multiplexeur I2C
Connectez quatre écrans OLED comme indiqué dans le diagramme schématique suivant. Nous utilisons les bus numéros 2, 3, 4 et 5. Vous pouvez choisir n’importe quel autre numéro de port.
Nous connectons également A0, A1 et A2 à GND. Ceci sélectionne l’adresse 0x70 pour le multiplexeur.

Voici les broches I2C par défaut en fonction du microcontrôleur que vous utilisez :
Microcontrôleur | Broches I2C |
ESP32 | GPIO 22 (SCL), GPIO 21 (SDA) |
ESP8266 | GPIO 5 (D1) (SCL), GPIO 4 (D2) (SDA) |
Arduino Uno | A5 (SCL), A4 (SDA) |
Plusieurs écrans OLED avec code multiplexeur I2C
Le contrôle des écrans est aussi simple que le contrôle d’un seul écran. Il vous suffit de penser à sélectionner le bon bus I2C avant d’envoyer les commandes d’écriture à l’écran.
Pour savoir comment contrôler un affichage I2C, vous pouvez lire les articles suivants :
Installation des bibliothèques
Nous utiliserons les bibliothèques suivantes pour contrôler l’affichage OLED. Assurez-vous que ces bibliothèques sont installées :
Vous pouvez installer les bibliothèques à l’aide du gestionnaire de bibliothèque Arduino. Accédez à Esquisse > Inclure la bibliothèque > Gérer les bibliothèques et recherchez le nom de la bibliothèque.
Si vous utilisez VS Code avec l’extension PlatformIO, copiez ce qui suit dans le fichier platformio.ini pour inclure les bibliothèques.
lib_deps = adafruit/Adafruit SSD1306@^2.4.6
adafruit/Adafruit GFX Library@^1.10.10
Après avoir installé les bibliothèques, vous pouvez continuer.
Copiez le code suivant dans votre IDE Arduino et téléchargez-le sur votre carte. Cela fonctionnera tout de suite.
/*********
Rui Santos
Complete project details at https://Raspberryme.com/tca9548a-i2c-multiplexer-esp32-esp8266-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*********/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(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 2
TCA9548A(2);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display on bus number 3
TCA9548A(3);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display on bus number 4
TCA9548A(4);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display on bus number 5
TCA9548A(5);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
// Write to OLED on bus number 2
TCA9548A(2);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("1");
display.display();
// Write to OLED on bus number 3
TCA9548A(3);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("2");
display.display();
// Write to OLED on bus number 4
TCA9548A(4);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("3");
display.display();
// Write to OLED on bus number 5
TCA9548A(5);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("4");
display.display();
}
void loop() {
}
Comment fonctionne le code
Continuez à lire pour savoir comment le code fonctionne ou passez à la Manifestation section.
Tout d’abord, importez les bibliothèques requises pour contrôler l’affichage OLED : Adafruit_GFX et Adafruit_SSD1306. La bibliothèque Wire est nécessaire pour utiliser le protocole de communication I2C.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Définissez la largeur et la hauteur de l’OLED.
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Créez une instance Adafruit_SSD1306 pour communiquer avec l’écran OLED.
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Vous pouvez utiliser la même instance pour communiquer avec tous les écrans. Dans ce cas, vous devez effacer le tampon d’affichage (display.clearDisplay()) avant d’écrire sur un autre OLED.
Vous pouvez également créer plusieurs instances Adafruit_SSD1306, une pour chaque OLED. Dans ce cas, vous n’avez pas besoin d’effacer le tampon. Nous allons vous montrer un exemple avec plusieurs instances à la fin de cette section.
Sélectionnez le canal I2C
La fonction TCA9548A() peut être appelée pour sélectionner le bus avec lequel vous souhaitez communiquer. Il envoie un octet au multiplexeur avec le numéro de port.
// 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);
}
Vous devez appeler cette fonction chaque fois que vous souhaitez sélectionner le port I2C.
installation()
Dans setup(), initialisez une communication série à des fins de débogage.
Serial.begin(115200);
Démarrez la communication I2C sur les broches I2C par défaut avec le multiplexeur I2C.
Wire.begin();
Ensuite, initialisez chaque affichage. Les lignes suivantes montrent un exemple pour le premier écran OLED (il est connecté au bus numéro 2).
//Init OLED display on bus number 2
TCA9548A(2);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display.clearDisplay();
L’initialisation des autres écrans est similaire, mais vous devez appeler la fonction TCA9548A() avec le numéro de bus I2C correspondant.
Ensuite, écrivez quelque chose sur les écrans. N’oubliez pas que vous devez appeler la fonction TCA9548A() chaque fois que vous souhaitez basculer entre les OLED. Vous devez également effacer le tampon d’affichage avant d’écrire quoi que ce soit sur l’OLED.
// Write to OLED on bus number 2
TCA9548A(2);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("1");
display.display();
Dans ce cas, nous imprimons simplement un numéro différent sur chaque écran. Voici un exemple pour l’OLED numéro 4 (il est connecté au bus numéro 5).
// Write to OLED on bus number 5
TCA9548A(5);
display.clearDisplay();
display.setTextSize(8);
display.setTextColor(WHITE);
display.setCursor(45, 10);
// Display static text
display.println("4");
display.display();
Et c’est à peu près comme ça que le code fonctionne.
Le code suivant montre un exemple similaire mais utilisant plusieurs instances Adafruit_SSD1306. Notez que vous n’avez pas besoin d’effacer le tampon avant d’écrire sur l’écran.
/*********
Rui Santos
Complete project details at https://Raspberryme.com/tca9548a-i2c-multiplexer-esp32-esp8266-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*********/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.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 2 (display 1)
TCA9548A(2);
if(!display1.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display1.clearDisplay();
// Init OLED display on bus number 3
TCA9548A(3);
if(!display2.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display2.clearDisplay();
// Init OLED display on bus number 4
TCA9548A(4);
if(!display3.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display3.clearDisplay();
// Init OLED display on bus number 5
TCA9548A(5);
if(!display4.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
// Clear the buffer
display4.clearDisplay();
// Write to OLED on bus number 2
TCA9548A(2);
display1.setTextSize(8);
display1.setTextColor(WHITE);
display1.setCursor(45, 10);
// Display static text
display1.println("1");
display1.display();
// Write to OLED on bus number 3
TCA9548A(3);
display2.setTextSize(8);
display2.setTextColor(WHITE);
display2.setCursor(45, 10);
// Display static text
display2.println("2");
display2.display();
// Write to OLED on bus number 4
TCA9548A(4);
display3.setTextSize(8);
display3.setTextColor(WHITE);
display3.setCursor(45, 10);
// Display static text
display3.println("3");
display3.display();
// Write to OLED on bus number 5
TCA9548A(5);
display4.setTextSize(8);
display4.setTextColor(WHITE);
display4.setCursor(45, 10);
// Display static text
display4.println("4");
display4.display();
}
void loop() {
}
Manifestation
Téléchargez le code sur votre tableau. Voici ce que vous devriez obtenir.

Comme vous pouvez le constater, il est assez facile de contrôler plusieurs écrans OLED affichant différents graphiques à l’aide d’un multiplexeur I2C.
Lire plusieurs capteurs BME280 – Multiplexeur TCA9548A I2C
Dans cette section, vous apprendrez à lire les données de plusieurs capteurs BME280 à l’aide du multiplexeur TCA9548A I2C. Nous allons lire les données de quatre capteurs, mais vous pouvez connecter jusqu’à 8 capteurs.

Pièces requises
Voici une liste des pièces nécessaires pour cet exemple :
Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Plusieurs capteurs BME280 avec circuit multiplexeur I2C
Connectez quatre capteurs BME280 comme indiqué dans le diagramme schématique suivant. Nous utilisons les bus numéros 2, 3, 4 et 5. Vous pouvez choisir n’importe quel autre numéro de port.
Nous connectons également A0, A1 et A2 à GND. Ceci sélectionne l’adresse 0x70 pour le multiplexeur.

Voici les broches I2C par défaut en fonction du microcontrôleur que vous utilisez :
Microcontrôleur | Broches I2C |
ESP32 | GPIO 22 (SCL), GPIO 21 (SDA) |
ESP8266 | GPIO 5 (D1) (SCL), GPIO 4 (D2) (SDA) |
Arduino Uno | A5 (SCL), A4 (SDA) |
Plusieurs capteurs BME280 avec code multiplexeur I2C
Semblable à l’écran OLED, la lecture des données de plusieurs capteurs est aussi simple que le contrôle d’un seul capteur. Il suffit de prendre en compte la sélection du bon bus I2C avant de communiquer avec le capteur.
Pour apprendre à lire les données d’un capteur BME280 :
Installation des bibliothèques
Nous utiliserons les bibliothèques suivantes pour lire à partir du capteur BME280. Assurez-vous que ces bibliothèques sont installées :
Vous pouvez installer les bibliothèques à l’aide du gestionnaire de bibliothèque Arduino. Accédez à Esquisse > Inclure la bibliothèque > Gérer les bibliothèques et recherchez le nom de la bibliothèque.
Si vous utilisez VS Code avec l’extension PlatformIO, copiez ce qui suit dans le fichier platformio.ini pour inclure les bibliothèques.
lib_deps = adafruit/Adafruit Unified Sensor @ ^1.1.4
adafruit/Adafruit BME280 Library @ ^2.1.2
Après avoir installé les bibliothèques, vous pouvez continuer.
Copiez le code suivant dans votre IDE Arduino et téléchargez-le sur votre carte. Cela fonctionnera tout de suite.
/*********
Rui Santos
Complete project details at https://Raspberryme.com/tca9548a-i2c-multiplexer-esp32-esp8266-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*********/
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1022)
Adafruit_BME280 bme1; // I2C
Adafruit_BME280 bme2; // I2C
Adafruit_BME280 bme3; // I2C
Adafruit_BME280 bme4; // I2C
// Select I2C BUS
void TCA9548A(uint8_t bus){
Wire.beginTransmission(0x70); // TCA9548A address
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
}
void printValues(Adafruit_BME280 bme, int bus) {
TCA9548A (bus);
Serial.print("Sensor number on bus");
Serial.println(bus);
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}
void setup() {
Serial.begin(115200);
// Start I2C communication with the Multiplexer
Wire.begin();
// Init sensor on bus number 2
TCA9548A(2);
if (!bme1.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor on bus 2, check wiring!");
while (1);
}
Serial.println();
// Init sensor on bus number 3
TCA9548A(3);
if (!bme2.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor on bus 2, check wiring!");
while (1);
}
Serial.println();
// Init sensor on bus number 4
TCA9548A(4);
if (!bme3.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor on bus 2, check wiring!");
while (1);
}
Serial.println();
// Init sensor on bus number 5
TCA9548A(5);
if (!bme4.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor on bus 2, check wiring!");
while (1);
}
Serial.println();
}
void loop() {
//Print values for sensor 1
printValues(bme1, 2);
printValues(bme2, 3);
printValues(bme3, 4);
printValues(bme4, 5);
delay(5000);
}
Comment fonctionne le code
Continuez à lire pour savoir comment le code fonctionne ou passez à la Manifestation section.
Tout d’abord, importez les bibliothèques requises pour contrôler l’affichage BME280 : Adafruit_BME280 et Adafruit_Sensor. La bibliothèque Wire est nécessaire pour utiliser le protocole de communication I2C.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Ensuite, vous devez créer plusieurs instances d’Adafruit_BME280, une pour chaque capteur : bme1, bme2, bme3 et bme4.
Adafruit_BME280 bme1; // I2C
Adafruit_BME280 bme2; // I2C
Adafruit_BME280 bme3; // I2C
Adafruit_BME280 bme4; // I2C
Sélectionnez le canal I2C
La fonction TCA9548A() peut être appelée pour sélectionner le bus avec lequel vous souhaitez communiquer. Il envoie un octet au multiplexeur avec le numéro de port.
// 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);
}
Vous devez appeler cette fonction chaque fois que vous souhaitez sélectionner le port I2C.
fonction printValues()
Ensuite, nous créons une fonction printValues() qui nous permet d’imprimer dans le Serial Monitor les valeurs de chaque capteur. Cette fonction nous permet de passer l’instance Adafruit_BME280 et son bus.
Dans la fonction, nous sélectionnons le bus I2C auquel nous voulons parler en appelant la fonction TCA9548A() et en passant le bus comme argument.
TCA9548A (bus);
Ensuite, nous utilisons les fonctions habituelles pour obtenir des lectures du capteur.
Serial.print("Sensor number on bus");
Serial.println(bus);
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
installation()
Dans setup(), initialisez une communication série à des fins de débogage.
Serial.begin(115200);
Démarrez la communication I2C sur les broches I2C par défaut avec le multiplexeur I2C.
Wire.begin();
Ensuite, initialisez chaque capteur. Les lignes suivantes montrent un exemple pour le premier capteur BME280 (il est connecté au bus numéro 2 et fait référence à l’instance bme1).
//Init sensor on bus number 2
TCA9548A(2);
if (!bme1.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor on bus 2, check wiring!");
while (1);
}
Serial.println();
L’initialisation des autres capteurs est similaire, mais vous devez appeler la fonction TCA9548A() avec le numéro de bus I2C correspondant. N’oubliez pas non plus que chaque capteur a sa propre instance.
boucle()
Dans la boucle(), nous appelons la fonction printValues() pour chaque capteur.
printValues(bme1, 2);
printValues(bme2, 3);
printValues(bme3, 4);
printValues(bme4, 5);
Et c’est à peu près comme ça que le code fonctionne.
Manifestation
Téléchargez le code sur votre tableau. Ouvrez le moniteur série à un débit en bauds de 115200. Les lectures de chaque capteur seront affichées sur le moniteur série.

Conclusion
Ce tutoriel vous a appris à ajouter plus de ports I2C à votre microcontrôleur avec le multiplexeur I2C TCA9548A. Ceci est particulièrement utile si vous souhaitez connecter plusieurs appareils avec la même adresse I2C. De plus, l’adresse I2C du multiplexeur lui-même peut être modifiée de 0x70 à 0x77. Cela nous permet de connecter jusqu’à 8 multiplexeurs simultanément, ce qui vous permet de contrôler 64 appareils.
Les exemples présentés tout au long de ce didacticiel sont compatibles avec les cartes ESP32, ESP8266 et Arduino.
Nous avons un tutoriel complet sur les fonctions I2C avec l’ESP32 :
Apprenez-en plus sur ESP32, ESP8266 et Arduino avec nos ressources :
Nous espérons que vous trouverez ce tutoriel utile.
Merci d’avoir lu.
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :
-
DollaTek Carte d'extension de multiplexeur d'IIC de TCA9548A I2C Carte d'expansion de 8 canauxInterface: I2C IIC Puce: TCA9548A Adresse I2C sélectionnable: 0x70-0x77 Tension de fonctionnement: 1.65-5.5V Fréquence d'horloge maximale: 400KHz
-
DAOKAI 5PCS TCA9548A IIC Multiplexeur Carte de Déploiement 400kHz 1.8V - 5V 8 Canaux I2C Communication Commutateur Développement Carte d'Extension avec Réinitialisation pour Arduino🔢[Interface] Il y a 8 interfaces I2C sur 1 extenseur, équipées de 8 commutateurs bidirectionnels qui peuvent être contrôlés via le bus I2C. Cela signifie : après la connexion d'un extenseur, 8 appareils avec la même adresse peuvent être connectés au même port I2C et utilisés normalement. 🔢 [Adresse par défaut] L'adresse par défaut de cet extenseur est 0x70, l'adresse peut être modifiée et peut être définie entre 0x70 ~ 0x77 selon vos besoins. 🔢 [Compatible] Compatible avec le bus IIC et le bus de gestion du système, entrée active de réinitialisation basse, prise en charge de l'insertion à chaud, faible courant de veille. Aucune impulsion de pépin lors de la mise sous tension, prise en charge de la tension entre 1,8 V, 2,5 V, 3,3 V et 5 V bus Conversion plate. 🔢[Caractéristiques] 8 extenseurs peuvent être mis en cascade dans l'adresse de 0x70 ~ 0x77, et chaque extenseur peut être connecté à 8 appareils avec la même adresse, ce qui réalise que la même interface I2C est connectée à 64 appareils avec la même adresse et une utilisation normale. 🔢 [Le forfait comprend] Vous obtiendrez 5 x TCA9548A I2C IIC Multiplexer Breakout Board.
-
AZDelivery PCA9548A Multiplexeur I2C Multiplexeur 8 canaux Compatible avec Arduino incluant Un Ebook!✅ Le multiplexeur I2C commute 8 adresses I2C différentes dans la plage de 0x70 à 0x77. Cela permet à jusqu'à 8 appareils différents avec la même adresse I2C d'être connectés à la même interface I2C, le PCA9548A jouant le rôle de contrôleur d'accès. ✅ Permet la conversion du niveau de tension entre les bus 1,8 V, 2,5 V, 3,3 V et 5 V. ✅ Tension de fonctionnement: 1,8 V - 5 V. ✅ Fréquence d'horloge: 0 - 400 kHz. ✅ Ce produit inclut un E-Book qui fournit des informations utiles sur la façon de commencer votre projet. Il permet une installation rapide et fait gagner du temps sur le processus de configuration. On y trouve une série d'exemples d'applications, des guides d'installation complets et des bibliothèques.