This new Adafruit plate makes it easy to use a 16x2 Character LCD. We really like the range of LCDs we stock in the shop, such as our classic blue & white as well as the fancy RGB negative and RGB positive. Unfortunately, these LCDs do require quite a few digital pins, 6 to control the LCD and then perhaps another 3 to control the RGB backlight for a total of 9 pins. That's nearly all the GPIO available on a Raspberry Pi!
With this in mind, we wanted to make it easier for people to get these LCD into their projects so we devised a Pi plate that lets you control a 16x2 Character LCD, up to 3 backlight pins AND 5 keypad pins using only the two I2C pins on the Pi! The best part is you don't really lose those two pins either, since you can stick i2c-based sensors, RTCs, etc and have them share the I2C bus. This is a super slick way to add a display without all the wiring hassle.
WARNING: The new Raspberry Pi model B+ with 4 USB ports overlaps closely with backlight resistor leads on the char LCD plate. You will need to cover the USB port and back of resistors with electrical tape to protect them from touching. See more details and pictures on the assembly page of this guide.
This plate is perfect for when you want to build a stand-alone project with its own user interface. The 4 directional buttons plus select button allows basic control without having to attach a bulky computer. 

The kit is designed for any Raspberry Pi - version 1 and 2.

If you want plug in a Cobbler or Gertboard at the same time, check out our Stacking Header, you can fit an IDC cable over it if the Plate is assembled with this part.

Parts List

Check to make sure your kit comes with the following parts.Sometimes we make mistakes so double check everything and email [email protected] if you need replacements!

We recently adjusted the kit so the buttons are on the RIGHT side instead of the left. The parts list is otherwise the same, its just a little more stable than before

1) Resistors

There is a total of 3 resistors in this kit. For resistors labeled RED and BLUE on the PCB, they are 1/4W 5% 220 ohm resistors (Red, Red, Brown, Gold). For the resistor labeled GREEN on the PCB, it is a 1/4W 5% 330 ohm resistor (Orange Orange Brown Gold).

2) Potentiometer

There is one 10k trim potentiometer. This part will go in the spot labeled Contrast

3) Pushbuttons

There are a total of 5 x 6mm tactile switch pushbuttons. These will be used in the UP, DOWN, LEFT, RIGHT and SELECT locations on the PCB.

4) i2c Port Expander Chip

There is one of these MCP23017 i2c (16 input/output) port expander chips in the kit. This is how we are able to only use 2 R-Pi pins to run the entire LCD and buttons. Click here for more info on this chip.

5) Male Header Pins

There is one strip of 36 male header pins in the kit. These will be used to attach the LCD to the PCB.

6) Printed Circuit Board

There will be one PCB in the kit as shown above.

7) Raspberry Pi Plate Header

There will be one extra-tall 26 pin female header for plugging into the Pi

8) Bumper

There will be one rubber bumper as shown above


You'll  also need an LCD to place into the shield.

Your LCD may have 16 pins (Monochrome) or 18 pins (RGB) and may have 2 rows of connectors or one. This is normal and does not affect the display

You can also use 16x2 LCDs that are the same size that do not have an RGB backlight, or have no backlight at all.

We carry Negative type or Positive type LCDs as well as Blue and White LCDs


Check the kit against the parts list to verify you have all the parts necessary

We recently adjusted the kit so the buttons are on the right side instead of the left. The parts list is otherwise the same, its just a little more stable than before

Put the printed circuit board into a vise or board holder, heat up your soldering iron and make sure you're ready to go!

We'll start with the first resistor GREEN - which has orange, orange, brown, gold bands on it. This resistor acts as the backlight control resistor for the green backlight pin.

Bend the resistor into a 'staple' and slide it into the slot marked GREEN on the PCB. Resistors do not have a direction so you can put it in 'either way' and it'll work find.

Bend the 'legs' of the resistor out so it sits flat against the PCB and flip it over.

This way the resistor won't fall out while soldering.

With your soldering iron heated up and ready, solder in both leads of the resistor. To do this, heat up the round ring pad and the wire lead at the same time for 2 or 3 seconds, then dip the end of the solder into the heated joint to melt it in.

Then remove the solder and the soldering iron.

Once the soldering is complete, we can clean up by clipping the leads of the resistor. This keeps them from shorting to something else. Use diagonal or flush cutters to clip the wires right above where the solder joint ends.

Since you did so great with the first resistor, we'll place all of the rest now at the same time.

The two 220 ohm resistors RED and BLUE - named because they are the backlight series resistors for the RGB backlights on the LCDs. These resistors are colored Red Red Brown Gold.

Solder the resistors just like you did with the first one.
Clip all the leads.

Next up we will place the buttons. These buttons are useful to send a signal to the Pi (say if you have a basic menu system). We have a 4-way 'direction pad' for up/down/left/right input and a button to the right called SELECT. These 5 buttons should be able to make 'talking' back to your project easy. These are connected to the I2C port expander chip so they require no extra pins on the Pi, our library does the work of reading whether they are pressed.

All the buttons are the same, and they should snap nicely into place. Press down onto each button until it snaps in and sits flat against the PCB.

We recently adjusted the kit so the buttons are on the RIGHT side instead of the left. The buttons snap in the same but they're on the right

Flip over the PCB and check that all the legs for the buttons are sticking out.

Solder each leg, taking care not to accidentally 'short' two button legs together. The ones for the directional pads are very close!

Next, place the 10K potentiometer (the orange-faced thing with three legs) into the spot above the RESET button. It will only fit one way. This is the contrast potentiometer which will adjust how dark the characters appear. All displays are slightly different so you'll adjust this once the display is soldered in.

The kit may come with two potentiometers - a big blue one for breadboarding the LCD and a smaller orange one for the shield kit. You can throw away or recycle the blue one, use only the orange one here!

We recently adjusted the kit to have the potentiometer in the center rather than the right, goes in the same way, just in the middle!

Flip over the PCB and solder in the three legs of the potentiometer

We're nearly done! Now we will place the I2C port expander chip. Double check that it has the MCP23017-E/SP marking on it. This is a 16-pin expander chip, that uses the i2c bus. That means you can send it commands using the i2c pins on an Pi and control 16 more digital pins! 5 of those pins go to the buttons, 6 go to the LCD control and 3 are used for the backlight (the remaining 2 are unused).

Unlike buttons or resistors, chips do have a direction and the must be put in the right way! First, use a flat table to carefully bend the legs of the chip so they are parallel. Then slip it into the silkscreened outline so that the notch at the end of the chip is on the right. Click the image to the left to make absolutely sure you've got it in the right way. Once you are sure, press the chip into place

We recently adjusted the kit so the chip is more to the left, its the same alignment, just shifted over

Flip over the PCB and solder in the 28 pins of the port expander.
Next we will attach the header, there is a standard 'extra tall' header included in the kit. However, if you want to attach a cobbler or GertBoard, etc to the plate, you may want to opt for one of our stacking headers, they're extra long so you can plug in an IDC cable on top!
Before we solder in the header, remove the bumper from the backing and attach it on the underneath so its right over the Ethernet jack when the PCB is plugged in.

On kits where the buttons are on the left, put it right below the contrast pot, as shown. This will keep the pot from touching the Ethernet jack.

On kits where the buttons are on the right, put it right next to the buttons (it shouldnt overlap any button legs) sitting flat
Place the 2x13 header onto your Pi, and slide the plate on top, it should fit perfectly.

Now we will solder all 26 pins for the plate - this will send power and data between the two boards and also provide a mechanical stability. You may need to hold the plate down with tape to get it sitting flat against the Pi.

Solder in one pin, we suggest the top right, then check if the plate is sitting flat. If not, heat up the joint with one hand while stabilizing with the other until its right.

Then solder the other 25 pins

Finally, we place the LCD.
Break off a piece of 18 or 16 pin header from the stick in the kit.

If you have an RGB display, you'll need 18, for a blue&white you'll need 16

Place the header into the remaining slot with the long ends of the pins sticking UP. If you have only 16 pins, leave the two rightmost pads empty
Slide the LCD over the header so that it is perfectly centered over the four holes and the silkscreen.

Your LCD may have two rows of connectors or one row. If its a two-row-connector LCD we do not use the bottom row, just continue using the LCD as it will fit just fine!

The LCD should 'snap' in against the buttons

Solder all the pins!
Flip over the assembly, carefully. Then solder in the 16 or 18 pins of header
WARNING: If you're using the new Raspberry Pi model B+ with 4 USB ports you will need to take some extra steps to ensure the backlight resistor leads do not touch the USB ports and short out. See the steps below for more details.

Model B+ Protection

With the new Raspberry Pi model B+ and its extra USB ports there's a slight problem with the layout of the character LCD shield. As you can see in the photo below, the three through-hole backlight resistors have their leads right above one of the metal USB ports. Unfortunately these leads are quite close and can potentially short against the metal USB port.

There is current limiting in the resistor circuit so it shouldn't damage the Pi if there is a short, but to be sure it is advised to cover the USB port and resistor leads in a few layers of electrical tape. Be sure to cut the resistor leads as short as possible with flush cutters and try to ensure there are no sharp edges from the cut leads or solder. See the photo below with arrows pointing to the two locations you should place electrical tape.

Note that if you are using a Raspberry Pi model A or B (i.e. Pi with only 1 or 2 USB ports) you can skip this step and move on. You only need to add this tape if you're using a Raspberry Pi model B+, the Pi with 4 USB ports.
That's it! You're done soldering, now you just have to run the code in the Usage section next.


The backlights will not turn on until you have the code running so don't be alarmed if nothing lights up when you plug in the plate! If you have a 'positive' style LCD, you may see some squares on the first line, that's normal

Setting up your Pi for I2C

For a more basic introduction to setting up I2C on your Pi, take a diversion to this Adafruit tutorial:  http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c

It is required to install kernel I2C support before continuing!

You'll also want to run:

sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools
i2c-tools isn't strictly required, but it's a useful package since you can use it to scan for any I2C or SMBus devices connected to your board.  If you know something is connected, but you don't know it's 7-bit I2C address, this library has a great little tool to help you find it:
sudo i2cdetect -y 0 #(if you are using a version 1 Raspberry Pi)
sudo i2cdetect -y 1 #(if you are using a version 2 Raspberry Pi)

This will search /dev/i2c-0 or /dev/i2c-1 for all address, and if an Adafruit LCD Plate is connected, it should show up at 0x20

Once both of these packages have been installed, you have everything you need to get started accessing I2C and SMBus devices in Python.

Using the example Python code

The LCD Pi Plate Python code for Pi is available on Github at: https://github.com/adafruit/Adafruit_Python_CharLCD

The easiest way to get the code onto your Pi is to hook up an Ethernet cable, and clone it directly using git, which is installed by default on most distros. Simply run the following commands from an appropriate location (ex. /home/pi):

sudo apt-get update
sudo apt-get install -y build-essential python-dev python-smbus python-pip git
sudo pip install RPi.GPIO
git clone https://github.com/adafruit/Adafruit_Python_CharLCD.git
cd Adafruit_Python_CharLCD
sudo python setup.py install

Testing the Library

Once the code has be downloaded to an appropriate folder, and you have your LCD Plate properly connected, you can start with the basic demo display, which is run by simply executing the char_lcd_plate.py script in the examples folder:
cd examples
sudo python char_lcd_plate.py
The example will turn the backlight on to different RGB colors (don't worry if you're using a monochrome backlight LCD, it is normal to see the backlight turn on and off) and then ask you to press buttons. As you press different buttons the button name should be printed and the backlight color changed. Try pressing different buttons to see what happens on the display.

Press Ctrl-C to quit the program.

Adjusting Contrast

The plate uses a character LCD with an external contrast potentiometer. The first time you use it, adjust the potentiometer in the bottom right until you see the text clearly. If you don't upload code to the Pi, some boxes may appear instead, or you may see nothing at all.

Using the library code

Look at the contents of the char_lcd_plate.py file to see the basic usage of the character LCD plate class. The basic usage is to import the library and create an instance of the Adafruit_CharLCDPlate class. The char LCD plate class is smart enough to know how to talk to the character LCD plate without any configuration or parameters.

Once you have an instance of the Adafruit_CharLCDPlate class there are a few functions you can call to interact with the display:
  • message(text)
    • Print the provided string message to the display. The text string can include linebreak characters ('\n') and will move to the next line when found in the string.
  • clear()
    • Clear the display and reset the position of message printing to the first column and first line.
  • set_color(red, green, blue)
    • Set the color of the red, green, and blue backlight LEDs. Each color value should be a 1 for on or 0 for off. For example to set a red backlight call set_color(1,0,0) or to set a purple color call set_color(1,0,1).
You can find a more detailed write-up of the library in this character LCD guide (see the Usage and Raspberry Pi Char LCD Plate pages).


Check the Usage page for how to install the example python code directly from your Pi using git.

This guide was first published on Nov 21, 2012. It was last updated on Nov 15, 2018.