After I posted my Raspberry Pi server room rack temperature monitor project, I received many questions on how to integrate LCD displays with the Pi. This video is the first in a series of tutorials:
Here is the wiring that I used to connect the 16×2 display in 4 bit mode to the Pi. Please note that you can use any 6 GPIO pins.
The pin outs of LCD displays can vary as well as the power requirements for the back light so please check your datasheets.
Some LED back lights can be damaged by running them at 5 V without a resistor.
Here is the formula to determine the proper resistor: R = (Vdd – VLED) / ILED
R is the resistor value in ohms and Vdd is the supply voltage. VLED and ILED are the typical LED voltage and current respectively as specified in the LCD display datasheet. Even if you display supports 5 V you might want to add a resistor or variable resistor to control the brightness. The same holds true for the contrast pin. I normally use variable resistors for both (see below).
UPDATE: super-user privileges are no longer required for GPIO access with the latest version of Raspbian. Therefore, GKSU is unnecessary. Also Thonny is now the default Python editor instead of Idle.
Here is code to test the module:
You can use any GPIO pins for the LCD RS, E, & D1 – D4. The GPIO to LCD pin mappings are specified in the LCD.py file. If you change from the default below then you have to update the file with your new selections.
UPDATE: the Adafruit library is now installed using pip. It is no longer necessary to use git and the paths are automatically set up.
The Adafruit library has several additional methods. Please note that their syntax has changed since the video.
Here is some sample code (updated 4/23/16) to demonstrate the Adafruit library. As with the LCD.py module, you can use any GPIO pins. You specify the GPIO to LCD pin mappings when you instantiate the Adafruit_CharLCD class. Please note that super-user privileges are no longer required for GPIO access with the latest version of Raspbian
Contast & Brightness:
A potentiometer can be added to the LCD display C pin to control the contrast. The pin is connected to the wiper of the pot which is usually the middle pin. One of the outside pins is connected to ground and the other to Vcc. It doesn’t matter which outside pin goes to Vcc or ground because the pot is acting as a voltage divider either way. As the dial is turned the wiper’s pin voltage will vary from 0 to 5 V and this will cause the contrast to change. 10 KΩ is a good value for the pot. This same wiring will also work to control the LCD display brightness. Instead of of the contrast pin, the wiper would be connected to the LED back light anode. Most LCD display back lights will tolerate 5 V but please double check so you don’t damage the LED. You can alter the 0 – 5 V range by adding a resistor in series with one of the outside pins. This can help fine tune the amount of range provided by the pot. You can use a multimeter to measure the voltage on the wiper and determine how different resistors affect the range. Here is a simple schematic:
IP Clock Example:
The Adafruit IP clock example from the video is no longer compatible with the latest version of the Adafruit LCD_Char library. Here is an updated version of the IP clock program. Please note that sudo is no longer necessary to run the program with the latest version of Raspbian, but you still need the shebang line and chmod +x to give the file executable permissions, if you run it from the command line.
The Adafruit_Python_CharLCD library has been deprecated since this tutorial was released in 2014. Therefore, I’m including an example using the newer Adafruit_CircuitPython_CharLCD library which can run on both the Raspberry Pi and other CircuitPython compatible boards. I have several CircuitPython tutorials. The library can easily be installed using pip:
Here’s a sample program using the newer library:
Daisy Chain LCD Displays:
It is possible to connect multiple LCD displays to a Raspberry Pi. Normally I’d recommend using an I²C display as discussed in my Using an I²C LCD Display with a Raspberry Pi tutorial because the wiring is less complicated. However, LCD displays can be daisy chained in 4 bit mode. The second display is connected to the existing GPIO pins for RS and D1 – D4, but each display must have a unique GPIO pin for Enable.