Two TCA9548 multiplexers on esp32 for two I2c ports

I am trying to use two TCA9548 multiplexers for 11 ADXL's on esp32 in two I2c ports .
I get values only for the first multiplexer with default GPIO 21(SDA) and GPIO 22(SCL). While I try for the other I2c port I do not get values for ADXLs. I am not able to figure out where the problem lies.

#include "Wire.h"
#include <SparkFun_ADXL345.h>        

#define SDA_1 21
#define SCL_1 22

#define SDA_2 33
#define SCL_2 32

TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);

/*********** COMMUNICATION SELECTION ***********/
ADXL345 adxl1 = ADXL345();         
ADXL345 adxl2 = ADXL345();
ADXL345 adxl3 = ADXL345();         
ADXL345 adxl4 = ADXL345();
ADXL345 adxl5 = ADXL345();         
ADXL345 adxl6 = ADXL345();
ADXL345 adxl7 = ADXL345();         
ADXL345 adxl8 = ADXL345();
ADXL345 adxl9 = ADXL345();         
ADXL345 adxl10 = ADXL345();
ADXL345 adxl11 = ADXL345();  

#define TCAADDR1 0x70
void tcaselect_1(uint8_t bus) {
  if (bus > 7) return;
 
  Wire.beginTransmission(TCAADDR1);
  Wire.write(1 << bus);
  Wire.endTransmission();  
}

#define TCAADDR2 0x7
void tcaselect_2(uint8_t i) {
  if (i > 7) return;
 
  I2Ctwo.beginTransmission(TCAADDR2);
  I2Ctwo.write(1 << i);
  I2Ctwo.endTransmission();  
}

/******************** SETUP ********************/
/*          Configure ADXL345 Settings         */
void setup(){
      
  Serial.begin(115200); 

  I2Cone.begin(SDA_1,SCL_1,400000); // SDA pin 21, SCL pin 22 TCA1
  I2Ctwo.begin(SDA_2,SCL_2,400000); // SDA pin 33, SCL pin 32 TCA2
                  
/***** MUX 1 *****/

  tcaselect_1(1);
  adxl1.powerOn();                    
  adxl1.setRangeSetting(2);
  
  tcaselect_1(2);
  adxl2.powerOn();                     
  adxl2.setRangeSetting(2); 

  tcaselect_1(3);
  adxl3.powerOn();                    
  adxl3.setRangeSetting(2);
  
  tcaselect_1(4);
  adxl4.powerOn();                     
  adxl4.setRangeSetting(2); 

  tcaselect_1(5);
  adxl5.powerOn();                    
  adxl5.setRangeSetting(2);
  
  tcaselect_1(6);
  adxl6.powerOn();                     
  adxl6.setRangeSetting(2);           

/****** MUX 2 ********/
tcaselect_2(1);
  adxl7.powerOn();                    
  adxl7.setRangeSetting(2);
  
  tcaselect_2(2);
  adxl8.powerOn();                     
  adxl8.setRangeSetting(2); 

  tcaselect_2(3);
  adxl9.powerOn();                    
  adxl9.setRangeSetting(2);
  
  tcaselect_2(4);
  adxl10.powerOn();                     
  adxl10.setRangeSetting(2); 

  tcaselect_2(5);
  adxl11.powerOn();                    
  adxl11.setRangeSetting(2);
                                     
 
}

/****************** MAIN CODE ******************/
/*     Accelerometer Readings    */
void loop(){

  tcaselect_1(1);
  // Accelerometer Readings
  int x1,y1,z1;   
  adxl1.readAccel(&x1, &y1, &z1);         // Read the accelerometer values and store them in variables declared above x,y,z
  // Output Results to Serial
  Serial.print("X1: "); Serial.print(x1); Serial.print("  ");
  Serial.print("y1: "); Serial.print(y1); Serial.print("  ");
  Serial.print("z1: "); Serial.print(z1); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);
   
  tcaselect_1(2);
  // Accelerometer Readings
  int x2,y2,z2;   
  adxl2.readAccel(&x2, &y2, &z2);        
  // Output Results to Serial
  Serial.print("X2: "); Serial.print(x2); Serial.print("  ");
  Serial.print("y2: "); Serial.print(y2); Serial.print("  ");
  Serial.print("z2: "); Serial.print(z2); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);

  tcaselect_1(3);
  // Accelerometer Readings
  int x3,y3,z3;   
  adxl3.readAccel(&x3, &y3, &z3);        
  // Output Results to Serial
  Serial.print("X3: "); Serial.print(x3); Serial.print("  ");
  Serial.print("y3: "); Serial.print(y3); Serial.print("  ");
  Serial.print("z3: "); Serial.print(z3); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500); 

   tcaselect_1(4);
  // Accelerometer Readings
  int x4,y4,z4;   
  adxl4.readAccel(&x4, &y4, &z4);         // Read the accelerometer values and store them in variables declared above x,y,z
  // Output Results to Serial
  Serial.print("X4: "); Serial.print(x4); Serial.print("  ");
  Serial.print("y4: "); Serial.print(y4); Serial.print("  ");
  Serial.print("z4: "); Serial.print(z4); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);
   
  tcaselect_1(5);
  // Accelerometer Readings
  int x5,y5,z5;   
  adxl5.readAccel(&x5, &y5, &z5);        
  // Output Results to Serial
  Serial.print("X5: "); Serial.print(x5); Serial.print("  ");
  Serial.print("y5: "); Serial.print(y5); Serial.print("  ");
  Serial.print("z5: "); Serial.print(z5); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);

  tcaselect_1(6);
  // Accelerometer Readings
  int x6,y6,z6;   
  adxl6.readAccel(&x6, &y6, &z6);        
  // Output Results to Serial
  Serial.print("X6: "); Serial.print(x6); Serial.print("  ");
  Serial.print("y6: "); Serial.print(y6); Serial.print("  ");
  Serial.print("z6: "); Serial.print(z6); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500); 


//////////////////////////////////////////////////////////////

 tcaselect_2(1);
  // Accelerometer Readings
  int x7,y7,z7;   
  adxl7.readAccel(&x7, &y7, &z7);        
  // Output Results to Serial
  Serial.print("X7: "); Serial.print(x7); Serial.print("  ");
  Serial.print("y7: "); Serial.print(y7); Serial.print("  ");
  Serial.print("z7: "); Serial.print(z7); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);

  tcaselect_2(2);
  // Accelerometer Readings
  int x8,y8,z8;   
  adxl8.readAccel(&x8, &y8, &z8);        
  // Output Results to Serial
  Serial.print("X8: "); Serial.print(x8); Serial.print("  ");
  Serial.print("y8: "); Serial.print(y8); Serial.print("  ");
  Serial.print("z8: "); Serial.print(z8); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500); 

   tcaselect_2(3);
  // Accelerometer Readings
  int x9,y9,z9;   
  adxl9.readAccel(&x9, &y9, &z9);         // Read the accelerometer values and store them in variables declared above x,y,z
  // Output Results to Serial
  Serial.print("X9: "); Serial.print(x9); Serial.print("  ");
  Serial.print("y9: "); Serial.print(y9); Serial.print("  ");
  Serial.print("z9: "); Serial.print(z9); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);
   
  tcaselect_2(4);
  // Accelerometer Readings
  int x10,y10,z10;   
  adxl10.readAccel(&x10, &y10, &z10);        
  // Output Results to Serial
  Serial.print("X10: "); Serial.print(x10); Serial.print("  ");
  Serial.print("y10: "); Serial.print(y10); Serial.print("  ");
  Serial.print("z10: "); Serial.print(z10); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);

   tcaselect_2(5);
  // Accelerometer Readings
  int x11,y11,z11;   
  adxl11.readAccel(&x11, &y11, &z11);         // Read the accelerometer values and store them in variables declared above x,y,z
  // Output Results to Serial
  Serial.print("X11: "); Serial.print(x11); Serial.print("  ");
  Serial.print("y11: "); Serial.print(y11); Serial.print("  ");
  Serial.print("z11: "); Serial.print(z11); Serial.print("  ");
  Serial.println("m/s^2 ");
   delay(500);

}

I have also tried to interface 6 adxls separately with the twoWire instance but ,no luck! Please do respond

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