Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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
Hosyond 3pcs I2C IIC 1602 LCD Display Module 16x02 LCD Screen Module for Arduino Raspberry Pi
  • 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, and SCL
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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
SunFounder IIC/I2C/TWI LCD1602 Display Module Compatible with Arduino and Raspberry Pi
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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() {
}
  1. Keep the four wires connected.
  2. Upload the scanner with the correct Uno selected in the board menu.
  3. Open Tools → Serial Monitor.
  4. Set the monitor to 9600 baud.
  5. 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
Freenove I2C IIC LCD 1602 Display Serial 16x2 Screen New Type (2 Pack)
  • 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:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
hiBCTR 10-Pack I2C LCD1602 Display Module 16x2, Blue Backlight
  • 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 VCC is connected to the Uno’s 5V pin.
  • Confirm GND is connected to GND.
  • 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/SDA and 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

  1. Use the exact address reported by the scanner.
  2. Adjust the contrast potentiometer.
  3. Confirm that the installed library matches the sketch.
  4. Check whether the backpack uses a nonstandard expander-to-LCD pin mapping.
  5. Confirm the constructor says 16, 2.
  6. 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.Support on Ko-Fi

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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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
hiBCTR 5-Pack I2C LCD1602 Display Module 16x2, Blue Backlight
  • 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.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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

Bestseller No. 2
SunFounder IIC/I2C/TWI LCD1602 Display Module Compatible with Arduino and Raspberry Pi
SunFounder IIC/I2C/TWI LCD1602 Display Module Compatible with Arduino and Raspberry Pi
Support IIC protocol. The I2C LCD1602 library is provided, so you can call it directly.; With a potentiometer used to adjust backlight and contrast.
$9.99
Bestseller No. 3
Freenove I2C IIC LCD 1602 Display Serial 16x2 Screen New Type (2 Pack)
Freenove I2C IIC LCD 1602 Display Serial 16x2 Screen New Type (2 Pack)
Get support: Our technical support team is always ready to answer your questions
$11.95

Final checklist

  • Use a standard 16×2 HD44780-compatible LCD with a compatible I2C backpack.
  • Connect VCC → 5V and GND → GND.
  • Connect SDA → A4/SDA and SCL → A5/SCL on 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.