Introduction to LCD and I2C Communication
From the C-tech curriculum
TL;DR
You'll learn how to connect and control Liquid Crystal Displays (LCDs) using a special communication method called I2C. This setup saves you wiring and makes your projects neater while still letting you display text and data. We'll cover the basic setup and how to send information to the LCD screen.
1. The Mental Model
Imagine you have a tiny digital billboard (your LCD) that needs to receive messages from a messenger (your microcontroller). Instead of running many individual wires for every single letter, I2C is like having a super-efficient postal service that uses only two main wires to send all messages to many different billboards.
2. The Core Material
LCDs are great for displaying information in your projects. Traditionally, connecting a standard 16x2 LCD (16 characters, 2 lines) directly to a microcontroller requires many wires – typically 6 data lines, plus power and control lines. This can quickly use up valuable pins on your microcontroller.
What is I2C?

Photo by Ann H on Pexels
I2C (Inter-Integrated Circuit) is a serial communication protocol that allows multiple "slave" devices (like your LCD) to communicate with one "master" device (your microcontroller) using only two wires:
* SDA (Serial Data Line): This line carries the actual data back and forth.
* SCL (Serial Clock Line): This line synchronizes the data transfer between devices.
Why use I2C with an LCD?

Photo by ThisIsEngineering on Pexels
An I2C LCD uses a small backpack module attached to the back of the standard LCD. This module contains a special chip (often a PCF8574) that acts as an I2C expander. It receives I2C commands from your microcontroller and translates them into the parallel signals the LCD understands.
Benefits:
* Fewer Wires: Only 4 wires are needed (SDA, SCL, VCC, GND) instead of 10-12.
* More Available Pins: Frees up microcontroller pins for other sensors or actuators.
* Simpler Wiring: Reduces complexity and potential for wiring errors.
Connecting an I2C LCD

Photo by ThisIsEngineering on Pexels
Here’s how you'd typically wire an I2C LCD to an Arduino-compatible board:
| I2C LCD Pin | Arduino Pin (e.g., Uno/Nano) |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | A4 (Analog Pin 4) |
| SCL | A5 (Analog Pin 5) |
Note: For some boards like ESP32 or ESP8266, SDA and SCL pins might be different. Always check your board's pinout.
Communicating with an I2C LCD

Photo by Francesco Paggiaro on Pexels
To make your microcontroller talk to the I2C LCD, you'll need a library. For Arduino, the LiquidCrystal_I2C library is very common. This library handles all the complex I2C communication details for you, allowing you to use simple commands like print() and setCursor().
Every I2C device has a unique address. The common I2C address for LCD backpack modules is 0x27 or 0x3F. If your LCD doesn't work, you might need to find its correct address (there are Arduino sketches available to scan for I2C addresses).
Here's the basic flow of how your code interacts with the I2C LCD:
graph TD
A[Start Program] --> B{Include LiquidCrystal_I2C Library};
B --> C{Define LCD Address and Dimensions};
C --> D[Initialize LCD (lcd.init())];
D --> E[Turn on LCD Backlight (lcd.backlight())];
E --> F[Set Cursor Position (lcd.setCursor(col, row))];
F --> G[Print Text (lcd.print("Hello!"))];
G --> H[Repeat F and G for more text];
H --> I[End Program / Loop];
3. Worked Example
Let's write a simple Arduino sketch to display "Hello, C-tech!" on the first line and "Welcome!" on the second line of a 16x2 I2C LCD.
First, you'll need to install the LiquidCrystal I2C library from the Arduino IDE's Library Manager (Sketch > Include Library > Manage Libraries...). Search for "LiquidCrystal I2C" and install the one by Frank de Brabander or DFRobot.
#include <Wire.h> // Required for I2C communication
#include <LiquidCrystal_I2C.h> // Library for I2C LCD
// Set the LCD address and dimensions (columns, rows)
// Common addresses are 0x27 or 0x3F. Try 0x27 first.
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Initialize the LCD
lcd.init();
// Turn on the backlight
lcd.backlight();
// Print initial message
lcd.setCursor(0, 0); // Column 0, Row 0 (top-left)
lcd.print("Hello, C-tech!");
lcd.setCursor(0, 1); // Column 0, Row 1 (bottom-left)
lcd.print("Welcome!");
}
void loop() {
// Nothing to do in the loop for this example,
// the message stays displayed.
}
Upload this code to your Arduino, and you should see the messages appear on your LCD. If nothing shows up, double-check your wiring and try changing the LCD address in the code from 0x27 to 0x3F.
4. Key Takeaways
- I2C communication uses only two data wires (SDA and SCL) to control multiple devices.
- An I2C LCD uses a backpack module that translates I2C signals for the LCD.
- Wiring an I2C LCD is simpler, typically needing only VCC, GND, SDA, and SCL.
- You need the
Wire.handLiquidCrystal_I2C.hlibraries to use an I2C LCD with Arduino. - Every I2C device has a unique address; common LCD addresses are
0x27or0x3F. - The
lcd.init(),lcd.backlight(),lcd.setCursor(), andlcd.print()functions are essential for controlling the LCD.
Common Mistakes to Avoid:
- Incorrect I2C Address: If nothing displays, the address 0x27 might be wrong; try 0x3F or use an I2C scanner sketch.
- Wrong Wiring: Double-check that SDA goes to SDA and SCL to SCL, and power is correct.
- Missing Library: Ensure you've installed the LiquidCrystal_I2C library in your Arduino IDE.
- Forgetting lcd.init() or lcd.backlight(): The LCD won't display anything or will remain dark without these calls.
5. Now Try It
Modify the example code to make the text "Welcome!" scroll across the second line of the LCD. You'll need to use lcd.setCursor() and lcd.print() inside the loop() function, and introduce a small delay (delay()) to see the effect. The goal is to have "Welcome!" start at the far right and move left until it disappears, then restart.
Frequently asked about Introduction to LCD and I2C Communication
Study this next
Get the full C-tech curriculum
Clone the complete plan to your dashboard for unlimited AI-generated notes, practice quizzes, and a personalised revision schedule.
Save this course free