The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
To connect a standard 16×2 HD44780-compatible LCD to a classic Arduino Uno R3 with only four connections, use an LCD fitted with an I2C backpack. Connect VCC to 5V, GND to GND, SDA to A4/SDA, and SCL to A5/SCL. Before uploading the display program, scan the I2C bus and use the address the scanner reports instead of assuming 0x27.
What “four-wire I2C LCD” means
The four connections are two power wires and two communication wires:
- VCC supplies power.
- GND provides the common ground.
- SDA carries I2C data.
- SCL carries the I2C clock.
A normal 16×2 character LCD is a parallel device and may have 14 or 16 pins. The I2C backpack contains an I/O expander that converts the two-wire I2C connection into the LCD’s parallel control and data signals. It handles signals such as RS, E, the data lines, and usually the backlight control.
This method therefore requires a 16×2 LCD with a compatible backpack already attached, or a separate backpack soldered to the LCD. A bare parallel LCD cannot normally be operated with just these four wires. The LCD should use an HD44780-compatible controller or equivalent and a standard single-row connector. Backpacks intended for some 40×4 displays, graphic displays, or 16×2 OLEDs are not automatically compatible. See Adafruit’s LCD compatibility notes.
#1 Best Overall
- 1602 LCD screen can display 2 lines x 16 characters, with i2c serial interface, blue display.
- Built-in independent potentiometer, backlight can be adjusted through the back potentiometer.
- Power supply: 5v; I2C address: 0x27; wiring method: GND—GND, VCC—VCC, SDA—A4, SCL—A5.
- Compatible with most development boards, such as Arduino, Raspberry pi, Tinkerboard, Nano pi, Banana pi, stm32, etc.
- Widely used in: Internet of Things, school electronics projects, smart buildings, maker DIY projects, etc., can display letters, characters, numbers, real-time clock or temperature.
What you need
- Classic Arduino Uno R3 or a compatible 5 V ATmega328P Uno board
- Standard 16×2 HD44780-compatible character LCD
- I2C backpack with pins labeled
VCC,GND,SDA, andSCL - Four jumper wires
- USB cable and Arduino IDE
Do not rely on the physical order of the backpack header. Module manufacturers arrange the pins differently, so follow the printed labels.
Wire the LCD to the classic Uno
| LCD backpack | Arduino Uno R3 | Purpose |
|---|---|---|
VCC, +5V, or 5V |
5V |
Power |
GND |
GND |
Common ground |
SDA |
A4 or dedicated SDA |
I2C data |
SCL |
A5 or dedicated SCL |
I2C clock |
On an Uno R3, the dedicated SDA and SCL header pins are electrically equivalent to A4 and A5. The official Arduino Wire documentation identifies these as the Uno’s I2C/TWI pins.
Do not swap SDA and SCL, and do not use arbitrary digital pins unless you deliberately choose a software-I2C library that supports them. The wiring above assumes a conventional 5 V passive backpack. Check the module’s documentation if it is a newer 3.3 V product or a smart LCD.
Install a compatible library
LiquidCrystal_I2C is a library name used by multiple libraries. Their constructors, initialization functions, and backpack pin mappings may differ. Installing the first similarly named result in Library Manager can produce compilation errors or a backlight with no text.
The primary sketch below assumes the Enjoyneering LiquidCrystal_I2C library and an API that provides init(), backlight(), setCursor(), and print(). Install one library, not several competing folders with the same header name. If your installed library does not compile this example, open its bundled examples and use its documented initialization method.
Rank #2
- Easy to use. Less I/O ports are occupied, only four - VCC, GND, SDA (serial data line), SCL (serial clock line).
- Support IIC protocol. The I2C LCD1602 library is provided, so you can call it directly.
- With a potentiometer used to adjust backlight and contrast.
- Power supply: +5V; Address of the module: ox27
- Note: This item is suitable for 14 years and older.
Other legitimate choices include LiquidCrystal_PCF8574, which explicitly targets PCF8574 adapters, and the Arduino catalog’s other LiquidCrystal_I2C entries. Do not mix constructors from one library with examples from another.
Find the LCD’s I2C address
Many inexpensive PCF8574 backpacks use 0x27, and 0x3F is also common. Neither is universal. The controller and address-jumper settings determine the actual address.
Upload this scanner before running the LCD program:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C scanner");
byte devicesFound = 0;
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
byte error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
devicesFound++;
}
}
if (devicesFound == 0) {
Serial.println("No I2C devices found.");
} else {
Serial.println("Scan complete.");
}
}
void loop() {
}
- Keep the four wires connected.
- Upload the scanner with the correct Uno selected in the board menu.
- Open Tools → Serial Monitor.
- Set the monitor to 9600 baud.
- Record the address, such as
0x27,0x3F, or another hexadecimal value.
An output such as I2C device found at 0x27 means the Uno can see a device on the bus. The scanner does not prove that the LCD library or backpack pin mapping is correct; it only verifies that an I2C device responds.
If the scanner finds nothing, troubleshoot power, ground, SDA, SCL, pull-up resistors, and the module type before adjusting the LCD contrast.
Rank #3
- LCD 1602 screen: This module can display 2 lines of characters, with 16 characters per line
- I2C / IIC interface: Saves a lot of ports compared to parallel interface (This new model integrates the conversion circuit, making it more stable)
- Compatible models: Compatible with mainstream models of Arduino / Raspberry Pi / Raspberry Pi Pico / ESP32, provide example projects and code (Other controllers are also compatible but do not provide examples)
- Tutorial and code: Example projects for mainstream controllers (The tutorial link can be found on the product box, no paper tutorial)
- Get support: Our technical support team is always ready to answer your questions
Upload the LCD test sketch
Replace 0x27 below with the address reported by your scanner:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Replace 0x27 with the address reported by the I2C scanner.
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello, Arduino!");
lcd.setCursor(0, 1);
lcd.print("Four-wire I2C");
}
void loop() {
}
LiquidCrystal_I2C lcd(0x27, 16, 2) creates a 16-column, two-row display object. lcd.init() initializes the LCD, lcd.backlight() enables the backlight, setCursor(0, 0) selects the first column of the first row, and print() writes characters.
A working display should show Hello, Arduino! on row one and Four-wire I2C on row two. The backlight turning on is not enough to confirm success: the display must also be initialized and receiving characters.
Adjust the contrast
Most backpacks have a small blue screw-adjust potentiometer. With the circuit powered, turn it slowly using a small screwdriver until the characters become visible. Do not force the potentiometer against its mechanical stop.
A row of dark blocks, commonly visible on the first row, usually means the LCD has power and contrast but has not been initialized correctly. Check the I2C address, library, wiring, and backpack mapping. A completely blank screen can also simply have contrast set incorrectly.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallRank #4
- EASY I2C WIRING & SETUP: Simplify your projects with the I2C serial interface, requiring only four connections: VCC, GND, SDA, and SCL. This significantly reduces wiring complexity compared to parallel LCDs, making it ideal for both beginners and advanced users looking for a quick and clean setup.
- CRISP 16X2 CHARACTER DISPLAY: Features a clear display capable of showing 2 lines of 16 characters each, perfect for displaying sensor data, status messages, or user menus. The vibrant blue backlight ensures excellent readability in various lighting conditions.
- BROAD MICROCONTROLLER COMPATIBILITY: Engineered for versatility, this LCD module works seamlessly with a wide range of popular development boards. It is fully compatible with Arduino, Raspberry Pi, Tinkerboard, Nano pi, Banana pi, stm32, and other common microcontrollers.
- ADJUSTABLE BACKLIGHT AND CONTRAST: Easily fine-tune the display's readability using the built-in potentiometer on the rear of the module. This allows you to adjust the backlight brightness and character contrast to achieve the perfect viewing angle and clarity for your specific application.
- VERSATILE FOR DIY & STEM PROJECTS: An essential component for a variety of applications, including Internet of Things (IoT) devices, school electronics projects, smart building dashboards, and custom DIY maker projects. We provide comprehensive after-sales support: complete digital documentation including user guides and technical references is available through our store customer service, and our support team is ready to assist with installation, programming, and troubleshooting to help you get started quickly.
Troubleshoot the display systematically
No backlight
- Confirm
VCCis connected to the Uno’s5Vpin. - Confirm
GNDis connected toGND. - Check loose jumper wires and the backpack header solder joints.
- Verify that the module is a 5 V-compatible passive backpack rather than a different display product.
The scanner reports “No I2C devices found”
- Check that VCC and GND are not reversed.
- Check SDA →
A4/SDAand SCL →A5/SCL. - Try shorter or better-connected wires.
- Confirm the board is actually an Uno R3 or verify its board-specific I2C pins.
- Check whether the module has suitable I2C pull-up resistors.
- Confirm that the module is genuinely I2C and not a bare parallel LCD.
- Check for a damaged backpack or an unsuitable 3.3 V device.
The scanner finds an address, but there is no text
- Use the exact address reported by the scanner.
- Adjust the contrast potentiometer.
- Confirm that the installed library matches the sketch.
- Check whether the backpack uses a nonstandard expander-to-LCD pin mapping.
- Confirm the constructor says
16, 2. - Check the LCD header and backpack soldering.
A scanner response proves that something answers on I2C, not necessarily that the detected device is a PCF8574 LCD backpack. It could be another device or a backpack requiring a different library.
The display shows garbled or shifted characters
The most likely causes are an incompatible library mapping, an incorrect LCD size declaration, a poor header connection, unstable power, or a backpack designed for a different LCD layout. Try the backpack manufacturer’s example or a known-compatible library before changing unrelated code.
The display works intermittently
Inspect loose wires, long I2C connections, multiple sets of pull-up resistors, power quality, and voltage compatibility. Multiple I2C devices can share SDA and SCL, but their addresses must be unique. On systems with a stuck bus, the Wire documentation notes that newer versions support I2C timeouts, although they are not enabled by default in current versions.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Backpack addresses and multiple displays
Many generic backpacks expose address jumpers labeled A0, A1, and A2. Changing these jumpers changes the I2C address. This allows multiple displays to share the same SDA and SCL wires, provided every display has a unique address and the library supports multiple display objects.
Address ranges depend on the chip. For example, Adafruit’s MCP23008-based backpack supports selectable 7-bit addresses from 0x20 through 0x27; generic PCF8574 and PCF8574A boards may use different ranges. See the Adafruit backpack documentation. Use the scanner rather than converting the address to an 8-bit read/write value or copying an address from another tutorial.
Best Value
- EASY I2C WIRING & SETUP: Simplify your projects with the I2C serial interface, requiring only four connections: VCC, GND, SDA, and SCL. This significantly reduces wiring complexity compared to parallel LCDs, making it ideal for both beginners and advanced users looking for a quick and clean setup.
- CRISP 16X2 CHARACTER DISPLAY: Features a clear display capable of showing 2 lines of 16 characters each, perfect for displaying sensor data, status messages, or user menus. The vibrant blue backlight ensures excellent readability in various lighting conditions.
- BROAD MICROCONTROLLER COMPATIBILITY: Engineered for versatility, this LCD module works seamlessly with a wide range of popular development boards. It is fully compatible with Arduino, Raspberry Pi, Tinkerboard, Nano pi, Banana pi, stm32, and other common microcontrollers.
- ADJUSTABLE BACKLIGHT AND CONTRAST: Easily fine-tune the display's readability using the built-in potentiometer on the rear of the module. This allows you to adjust the backlight brightness and character contrast to achieve the perfect viewing angle and clarity for your specific application.
- VERSATILE FOR DIY & STEM PROJECTS: An essential component for a variety of applications, including Internet of Things (IoT) devices, school electronics projects, smart building dashboards, and custom DIY maker projects. We provide comprehensive after-sales support: complete digital documentation including user guides and technical references is available through our store customer service, and our support team is ready to assist with installation, programming, and troubleshooting to help you get started quickly.
Passive backpack versus smart LCD
A conventional passive backpack usually contains an I2C I/O expander such as a PCF8574 or MCP23008. The Arduino library translates LCD commands, and the module generally provides VCC, GND, SDA, SCL, and a contrast adjustment.
A smart LCD contains its own microcontroller and may support I2C, SPI, and serial commands. It can use a different address and protocol and may require 3.3 V logic. For example, SparkFun’s SerLCD uses its own command system, has a default I2C address of 0x72, and specifies 3.3 V I/O. It is not a drop-in replacement for a generic PCF8574 backpack sketch; a 5 V Uno requires appropriate level shifting.
Uno board variants
This guide is scoped to the classic 5 V Arduino Uno R3. Do not automatically apply its pinout or voltage assumptions to an Uno R4, Uno WiFi, Leonardo, Mega, Nano variant, or another microcontroller board. Check that board’s Wire documentation and electrical specifications before wiring the display. The official Uno R3 documentation lists its 5 V operating voltage and hardware specifications.
Recommended Free Tools
I2C backpack versus direct parallel wiring
Direct parallel wiring uses Arduino’s LiquidCrystal library and more control/data connections. It can make the signal path easier to inspect, but consumes substantially more GPIO pins.
An I2C backpack reduces the external connection to four wires, leaves most Uno pins available for other hardware, and lets compatible devices share the I2C bus. The trade-offs are an extra adapter, address management, library dependence, and possible variation in backpack pin mapping.
Quick Recap
Final checklist
- Use a standard 16×2 HD44780-compatible LCD with a compatible I2C backpack.
- Connect
VCC → 5VandGND → GND. - Connect
SDA → A4/SDAandSCL → A5/SCLon the classic Uno R3. - Scan the bus and use the reported 7-bit address.
- Install one clearly identified, compatible LCD library.
- Use the library’s matching constructor and initialization functions.
- Adjust the contrast potentiometer slowly.
- Remember that a glowing backlight does not prove that I2C communication works.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

