/** i2c port scanner based on: in wire library examples i2c_scanner https://learn.adafruit.com/adafruit-pca9548-8-channel-stemma-qt-qwiic-i2c-multiplexer/arduino * */ #include #define PCAADDR 0x70 //i2c address of the i2c multiplexer void setup() { Serial.begin(115200); while (!Serial); // Leonardo: wait for Serial Monitor Serial.println("\nI2C Scanner"); } void pcaselect(uint8_t i) { if (i > 7) return; Wire.beginTransmission(PCAADDR); Wire.write(1 << i); Wire.endTransmission(); } void scandirectports(){ Wire.begin(); int nDevices = 0; Serial.println("Scanning for i2c ports on board..."); for (byte address = 1; address < 127; ++address) { // The i2c_scanner uses the return value of // the Wire.endTransmission to see if // a device did acknowledge to the address. Wire.beginTransmission(address); byte error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) { Serial.print("0"); } Serial.print(address, HEX); Serial.println(" !"); ++nDevices; } else if (error == 4) { Serial.print("Unknown 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"); } Serial.println("done scanning for i2c ports on board"); } void scani2cmultiplexer(){ Serial.println("Scanning for i2c ports on i2c multiplexer..."); for (uint8_t t=0; t<8; t++) { pcaselect(t); Serial.print("PCA Port #"); Serial.println(t); for (uint8_t addr = 0; addr<=127; addr++) { if (addr == PCAADDR) continue; Wire.beginTransmission(addr); if (!Wire.endTransmission()) { Serial.print("Found I2C 0x"); Serial.println(addr,HEX); } } } Serial.println("done scanning for i2c ports on i2c multiplexer"); } void loop() { scandirectports(); delay(1000); scani2cmultiplexer(); delay(1000); }