How to connect I2C 16X2 LCD Display for Arduino


How to connect an i2c LCD display to an Arduino UNO tutorial.
How to use I2C 16X2 (1602) LCD Display for Arduino.
In this video, you will see how to interface 16×2 LCD Display with Arduino via I2C communication and code explanation. To make the code you must require 2 library files, download below with code. We use I2C communication to reduce the connections.
Download code and libraries :

~ How to Connect MQ2 Gas Sensor to Arduino :
~ Simple Arduino Weather Station :

Parts Required :
Arduino Uno:
I2C LCD Display:
Male to female jumpers:

Get components Here :
Visit Website :
Telegram :
Patreon :
Follow us on ~~
Facebook :
Instructables :
Google + :
Twitter :

I2C was originally developed in 1982 by Philips for various Philips chips. The original spec allowed for only 100kHz communications, and provided only for 7-bit addresses, limiting the number of devices on the bus to 112 (there are several reserved addresses, which will never be used for valid I2C addresses). In 1992, the first public specification was published, adding a 400kHz fast-mode as well as an expanded 10-bit address space. Much of the time (for instance, in the ATMega328 device on many Arduino-compatible boards) , device support for I2C ends at this point. There are three additional modes specified: fast-mode plus, at 1MHz; high-speed mode, at 3.4MHz; and ultra-fast mode, at 5MHz.

In addition to “vanilla” I2C, Intel introduced a variant in 1995 call “System Management Bus” (SMBus). SMBus is a more tightly controlled format, intended to maximize predictability of communications between support ICs on PC motherboards. The most significant difference between SMBus is that it limits speeds from 10kHz to 100kHz, while I2C can support devices from 0kHz to 5MHz. SMBus includes a clock timeout mode which makes low-speed operations illegal, although many SMBus devices will support it anyway to maximize interoperability with embedded I2C systems.
The Inter-integrated Circuit (I2C) Protocol is a protocol intended to allow multiple “slave” digital integrated circuits (“chips”) to communicate with one or more “master” chips. Like the Serial Peripheral Interface (SPI), it is only intended for short distance communications within a single device. Like Asynchronous Serial Interfaces (such as RS-232 or UARTs), it only requires two signal wires to exchange information.
I2C requires a mere two wires, like asynchronous serial, but those two wires can support up to 1008 slave devices. Also, unlike SPI, I2C can support a multi-master system, allowing more than one master to communicate with all devices on the bus (although the master devices can’t talk to each other over the bus and must take turns using the bus lines).

Data rates fall between asynchronous serial and SPI; most I2C devices can communicate at 100kHz or 400kHz. There is some overhead with I2C; for every 8 bits of data to be sent, one extra bit of meta data (the “ACK/NACK” bit, which we’ll discuss later) must be transmitted.

The hardware required to implement I2C is more complex than SPI, but less than asynchronous serial. It can be fairly trivially implemented in software.
Each I2C bus consists of two signals: SCL and SDA. SCL is the clock signal, and SDA is the data signal. The clock signal is always generated by the current bus master; some slave devices may force the clock low at times to delay the master sending more data (or to require more time to prepare data before the master attempts to clock it out). This is called “clock stretching” and is described on the protocol page.

Unlike UART or SPI connections, the I2C bus drivers are “open drain”, meaning that they can pull the corresponding signal line low, but cannot drive it high. Thus, there can be no bus contention where one device is trying to drive the line high while another tries to pull it low, eliminating the potential for damage to the drivers or excessive power dissipation in the system. Each signal line has a pull-up resistor on it, to restore the signal to high when no device is asserting it low.


Xem thêm bài viết khác:


  1. Arduino: 1.8.10 (Windows 7), Πλακέτα:"Arduino/Genuino Uno"

    Βρέθηκαν πολλαπλές βιβλιοθήκες για "Wire.h"

    SerialDisplay:6:10: error: LiquidCrystal_I2C.h: No such file or directory

    Σε χρήση: C:Program

    #include <LiquidCrystal_I2C.h>


    compilation terminated.

    exit status 1

    LiquidCrystal_I2C.h: No such file or directory

    Αυτή η αναφορά θα παρείχε περισσότερες πληροφορίες με

    "Εμφάνιση πλεονάζουσα έξοδος κατά τη σύνταξη"

    Επιλογή από το Αρχείο -> Προτιμήσεις.

    i cant upload in board were is liquid crystal………………… gives error

  2. // code which iam using but no text print on display on lcd. all connections as per video..

    #include <Wire.h>

    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 16, 2);

    void setup()



    lcd.backlight();//To Power ON the back light

    //lcd.backlight();// To Power OFF the back light


    void loop()


    //Write your code

    lcd.setCursor(0,0); //Defining positon to write from first row,first column .

    lcd.print(" Tech Maker "); //You can write 16 Characters per line .

    delay(1000);//Delay used to give a dynamic effect

    lcd.setCursor(0,1); //Defining positon to write from second row,first column .

    lcd.print("Like | Share");


    lcd.clear();//Clean the screen


    lcd.print(" SUBSCRIBE ");


    lcd.print(" TECH MAKER ");



  3. When I try to verify the sketch, I just get a bunch of errors that a bunch of TWI stuff isn't declared in the Wire.cpp file. Could this mean my file is damaged or something? Or do I need to add the listed definitions into it?

  4. Look i do 100 of these Video’s step by step,wire for wire and double ,triple check and always come out with the same result!!NOTHING,I’m using a Arduino Uno I2C and a 16×2 LCD and nothing again & again,how can i check, trouble shot my work i’m frustrated!It all works without a I2C on a 20×4 LCD but not a 16×2 which i have 4 all with I2C,please help!!!


Please enter your comment!
Please enter your name here