Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
Arbi Abdul Jabbaar
Published

How to Scan I2C Address in Arduino

You will be able to know the I2C address of your module that's connected to SDA & SCL Arduino by using I2C scanner code.

BeginnerProtip1 hour165,835
How to Scan I2C Address in Arduino

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
You can use any version of Arduino, but i'll use Arduino UNO R3
×1
10 DOF Mems IMU Sensor
DFRobot 10 DOF Mems IMU Sensor
You can use any I2C Device but here i am using GY-87 Module, because it has a lot of I2C Devices inside this.
×1
Jumper wires (generic)
Jumper wires (generic)
10cm or longer Female to Male Jumper Wires
×4

Software apps and online services

Arduino IDE
Arduino IDE
You can download this app in https://www.arduino.cc/en/main/software

Story

Read more

Schematics

Wiring diagram of Arduino and GY-87 Module

Code

I2C Scanner Arduino Code

C/C++
Write your code in Arduino IDE Software, save it. Select the port (i.e COM3) and choose your Arduino board type (i.e Arduino Uno / Genuino) then compile it to your Arduino.
/ ---------------------------------------------------------------- /
// Arduino I2C Scanner
// Re-writed by Arbi Abdul Jabbaar
// Using Arduino IDE 1.8.7
// Using GY-87 module for the target
// Tested on 10 September 2019
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
/ ---------------------------------------------------------------- /

#include <Wire.h> //include Wire.h library

void setup()
{
  Wire.begin(); // Wire communication begin
  Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
  while (!Serial); // Waiting for Serial Monitor
  Serial.println("\nI2C Scanner");
}

void loop()
{
  byte error, address; //variable for error and I2C 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 the next I2C scan
}

Credits

Arbi Abdul Jabbaar

Arbi Abdul Jabbaar

3 projects • 42 followers
I am a student of National Technology of Institute, Indonesia majoring in Electrical Engineering. I've developed hardware for about 3 years.

Comments