im working on esp32 with two TCA95488a I2C multiplexer to read mpu 9250 (imu sensor). I'm` facing issues while i updated the code with two mux. i got results from single multiplexer. when i try to connect with the second one code compiles and im not receiving any data from the serial port.
i had attached the code for the reference purposes.
#include <Wire.h>
#include "MPU9250.h"
// an MPU9250 object with the MPU-9250 sensor on I2C bus 0 with address 0x68
MPU9250 IMU0(Wire, 0x68);
MPU9250 IMU1(Wire, 0x68);
int status;
// #define I2C_ADDR 0x68
#define TCAADDR0 0x70
#define TCAADDR1 0x71
void tcaselect(uint8_t i) {
if (i > 7) return;
Wire.beginTransmission(TCAADDR0);
Wire.write(1 << i);
Wire.endTransmission();
}
void tcaselect1(uint8_t j) {
if (j > 7) return;
Wire.beginTransmission(TCAADDR1);
Wire.write(1 << j);
Wire.endTransmission();
}
// void tcaselect(uint8_t i) {
// if (i > 7) return;
// unsigned int mask = 1 << i;
// Wire.beginTransmission(TCAADDR0);
// Wire.write(lowByte(mask));
// Wire.endTransmission();
// Wire.beginTransmission(TCAADDR1);
// Wire.write(highByte(mask));
// Wire.endTransmission();
// }
// void tcaselect(uint8_t sensor) {
// unsigned int mask = 1 << sensor;
// Wire.beginTransmission(TCAADDR0);
// Wire.write(lowByte(mask));
// Wire.endTransmission();
// Wire.beginTransmission(TCAADDR1);
// Wire.write(highByte(mask));
// Wire.endTransmission();
// delay(1);
// }
void setup() {
Serial.begin(9600);
Wire.begin();
while (!Serial) {}
// start communication with IMU
status = IMU0.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
Serial.println("Check IMU wiring or try cycling power");
Serial.print("Status: ");
Serial.println(status);
while (1) {}
}
status = IMU1.begin();
if (status < 0) {
Serial.println("IMU initialization unsuccessful");
Serial.println("Check IMU wiring or try cycling power");
Serial.print("Status: ");
Serial.println(status);
while (1) {}
}
Serial.println(F("##############################"));
Serial.println(F("Starting Initialization"));
Serial.println(F("##############################"));
//*************INITIALIZING FIRST SENSOR*******************************
tcaselect(0);
if (IMU0.begin() != 0x68)
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("No"));}
else
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("Yes"));}
tcaselect1(0);
if (IMU1.begin() != 0x68)
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("No"));}
else
{ Serial.print(F("MPU.1 detected?\t")); Serial.println(F("Yes"));}
}
//*********************************************************************
//*************NOW LET'S START MEASURING*******************************
void loop()
{
tcaselect(0);
IMU0.readSensor();
// display the data
Serial.print("Accel_X: ");
Serial.print(IMU0.getAccelX_mss(), 6);
Serial.print("\t");
Serial.print("Accel_Y: ");
Serial.print(IMU0.getAccelY_mss(), 6);
Serial.print("\t");
Serial.print("Accel_Z: ");
Serial.print(IMU0.getAccelZ_mss(), 6);
Serial.print("\t");
Serial.print("Gyro_X: ");
Serial.print(IMU0.getGyroX_rads(), 6);
Serial.print("\t");
Serial.print("Gyro_Y: ");
Serial.print(IMU0.getGyroY_rads(), 6);
Serial.print("\t");
Serial.print("Gyro_Z: ");
Serial.print(IMU0.getGyroZ_rads(), 6);
Serial.print("\t");
Serial.print("Mag_X: ");
Serial.print(IMU0.getMagX_uT(), 6);
Serial.print("\t");
Serial.print("Mag_Y: ");
Serial.print(IMU0.getMagY_uT(), 6);
Serial.print("\t");
Serial.print("Mag_Z: ");
Serial.print(IMU0.getMagZ_uT(), 6);
Serial.print("\t");
Serial.print("TEMP: ");
Serial.println(IMU0.getTemperature_C(), 6);
delay(100);
tcaselect1(0);
IMU1.readSensor();
// display the data
Serial.print("Accel_X: ");
Serial.print(IMU1.getAccelX_mss(), 6);
Serial.print("\t");
Serial.print("Accel_Y: ");
Serial.print(IMU1.getAccelY_mss(), 6);
Serial.print("\t");
Serial.print("Accel_Z: ");
Serial.print(IMU1.getAccelZ_mss(), 6);
Serial.print("\t");
Serial.print("Gyro_X: ");
Serial.print(IMU1.getGyroX_rads(), 6);
Serial.print("\t");
Serial.print("Gyro_Y: ");
Serial.print(IMU1.getGyroY_rads(), 6);
Serial.print("\t");
Serial.print("Gyro_Z: ");
Serial.print(IMU1.getGyroZ_rads(), 6);
Serial.print("\t");
Serial.print("Mag_X: ");
Serial.print(IMU1.getMagX_uT(), 6);
Serial.print("\t");
Serial.print("Mag_Y: ");
Serial.print(IMU1.getMagY_uT(), 6);
Serial.print("\t");
Serial.print("Mag_Z: ");
Serial.print(IMU1.getMagZ_uT(), 6);
Serial.print("\t");
Serial.print("TEMP: ");
Serial.println(IMU1.getTemperature_C(), 6);
delay(100);
delay(1000);
}
