Clone wiki

I2C LCD extra IO / Home

I2C LCD extra IO


The I2CLCDextraIO is an I2C expansion board that when used as a LCD backpack it allows you to reduce the number of pins to control them. The I2C LCD extra IO has been developed with the character LCDs in mind reducing the pin count and enabling chaining up to 8 LCD on the same I2C bus. I2CLCDextraIO board

By freeing up to 9 pins when connecting a LCD it is possible to use them on almost any pin constraint application. The I2C expander module allows you to free up pins (only 2 are required) to control LCDs. With this module you can connect up to 8 in the same I2C bus by simply reconfiguring the programming jumpers.

For Arduino users we have created a library that is backward compatible with your current sketches. Please refer to the usage Section - SW Libraries.

Additionally, for projects requiring additional IO pins, the I2CLCDextraIO can be used as an IO expander. As before, their can be up to 8 connected to the I2C bus.

A library is also available (well, is also in the LCD library) to control each individual IO from the board.

User Guide


Voltage Range                 2.5V to 6V
Number of IO                  8 quasi-bidirectional
Drive / Sink capability       100mA between all IOs
Maximum single pin current    25mA
I2C Address Base              0x38

Board Layout

The I2CLCDextraIO is a very simple expansion board to use. The board layout is ideal to use as an LCD backpack and has a very convenient potentiometer to control its contrast, even while the full assembly (LCD and expander board) is fitted into the final project.

I2CLCDextraIO - Rev A - Bottom I2CLCDextraIO - Rev A - Bottom

Each individual OI pin can be used independently using the I2CIO Library with simple digitalWrite functions like the rest of the sketches.

Input Output

LCD use mode

The 16 pin header can directly interface with any standard LCD, ranging from 8x1 to 40x4 (all supported by the library and I2CLCDextraIO).

For LCD usage, a very convenient potentiometer is connected to control the contrast of the LCD and is accessible even when the LCD and I2CLCDextraIO are assembled on a PCB.

I2CLCDextraIO - Rev A - LCD control pinout

The only thing required is that the LCD has a standard pin out (16-pin single line connection header at the top). The board also breaks out a pin to be enable LCD backlight control (BL) independently.

The I2C control lines (SDA and SCL) are convenient 2.54mm headers that can be inserted into a standard breadboard for prototyping, fitting terminal blocks or simply solder it directly onto a PCB.

IO expansion use mode

When used stand alone, the board breaks out all the IO lines of the board to the 16 pin header connector, though only 8 are used.

I2CLCDextraIO - Rev A - IO pinout

All pins from the board can be used as quasi-bidirectional IOs and are labeled on the PCB for convenient wiring to projects.


The I2C address of each board is 0x38 as shipped (address jumpers all 0). This address can be changed by removing the solder jumper of the I2C board address and reprogram its new address.

I2CLCDextraIO - Rev A - I2C Addressing

The new address of the board is calculated by summing the base address (0x38) to the binary representation of the Address jumpers. Should you wish to connect multiple LCDs to the same I2C bus, each I2CLCDextraIO board must be configured to have a different I2C address.

SW Libraries

If you are using Arduino, we have created an open source library that is backward compatible with the standard LiquidCrystal library supplied as standard with the IDE.

Furthermore, it is a complete LCD control library that can replace the current LiquidCrystal library and be a one stop LCD library for all your projects. In I2C mode, the library is sufficiently performant to allow for animations and as a whole it uses almost 600 bytes less than the original LiquidCrystal which will be available for your sketches. With this library in place, your current projects should just work as the already do.

If you are migrating your sketch from a 4 bit parallel interface to an I2C interface you will only need to change an include file and the name of the object (variable) to what your display uses. The rest will remain the same.

The LCD library supports the following LCD control interfaces all in one package:

  • 4 bit parallel LCD control
  • 8 bit parallel control
  • I2C control (using the I2CLCDextraIO)
  • Shift Register control (project home link). The library is freely available, in the project wiki you will find all the details you need to successfully instal it and use it.

Sources and documentation are available here - LCD Library.

A library to control the I2CLCDextraIO board with out the LCD (as an IO expander) is also available as open source (well, is the same module the LCD library uses) allowing you to control each individual IO from the board individually.

Sources and documentation available for download here - I2CIO Library.


Schematic available in the download section.

I2CLCDextraIO - Rev A - Top Assembly

I2CLCDextraIO - Rev A - Bottom Assembly

Components and Part Numbers

Qty    Value              Device            Parts         Reference
2      0.1uF              CAP0805           C1, C2        80-C0805C104M5RACTM
2      1K                 RESISTOR0805      R1, R2(*)     ERJ-6GEYJ102V
1      Header             M05PTH            IF            5 pos - 2,54mm header
3      JUMPER             JUMPER-3-OLDSMD   A0, A1, A2    ---
1      LCD I2C Interface  BOARD_INFOL+      REV_A.2       IO expansion
1      LCD-16X2NOHOLES    LCD-16X2NOHOLES   U1            16 pos - 2,54mm header
1      PCF8574A           PCF8574A          IC1           PCF8574APWR
1      10K                TRIMPOT10K_BOURNS VR1           TC33X-2-103E

(*)R2 - can also be 470 (or something lower) to get more LCD backlight brightness.

Schematic and Design Files

Please visit the download section.

Buy one now

If you don't want to build one you can always order one from here:


Boards are sold as bare PCB or fully assembled.

Library Downloads

LCD Library

I2CIO Library


Lets keep this part short. I2C LCD extra IO by F. Malpartida is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.