A character LCD is useful for displaying sensor readings, status messages, and other information in Arduino projects. However, a conventional LCD can use several Arduino I/O pins, which can become a problem when the project also needs sensors or other modules.
An I2C LCD solves this wiring issue by using the I2C interface. Instead of connecting multiple LCD control and data lines directly to the Arduino, the I2C adapter communicates through just SDA and SCL, while VCC and GND provide power.
In this project, an Arduino UNO R3 is connected to a 16×2 I2C LCD. The display can then be used to show text, numbers, and custom characters.
How It WorksThe LCD module normally uses an HD44780-based character display along with an I2C adapter. A common adapter uses the PCF8574 8-bit I/O expander to convert I2C data from the Arduino into the parallel signals required by the LCD.
For the Arduino UNO, the connections are:
- VCC → 5V
- GND → GND
- SDA → A
- SCL → A5
The UNO R3 also provides dedicated SDA and SCL header pins, which are connected to the same I2C lines as A4 and A5.
The adapter generally includes a small potentiometer for adjusting LCD contrast and a jumper for controlling the backlight.
I2C AddressThe LCD's I2C address needs to match the address used in the Arduino program. With a PCF8574-based adapter, the address can be changed using the A0, A1, and A2 address jumpers.
A commonly used default configuration is 0x27 when the address jumpers are left open. Depending on the jumper configuration, the address can range from 0x20 to 0x27.
If the display does not respond, checking the actual I2C address with an I2C scanner is a useful first troubleshooting step.
SoftwareThe project can be developed using the Arduino IDE and the LiquidCrystal_I2C library by Frank de Brabander (V1.1.2).
Once the correct I2C address is configured, the library provides functions for initializing the LCD, positioning the cursor, printing text and numbers, controlling the backlight, and creating custom characters.
What You Can Build With ItThis setup is useful as a simple display interface for Arduino projects. For example, the LCD can be used to show:
- Sensor measurements
- Temperature or humidity readings
- Device status
- Menu selection
- Counters and numerical values
- Custom symbols or characters
The same I2C bus can also be shared with other compatible I2C peripherals, making the interface convenient for projects where Arduino pins are limited.
More DetailsFor complete source code checkout guide on Play with Circuit. The complete guide also covers custom characters, animations, library functions, and troubleshooting.





Comments