gfxlcd is a handler for graphical lcds: ILI9328, SSD1306, NJU6450, touch panel: AD7843 @ Raspberry Pi.
Project description
What it is
===
Library for graphical LCDs for Python on Raspberry Pi. Creates a united interface for supported devices
Supported:
- ili9486 via SPI
- ili9325 via GPIO
- ssd1306 via SPI
- nju6450 via GPIO
And for touch panels:
- ad7843 via SPI, uses irq or not
- ad7846/xpt2046
Bonus
- HD44780 emulation (works with CharLCD)
On NJU and SSD uses buffer to keep current content as help for page operations.
Wiring is below
Demos are in demos directory
LCD initialization
===
## SSD1306
### SPI
from driver.ssd1306.spi import SPI
from driver.ssd1306.ssd1306 import SSD1306
drv = SPI()
o = SSD1306(128, 64, drv)
o.init()
If you want to set your own pins:
drv = SPI()
drv.pins = {
'RST': 13,
'DC': 6,
}
o = SSD1306(128, 64, drv)
o.init()
## NJU6450
### GPIO
from gfxlcd.driver.nju6450.gpio import GPIO
from gfxlcd.driver.nju6450.nju6450 import NJU6450
drv = GPIO()
o = NJU6450(122, 32, drv)
o.init()
Custom wiring:
from gfxlcd.driver.nju6450.gpio import GPIO
from gfxlcd.driver.nju6450.nju6450 import NJU6450
drv = GPIO()
drv.pins = {
'A0': 17,
'E1': 22,
'E2': 21,
'D0': 23,
'D1': 24,
'D2': 25,
'D3': 12,
'D4': 16,
'D5': 20,
'D6': 26,
'D7': 19,
'RST': 5,
}
o = NJU6450(122, 32, drv)
o.init()
## ILI9325
### GPIO
from gfxlcd.driver.ili9325.gpio import GPIO
from gfxlcd.driver.ili9325.ili9325 import ILI9325
drv = GPIO()
o = ILI9325(240, 320, drv)
o.init()
Custom pins:
from gfxlcd.driver.ili9325.gpio import GPIO
from gfxlcd.driver.ili9325.ili9325 import ILI9325
drv = GPIO()
drv.pins = {
'RS': 27,
'W': 17,
'DB8': 22,
'DB9': 23,
'DB10': 24,
'DB11': 5,
'DB12': 12,
'DB13': 16,
'DB14': 20,
'DB15': 21,
'RST': 25,
'LED': None,
'CS': None
}
o = ILI9325(240, 320, drv)
o.init()
## ILI9486
### SPI
from gfxlcd.driver.ili9486.spi import SPI
from gfxlcd.driver.ili9486.ili9486 import ILI9486
drv = SPI()
o = ILI9486(320, 480, drv)
o.rotation = 270
o.init()
Drawing functions
===
draw_pixel(x, y)
draw_line(from_x, from_y, to_x, to_y)
draw_rect(x1, y1, x2, y2)
draw_circle(x1, y1, radius)
draw_arc(x1, y1, radius, from_angle, to_angle
fill_rect(x1, y1, x2, y2)
draw_image(x, y, PIL.Image)
draw_text(x, y, text)
Colours
===
lcd.color = (r, g, b)
lcd.background_color = (r, g ,b)
lcd.threshold = 255 - for images a threshold between black and white (on monochrome)
lcd.transparency_color = [110, 57] #110 - color(s) that are skipped during drawing an image
Fonts
===
Font class implements Font abstract and is a class that has a dictionary with each char:
(..)
[0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], # U+0047 (G)
(..)
There is one font for now, 8x8 and named **Font8x8** and is used by default.
Touch panels
===
## AD7843
Constructor:
AD7843(width, height, (int_pin), (callback), (cs_pin))
Can be used with int_pin and cs_pin
def callback(position):
print('(x,y)', position)
touch = AD7843(240, 320, 26, callback, 17)
touch.init()
or without:
touch = AD7843(240, 320)
touch.init()
while True:
try:
time.sleep(0.05)
ret = touch.get_position()
if ret:
print(ret[0], ret[1])
except KeyboardInterrupt:
touch.close()
There is no automatic calibration. It must be done manually.
self.correction = {
'x': 364,
'y': 430,
'ratio_x': 14.35,
'ratio_y': 10.59
}
Wiring
===
## SSD1306
### SPI
SPI wiring + 2 additional pins. Defaults:
LCD Raspberry Pi
GND ----------- GND
+3.3V ----------- +3.3V
SCL ----------- G11
SDA ----------- G10
RST ----------- G13
D/C ----------- G6
## NJU6450
### GPIO
Default wiring:
LCD Raspberry Pi
1 (Vss) ------- GND
2 (Vdd) ------- +5V
3 (V0) ---[-\-] 10k
\--- GND
4 (A0) ---------------------- G17
5 (E1) ---------------------- G22
6 (E2) ---------------------- G21
7 (R/W) ------- GND
8 (D0) ---------------------- G23
9 (D1) ---------------------- G24
10 (D2) ---------------------- G25
11 (D3) ---------------------- G12
12 (D4) ---------------------- G16
13 (D5) ---------------------- G20
14 (D6) ---------------------- G26
15 (D7) ---------------------- G19
16 (RST) ------- +5V
17 (A) ------- +5V
18 (K) ------- GND
## ILI9325
### GPIO
Default:
TFT Raspberry Pi 2B
GND ------------------------ GND
Vcc ------------------------ 3.3
RS ------------------------ G27 (data[H]/cmd[L])
WR ------------------------ G17
RD ------------------------ 3.3 (never read from screen)
DB8 ------------------------ G22
DB9 ------------------------ G23
DB10 ------------------------ G24
DB11 ------------------------ G5
DB12 ------------------------ G12
DB13 ------------------------ G16
DB14 ------------------------ G20
DB15 ------------------------ G21
CS ------------------------ GND (always selected) (or connect to GPIO pin)
REST ------------------------ G25
LED_A ------------------------ 3.3 (can be connected to GPIO pin)
## ILI9486 (Waveshare)
### SPI
Default:
RPi Shield
G17 ----------------- TP_IRQ
G24 ----------------- RS
G25 ----------------- RST
G9 ----------------- LCD_CS
G7 ----------------- TP_CS
HD44780 emulation
===
This driver can work with CharLCD and emulate char LCD
ili_drv = ILIGPIO()
ili_drv.pins['LED'] = 6
ili_drv.pins['CS'] = 18
lcd = ILI9325(240, 320, ili_drv)
lcd.auto_flush = False
lcd.rotation = 0
drv = HD44780(lcd)
lcd = CharLCD(drv.width, drv.height, drv, 0, 0)
lcd.init()
lcd.write('-!Second blarg!')
lcd.write("-second line", 0, 1)
lcd.flush()
===
Library for graphical LCDs for Python on Raspberry Pi. Creates a united interface for supported devices
Supported:
- ili9486 via SPI
- ili9325 via GPIO
- ssd1306 via SPI
- nju6450 via GPIO
And for touch panels:
- ad7843 via SPI, uses irq or not
- ad7846/xpt2046
Bonus
- HD44780 emulation (works with CharLCD)
On NJU and SSD uses buffer to keep current content as help for page operations.
Wiring is below
Demos are in demos directory
LCD initialization
===
## SSD1306
### SPI
from driver.ssd1306.spi import SPI
from driver.ssd1306.ssd1306 import SSD1306
drv = SPI()
o = SSD1306(128, 64, drv)
o.init()
If you want to set your own pins:
drv = SPI()
drv.pins = {
'RST': 13,
'DC': 6,
}
o = SSD1306(128, 64, drv)
o.init()
## NJU6450
### GPIO
from gfxlcd.driver.nju6450.gpio import GPIO
from gfxlcd.driver.nju6450.nju6450 import NJU6450
drv = GPIO()
o = NJU6450(122, 32, drv)
o.init()
Custom wiring:
from gfxlcd.driver.nju6450.gpio import GPIO
from gfxlcd.driver.nju6450.nju6450 import NJU6450
drv = GPIO()
drv.pins = {
'A0': 17,
'E1': 22,
'E2': 21,
'D0': 23,
'D1': 24,
'D2': 25,
'D3': 12,
'D4': 16,
'D5': 20,
'D6': 26,
'D7': 19,
'RST': 5,
}
o = NJU6450(122, 32, drv)
o.init()
## ILI9325
### GPIO
from gfxlcd.driver.ili9325.gpio import GPIO
from gfxlcd.driver.ili9325.ili9325 import ILI9325
drv = GPIO()
o = ILI9325(240, 320, drv)
o.init()
Custom pins:
from gfxlcd.driver.ili9325.gpio import GPIO
from gfxlcd.driver.ili9325.ili9325 import ILI9325
drv = GPIO()
drv.pins = {
'RS': 27,
'W': 17,
'DB8': 22,
'DB9': 23,
'DB10': 24,
'DB11': 5,
'DB12': 12,
'DB13': 16,
'DB14': 20,
'DB15': 21,
'RST': 25,
'LED': None,
'CS': None
}
o = ILI9325(240, 320, drv)
o.init()
## ILI9486
### SPI
from gfxlcd.driver.ili9486.spi import SPI
from gfxlcd.driver.ili9486.ili9486 import ILI9486
drv = SPI()
o = ILI9486(320, 480, drv)
o.rotation = 270
o.init()
Drawing functions
===
draw_pixel(x, y)
draw_line(from_x, from_y, to_x, to_y)
draw_rect(x1, y1, x2, y2)
draw_circle(x1, y1, radius)
draw_arc(x1, y1, radius, from_angle, to_angle
fill_rect(x1, y1, x2, y2)
draw_image(x, y, PIL.Image)
draw_text(x, y, text)
Colours
===
lcd.color = (r, g, b)
lcd.background_color = (r, g ,b)
lcd.threshold = 255 - for images a threshold between black and white (on monochrome)
lcd.transparency_color = [110, 57] #110 - color(s) that are skipped during drawing an image
Fonts
===
Font class implements Font abstract and is a class that has a dictionary with each char:
(..)
[0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], # U+0047 (G)
(..)
There is one font for now, 8x8 and named **Font8x8** and is used by default.
Touch panels
===
## AD7843
Constructor:
AD7843(width, height, (int_pin), (callback), (cs_pin))
Can be used with int_pin and cs_pin
def callback(position):
print('(x,y)', position)
touch = AD7843(240, 320, 26, callback, 17)
touch.init()
or without:
touch = AD7843(240, 320)
touch.init()
while True:
try:
time.sleep(0.05)
ret = touch.get_position()
if ret:
print(ret[0], ret[1])
except KeyboardInterrupt:
touch.close()
There is no automatic calibration. It must be done manually.
self.correction = {
'x': 364,
'y': 430,
'ratio_x': 14.35,
'ratio_y': 10.59
}
Wiring
===
## SSD1306
### SPI
SPI wiring + 2 additional pins. Defaults:
LCD Raspberry Pi
GND ----------- GND
+3.3V ----------- +3.3V
SCL ----------- G11
SDA ----------- G10
RST ----------- G13
D/C ----------- G6
## NJU6450
### GPIO
Default wiring:
LCD Raspberry Pi
1 (Vss) ------- GND
2 (Vdd) ------- +5V
3 (V0) ---[-\-] 10k
\--- GND
4 (A0) ---------------------- G17
5 (E1) ---------------------- G22
6 (E2) ---------------------- G21
7 (R/W) ------- GND
8 (D0) ---------------------- G23
9 (D1) ---------------------- G24
10 (D2) ---------------------- G25
11 (D3) ---------------------- G12
12 (D4) ---------------------- G16
13 (D5) ---------------------- G20
14 (D6) ---------------------- G26
15 (D7) ---------------------- G19
16 (RST) ------- +5V
17 (A) ------- +5V
18 (K) ------- GND
## ILI9325
### GPIO
Default:
TFT Raspberry Pi 2B
GND ------------------------ GND
Vcc ------------------------ 3.3
RS ------------------------ G27 (data[H]/cmd[L])
WR ------------------------ G17
RD ------------------------ 3.3 (never read from screen)
DB8 ------------------------ G22
DB9 ------------------------ G23
DB10 ------------------------ G24
DB11 ------------------------ G5
DB12 ------------------------ G12
DB13 ------------------------ G16
DB14 ------------------------ G20
DB15 ------------------------ G21
CS ------------------------ GND (always selected) (or connect to GPIO pin)
REST ------------------------ G25
LED_A ------------------------ 3.3 (can be connected to GPIO pin)
## ILI9486 (Waveshare)
### SPI
Default:
RPi Shield
G17 ----------------- TP_IRQ
G24 ----------------- RS
G25 ----------------- RST
G9 ----------------- LCD_CS
G7 ----------------- TP_CS
HD44780 emulation
===
This driver can work with CharLCD and emulate char LCD
ili_drv = ILIGPIO()
ili_drv.pins['LED'] = 6
ili_drv.pins['CS'] = 18
lcd = ILI9325(240, 320, ili_drv)
lcd.auto_flush = False
lcd.rotation = 0
drv = HD44780(lcd)
lcd = CharLCD(drv.width, drv.height, drv, 0, 0)
lcd.init()
lcd.write('-!Second blarg!')
lcd.write("-second line", 0, 1)
lcd.flush()
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
gfxlcd-0.8.3.tar.gz
(17.9 kB
view details)
Built Distribution
gfxlcd-0.8.3-py3-none-any.whl
(30.2 kB
view details)
File details
Details for the file gfxlcd-0.8.3.tar.gz
.
File metadata
- Download URL: gfxlcd-0.8.3.tar.gz
- Upload date:
- Size: 17.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8be7cd13276bd9b56a1b250c32849b9f10ce8ed9134ec91e5d9c98a26e7ecb25 |
|
MD5 | 5af2556ddd29418d1eac760722339754 |
|
BLAKE2b-256 | c7b1d508eeeae04fce8fb078a50e5375d3f24322c23a7ec2328ff995952d47cd |
File details
Details for the file gfxlcd-0.8.3-py3-none-any.whl
.
File metadata
- Download URL: gfxlcd-0.8.3-py3-none-any.whl
- Upload date:
- Size: 30.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6bc3473030cd63f3ab57b4e7908b537bad32971dcef86ec75b37e8fdfb63ad87 |
|
MD5 | 682a797c5df030f0c60c3b7e141e15e3 |
|
BLAKE2b-256 | 3c9c45e6e88c4f7c9652e53f0ef659ea4b8f5ff9ac0e97f6779a4ba9d80086f6 |