I'm trying to use multiple LCD devices with I2C single Raspberry Pi.

How can I connect multiple devices via I2C on same Raspberry Pi?

As I understand this is possible. Because this page says:

I2C can be used to connect up to 127 nodes via a bus that only requires two data wires, known as SDA and SCL.

This page explains simple using for one LCD via I2C: http://www.raspberrypi-spy.co.uk/2015/05/using-an-i2c-enabled-lcd-screen-with-the-raspberry-pi/

There is a forum page also discussed: http://forum.pimatic.org/topic/688/multiple-lcds-and-special-characters

This video is describing something related for that subject: https://www.youtube.com/watch?v=ojBlRkQ1WKs

I searched too much. I couldn't find a solution...

  • 2
    Are these three identical LCDs? by default they will normally all have the same I2C address. To change the address you usually need to solder a jumper between two pads, or connect a pin to ground or high. An example from can be seen on this page learn.adafruit.com/i2c-spi-lcd-backpack/connect-to-i2c This will allow you to assign them three differnt addresses and communicate to each individually. Without knowing more details about the LCD and I2C board we will not be able to help further. Dec 20, 2015 at 2:03
  • 1
    Could you add a link to the I2C LCDs you want to use?
    – joan
    Dec 20, 2015 at 9:00
  • @joan is.gd/bbpb41
    – Nuri Akman
    Dec 21, 2015 at 19:09

2 Answers 2


Take a look at the integrated circuit on the backpack PWB for my LCD panel - for Philips (now NXP) there are two 8pin-IO devices that are typically used (PCF)8574 and (PCF)8574A (Red outline in photo) and they can each have one of eight different address assignments depending on the settings of three address lines A0-A2 (Yellow outline in photo), on mine there are pull-up resistors (to the 5V supply) and a pair of pads that can be linked together with a blob of solder to short the address line to 0V (Ground) so that the IC takes a different address. Photo of my LCD I2C Backpack PWB

From the Datasheet for both devices (section "7.1 - Addressing" on page 9) we can see that - as a "solder-blob" forces a "L" and an open pad is allowed to be pulled up "H":

 A0 | A1 | A2 | 8574 | 8574A
  L |  L |  L | 0x20 | 0x38
  L |  L |  H | 0x21 | 0x39
  L |  H |  L | 0x22 | 0x3A
  L |  H |  H | 0x23 | 0x3B
  H |  L |  L | 0x24 | 0x3C
  H |  L |  H | 0x25 | 0x3D
  H |  H |  L | 0x26 | 0x3E
  H |  H |  H | 0x27 | 0x3F
So mine (being a "8754A" and having all pads open or "H") will have an address of 0x3F - and two of yours will need to have their address changed from the default case.

  • If yours are the same sort of thing as mine, be advised that you may have to fiddle with some of the sample code examples out there - they typically do not consider control of the backlight which is allocated the spare line (the LCD interface needs 4 data lines, and two {STROBE, DATA/CMD} {or three if READ/WRITE control is wanted to READ from the device} control lines) and needs to be kept high or low whilst the rest of the lines are bit-banged to transfer each 4-bit nibble to (or from) the LCD module...
    – SlySven
    Dec 20, 2015 at 15:17

This page talks about just wiring the devices in series. Since each I2C device has it's own address the RPi should be able to tell them apart and send information accordingly.

  • Assuming that they are three identical I2C backpacks (which seems reasonable in this case) they won't have distinct addresses, but they will all have the same address. Dec 20, 2015 at 2:08
  • @SteveRobillard good call, didn't think about that. Dec 20, 2015 at 2:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.