I2C LCD extra IO

I2CLCDextraIO - Rev A - LCD mounting.
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.

LCDs are very common and a great way to have projects report back visually. However, they need 6, 7 or 10, 11 pins to control them plus an additional pin for the backlight. For some projects, it is not easy to find those additional pins. The LCD backpack (I2CLCDextraIO) is the board for such applications.

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. But what about using more than 1 LCD? This would almost be prohibitive for most projects with a single micro-controller. 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.

Buy one now
Boards are sold as bare PCB or fully assembled.

Library Downloads
Connecting it - User guide
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
I2C Address Base 
   0x38 or 0x20

Board Layout
I2CLCDextraIO - Rev A - Top
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
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
I2CLCDextraIO - Rev A - LCD control pinout
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 backpack Assembly.
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 or 0x20 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 or 0x20) 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 here).
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.

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.

I2CLCDextraIO - Rev A - Top Assembly
I2CLCDextraIO - Rev A - Bottom Assembly

Components and Part Numbers

C1, C2
R1, R2(*)
  5 pos - 2,54mm header
A0, A1, A2
  LCD I2C Interface  
  IO expansion
  16 pos - 2,54mm header
  PCF8574 or A
PCF8574 or A

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

Schematic and Design Files
Project wiki page.