Solved: I2c scanner arduino

Sure, here’s the structure for an article on how to use an I2C scanner with Arduino.

The I2C or Inter-Integrated Circuit protocol is an important communication protocol that Arduino microcontrollers use to communicate with various sensors, display devices, and other microcontrollers. Understanding and utilizing the I2C protocol can significantly expand the capabilities of your Arduino projects.

The need to discover or confirm the I2C address of a device (like a sensor or display) connected to your Arduino can sometimes arise. In this case, an I2C scanner comes in handy. It can identify the addresses of all connected I2C devices — a vital first step in using I2C communication effectively.

Using an I2C Scanner

The most popular I2C scanner available was written by Tod E. Kurt, an arduino enthusiast. It provides quick and simple feedback on the connected I2C devices to your arduino.


void setup()

Serial.println(“nI2C Scanner”);

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


nDevices = 0;
for(address = 1; address < 127; address++ ) { // Start with a device address to see if there is a response Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print(""); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } } if (nDevices == 0) Serial.println("No I2C devices foundn"); else Serial.println("donen"); delay(2000); } [/code]

Code Explanation

The code starts by including the Wire library which is built-in Arduino’s library designed for I2C communication. It provides functions that help read and write data in an I2C bus.

In the setup function, the Wire.begin() initializes the I2C bus and the Serial communication is started at a baud rate of 9600.

In the loop function, the code scans each address on the I2C bus, attempting to establish communication using Wire.beginTransmission() and finalizing communication with Wire.endTransmission().

If a device is found at a certain address, the I2C scanner code prints this address in the serial monitor. If no devices are found, the scanner prints an appropriate message. The scanning process repeats every two seconds.

I2C in Arduino Libraries

The Wire library is essential for I2C communication in Arduino. This library abstracts the complex operations involved in I2C, making it easy for beginners and experienced coders to use this communication protocol. The Wire library is built on two main functions: Wire.begin() used for initializing the I2C bus and Wire.beginTransmission(addr) which starts transmission to the device at ‘addr’ address.

Learning about Arduino libraries such as Wire can greatly enhance your I2C device projects. This is especially true as more and more user-friendly, open-source libraries are being developed, which further simplify the usage of complex peripheral interfaces like I2C.

Every Arduino project thrives on the efficient use of available libraries. For I2C devices, understanding the Wire library is pivotal. I hope this overview and detailed look at the I2C scanning code has enhanced your proficiency in the I2C protocol and Arduino.

Related posts:

Leave a Comment