Skip to content

FA25 Kannai Devboard

alt text alt text
alt text alt text

I2C Scanner

Ref. Running Seeed XIAO RP2040 with Arduino-Pico_JP

//The RP2040 has two I2C channels(I2C0, I2C1), and the assigned pins can be chosen from several options. 
//However, the default pin assignment does not match the I2C pins on the Seeed XIAO RP2040,
//so it is necessary to set the pins before calling Wire.begin().
//
//|Pin Name|Default Assignment|Seeed XIAO RP2040 Pin Assignment|
//|--------|------------------|--------------------------------|
//|SDA     |GPIO4 (I2C0)      |GPIO6 (I2C1)                    |
//|SCL     |GPIO5 (I2C0)      |GPIO7 (I2C1)                    |
//

//The RP2040 has two I2C channels, and the assigned pins can be chosen from several options. However, the default pin assignment does not match the I2C pins on the Seeed XIAO RP2040, so it is necessary to set the pins before calling Wire.begin().

#include <Wire.h>

#define XIAO_RP2040_NEW_BOARD (defined(ARDUINO_SEEED_XIAO_RP2040) || (defined(ARDUINO_SEEED_XAIO_RP2040) && defined(__WIRE0_DEVICE)))

#if XIAO_RP2040_NEW_BOARD
#define WIRE Wire
#else
#define WIRE Wire1
#endif

void setup()
{
#if !XIAO_RP2040_NEW_BOARD
  WIRE.setSDA(SDA);
  WIRE.setSCL(SCL);
#endif
  WIRE.begin();

  Serial.begin(115200);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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.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");

  delay(5000);           // wait 5 seconds for next scan
}