TCA9548A I2C multiplexer (8 channels) with ESP32

Supply 3.3-5 V Bus I2C I2C address 0x70 / 0x71 / 0x72 / 0x73 / 0x74 / 0x75 / 0x76 / 0x77
VINGNDSCLSDARSTA0A1A2SD0SC0SD1SC1SD2SC2SD3SC3SD4SC4SD5SC5SD6SC6SD7SC7

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VINPower3V33 to 5 V
GNDGroundGND
SCLI2C clock (SCL)D22
SDAI2C data (SDA)D21
RSTNot wired to the ESP32—Reset, active LOW, pulled up. Leave unconnected
A0Not wired to the ESP32—Address select. All unconnected = 0x70
A1Not wired to the ESP32—
A2Not wired to the ESP32—
SD0Not wired to the ESP32—Channel SDA: to a sensor, not to the ESP32
SC0Not wired to the ESP32—Channel SCL: to a sensor, not to the ESP32
SD1Not wired to the ESP32—
SC1Not wired to the ESP32—
SD2Not wired to the ESP32—
SC2Not wired to the ESP32—
SD3Not wired to the ESP32—
SC3Not wired to the ESP32—
SD4Not wired to the ESP32—
SC4Not wired to the ESP32—
SD5Not wired to the ESP32—
SC5Not wired to the ESP32—
SD6Not wired to the ESP32—
SC6Not wired to the ESP32—
SD7Not wired to the ESP32—
SC7Not wired to the ESP32—

Suggested wiring for the 30-pin ESP32 DevKit, avoiding flash, input-only and strapping pins. BoardPilot checks it for you as you wire.

Starter code (Arduino)

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);  // SDA = GPIO 21, SCL = GPIO 22
  Wire.beginTransmission(0x70);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "TCA9548A I2C multiplexer (8 channels) found at 0x70" : "Not found: check power, GND and SDA/SCL");
}

void loop() {}

Sources

Try it in 3D in BoardPilot

BoardPilot Part data (JSON)

Related parts

Part data: CC BY 4.0, free to reuse with credit to BoardPilot.