A Raspberry Pi LCD library for the widely used Hitachi HD44780 controller.
Project description
A Python 2/3 Raspberry PI Character LCD library for the Hitachi HD44780 controller.
Tested with the 20x4 LCD that is sold for example by adafruit.com or mikroshop.ch.
Also tested with a 16x2 LCD from mikroshop.ch.
This library is inspired by Adafruit Industries’ CharLCD library as well as by Arduino’s LiquidCrystal library.
No external dependencies (except the RPi.GPIO library, which comes preinstalled on Raspbian) are needed to use this library.
Features
Implemented
Simple to use API
Support for both 4 bit and 8 bit modes
Python 2/3 compatible
Caching: Only write characters if they changed
No external dependencies
Wishlist
These things may get implemented in the future, depending on my free time and motivation:
I²C support
Functions for creating custom characters
Examples
Writing To Display
Basic text output with multiline control.
>>> from RPLCD import CharLCD
>>> lcd = CharLCD()
>>> lcd.write_string(u'Raspberry Pi HD44780')
>>> lcd.cursor_pos = (2, 0)
>>> lcd.write_string(u'http://github.com/\n\rdbrgn/RPLCD')
Context Managers
Unlike other uses of context managers, these implementations prepare the configuration before writing to the display, but don’t reset it after the block ends.
>>> from RPLCD import CharLCD, cleared, cursor
>>> lcd = CharLCD()
>>>
>>> with cleared(lcd):
>>> lcd.write_string(u'LCD is cleared.')
>>>
>>> with cursor(lcd, 2, 0):
>>> lcd.write_string(u'This is he 3rd line.')
Scrolling Text
I wrote a blogpost on how to implement scrolling text: https://blog.dbrgn.ch/2014/4/20/scrolling-text-with-rplcd/
To see the result, go to https://www.youtube.com/watch?v=49RkQeiVTGU.
Installing
From PyPI
You can install RPLCD directly from PyPI using pip:
$ sudo pip install RPLCD
Manual Installation
You can also install the library manually without pip. Either just copy the scripts to your working directory and import them, or download the repository and run python setup.py install to install it into your Python package directory.
Wiring
The standard wiring configuration uses the following pins (BOARD numbering scheme rev 2):
RS: 15
RW: 18
E: 16
Data 4-7: 21, 22, 23, 24
API
Init, Setup, Teardown
import RPi.GPIO as GPIO
from RPLCD import CharLCD
# Initialize display. All values have default values and are therefore
# optional.
lcd = CharLCD(pin_rs=15, pin_rw=18, pin_e=16, pins_data=[21, 22, 23, 24],
numbering_mode=GPIO.BOARD,
cols=20, rows=4, dotsize=8)
...
# If desired, reset the GPIO configuration and optionally clear the screen.
# Note that this can lead to undesired effects on the LCD, because the GPIO
# pins are not configured as input or output anymore.
lcd.close(clear=True)
Properties
display_enabled -> True / False
cursor_pos -> (row, col)
text_align_mode -> Alignment.left / Alignment.right
write_shift_mode -> ShiftMode.cursor / ShiftMode.display
cursor_mode -> CursorMode.hide / CursorMode.line / CursorMode.blink
High Level Functions
write_string(value): Write the specified unicode string to the display. You can use newline (\n) and carriage return (\r) characters to control line breaks.
clear(): Overwrite display with blank characters and reset cursor position.
home(): Set cursor to initial position and reset any shifting.
shift_display(amount): Shift the display. Use negative amounts to shift left and positive amounts to shift right.
Mid Level Functions
command(value): Send a raw command to the LCD.
write(value): Write a raw byte to the LCD.
Context Managers
cursor(lcd, row, col): Control the cursor position before entering the block.
cleared(lcd): Clear the display before entering the block.
Writing Special Characters
You might find that some characters like umlauts aren’t written correctly to the display. This is because the LCDs usually don’t use ASCII, ISO-8859-1 or any other standard encoding.
There is a script in this project though that writes the entire character map between 0 and 255 to the display. Simply run it as root (so you have permissions to access /dev/mem) and pass it the number of rows and cols in your LCD:
$ sudo python show_charmap.py 2 16
Confirm each page with the enter key. Try to find the position of your desired character using the console output. On my display for example, the “ü” character is at position 129 (in contrast to ISO-8859-1 or UTF-8, which use 252).
Now you can simply create a unicode character from the bit value and write it to the LCD. On Python 2:
>>> u'Z%srich is a city in Switzerland.' % unichr(129)
u'Z\x81rich is a city in Switzerland.'
And on Python 3, where strings are unicode by default:
>>> 'Z%srich is a city in Switzerland.' % chr(129)
'Z\x81rich is a city in Switzerland.'
In case you need a character that is not included in the default device character map, there is a possibility to create custom characters and write them into the HD44780 CGRAM. Unfortunately, this is not supported in RPLCD with high level functions yet. But you can always use the write() and command() methods to write raw commands to the LCD. Please refer to the datasheet for more information on the character creation commands.
Testing
To test your 20x4 display, please run the test_20x4.py script and confirm/verify each step with the enter key. If you don’t use the standard wiring, make sure to add your pin numbers to the CharLCD constructor in test_20x4.py.
To test a 16x2 display, procede as explained above, but use the test_16x2.py script instead.
Resources
TC2004A-01 Data Sheet: http://www.adafruit.com/datasheets/TC2004A-01.pdf
HD44780U Data Sheet: http://www.adafruit.com/datasheets/HD44780.pdf
License
This code is licensed under the MIT license, see the LICENSE file or tldrlegal for more information.
The module RPLCD/enum.py is (c) 2004-2013 by Barry Warsaw. It was distributed as part of the flufl.enum package under the LGPL License version 3 or later.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file RPLCD-0.2.0.tar.gz
.
File metadata
- Download URL: RPLCD-0.2.0.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d591e442da11e97663aca64d5b18491de3d50357223187f0f6a62b747e1d62b |
|
MD5 | 3dd7cf5df6c7f1bbeb497e8c7a0ca756 |
|
BLAKE2b-256 | 84c1afd35654ee967bfec7f4e7076b39b68756ab01dbccef04219206872a9869 |
File details
Details for the file RPLCD-0.2.0-py2.py3-none-any.whl
.
File metadata
- Download URL: RPLCD-0.2.0-py2.py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8039fa676eb624ea36b2fab8c9f0b87882046cbcfd0bcdaa16b80c9c40520e98 |
|
MD5 | 6f0a6f3a811e19f715730cb686e1230a |
|
BLAKE2b-256 | 3a6918f07ab19ad9b01fc8e337dfacf57b58a77046f0aace4b20a92a1657876e |