Arduino Playground

I2C Scanner Playground

This code sample shows how to scan the I2C bus and detect the devices attached to it. In this case we have one I2C LCD screen.

Click on "Run code" to find out which I2C address the screen is attached to!


Have questions? Feedback? Please share with us below:

sketch.ino

// --------------------------------------
// i2c-scanner
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
// See full version history here: https://gist.github.com/urish/917414da3477e528c8782ee05cd6f557

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  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
}