FA25 Kannai Devboard¶
![]() |
![]() |
![]() |
![]() |
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
}