Is my TCA9548A dead on arrival? SOLVED

I'm trying to use a TCA9548A to interface with multiple 128x64 SSD1306 OLED displays using this tutorial: TCA9548A I2C Multiplexer: ESP32, ESP8266, Arduino | Random Nerd Tutorials

My microcontroller is an ESP32.
I have successfully tested the oled display connected directly to the ESP32 and it detects and works perfectly. When I try to connect to it through the TCA9548A the screen remains blank. Even when I do an I2C Port scan I get no devices found. Should I be able to at least see that the TCA9548A itself is showing up on address 0x70?

When I run the following code:

/**
 * TCA9548 I2CScanner.ino -- I2C bus scanner for Arduino
 *
 * Based on https://playground.arduino.cc/Main/I2cScanner/
 *
 */

#include "Wire.h"

#define TCAADDR 0x70

void tcaselect(uint8_t i) {
  if (i > 7) return;
 
  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();  
}


// standard Arduino setup()
void setup()
{
    while (!Serial);
    delay(1000);

    Wire.begin();
    
    Serial.begin(115200);
    Serial.println("\nTCAScanner ready!");
    
    for (uint8_t t=0; t<8; t++) {
      tcaselect(t);
      Serial.print("TCA Port #"); Serial.println(t);

      for (uint8_t addr = 0; addr<=127; addr++) {
        if (addr == TCAADDR) continue;

        Wire.beginTransmission(addr);
        if (!Wire.endTransmission()) {
          Serial.print("Found I2C 0x");  Serial.println(addr,HEX);
        }
      }
    }
    Serial.println("\ndone");
}

void loop() 
{
}

I get this:

TCAScanner ready!
TCA Port #0
TCA Port #1
TCA Port #2
TCA Port #3
TCA Port #4
TCA Port #5
TCA Port #6
TCA Port #7

done

When I run the following code:

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com  
*********/

#include <Wire.h>
 
void setup() {
  Wire.begin();
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}
 
void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
      nDevices++;
    }
    else if (error==4) {
      Serial.print("Unknow error at address 0x");
      if (address<16) {
        Serial.print("0");
      }
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  }
  else {
    Serial.println("done\n");
  }
  delay(5000);          
}

I get this:


Scanning...
No I2C devices found

Am I doing something wrong or is my TCA9548A not working?
Here is a picture of how I have it wired up:

If this were a schematic of how you actually wired it, you would probably see you do not have the appropriate pull up resistors on the I2C bus.

Yes the diagram is exactly how I have it wired up, I drew it in Fritzing.

In all the tutorials I've found they don't specify to use any resistors. Where would I find what value and where to place the resistors?

EDIT: also, the Oled screen works perfectly directly connected to the ESP32 i2c. Is there a reason the TCA9548A needs pull up resistors to work on the I2C bus when the OLED display does not?

Have you red the specification on I2C, i would guess not as you do not know about the pull up resistors and open drain outputs. 4.7K appears to be the default but it is dependent on the bus load and capacitance. You are probably lucky the Oled screen works but then again the module may have resistors on it, without technical information I have no way of knowing. Look at the schematic and see if it does. I do not like frizzing because important details are missing. Your frizzy thing also leaves us guessing as to how you are powering it. If you do not have schematic capture you can do it on paper and take a clear picture. Also important is a link to technical information on the hardware devices. When I look up TCA9548A I find chips and they require a pull up. Try adding the resistors and be sure the SCL and SDA are connected properly and the grounds also.

Okay so I ordered a 2nd identical TCA9548a and this one works with the exact same wiring scheme. It turns out my previous one was Dead On Arrival. No pull-up resistors are needed after all. I think they are included on the TCA9548A board itself.

No pull up inside the TCA chip or on the common (Adafruit/ebay) breakout boards.
You are relying on the internal pull up of the ESP32 and on the pull up resistors on the connected devices. That might just work on a breadboard with short dupond wires.
Leo..