- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
I2C/Wire in Arduino Uno
I2C stands for Inter-Integrated Circuit. It is a popular communication protocol used by several peripherals like accelerometer and gyroscopes, OLED Displays, etc. Arduino refers to I2C as Wire, which is a shorter form of the term Atmel uses (Two Wire Interface or TWI). Here are some salient features of I2C −
It uses only two lines: One for data (SDA) and one for clock (SCL). I2C is synchronous because it uses a clock.
The slaves are not selected via a slave select line, but via address bits.
The first byte sent by the master contains a seven-bit address and a read/ write bit indicating whether the next bytes will come from the master or should come from the slave. Thus a maximum of 127 slaves with unique addresses can be connected to a single master.
After each byte, the receiver must send a 0 to acknowledge the reception of the byte
If the master wants to receive the data, it only generates clock pulses. The slave has to make sure that the next bit is ready when the clock pulse arrives
The data and clock lines are pulled up, i.e. two resistors pull the bus to a high level and the devices only send low levels. If they want to send high level, they simply release the bus.
Start/Stop sequence is required to signal start and end of communication
On Arduino Uno, there is I2C support. The following pins are generally used for SPI −
SDA − A4
SCL − A5
Arduino has a built-in Wire library. The important functions of this library are given below −
Wire.begin() − Initialize Wire
Wire.beginTransmission(address) − Initiate transmission with the slave identified by address
Wire.endTransmission() − End a transmission initiated by beginTransmission()
Wire.SetClock(frequency) − Set the clock speed to frequency (in Hz)
Wire.write(byte) − Queue bytes for transmission from master to slave, or write data from slave in response to request from master
Wire.read() − If a master send requestFrom() to slave, then it will read the returned byte using this function. Alternatively, if master transmitted bytes to a slave, this function on the slave will be used to read the bytes
To know more about the different arguments of these functions, and to know about the other important functions related to Wire, you can check the Arduino reference on Wire.
You are encouraged to go through the built-in examples related to Wire, which can be accessed from File → Examples → Wire
- Related Articles
- Timers in Arduino Uno
- SPI in Arduino Uno
- Arduino Uno vs Arduino Leonardo
- Arduino Uno vs Arduino Micro
- Arduino Uno vs Arduino Mega
- Arduino Uno vs Arduino Nano
- Arduino Uno vs Arduino Due
- Understanding Arduino Uno pinout
- Arduino Uno vs ESP32
- Arduino Uno vs Teensy
- Timer1 based PWM in Arduino Uno
- Understanding memory types in Arduino Uno
- Components of Arduino Uno board
- Arduino Uno vs Raspberry Pi
- Arduino Uno vs STM32duino (Blue Pill)
