In this article we look at another CD option for your Raspberry Pi Pico,its a 1.8 inch LCd with dimensions of 128 x 160 and is based on the ST7735 IC.
There are many variants of the LCD that use this driver ic. This is the one that I purchased
Specs
SIZ : E0.96inch
Display Mode : Normally black IPS
Display Format : Graphic 80RGB*160 Dot-matrix
Input Data : SPI interface
Drive : ICST7735S
Dimensional outline 24(W)*30 (H)*2.8+/-0.1(T)mm
Resolution 80 RGB*160 Dots
LCD Active area 10.8 (W)*21.7 (H)
Dot pitch0.135(H) x 0.1356(V) mm
Operating Temperature-20~70°C
Pin Descriptions
PIN No | Symbol | Description |
1 | GND | Ground |
2 | VCC | Power 3.3V |
3 | SCL | |
4 | SDA | |
5 | RESLCM | Reset pin – This pin is reset signal input. When the pin is low, initialization of the chip is executed. Keep this pin pull high during normal operation. |
6 | DC | Data/Command Control |
7 | CS | Chip Select |
8 | BLK | Backlight control pin |
Connection
This is the connection I used
LCD | Pico | Description |
VCC | VSYS | Power Input |
GND | GND | GND |
DIN | GP11 | MOSI pin of SPI, slave device data input |
CLK | GP10 | SCK pin of SPI, clock pin |
CS | GP9 | Chip selection of SPI, low active |
DC | GP8 | Data/Command control pin (High for data; Low for command) |
RST | GP12 | Reset pin, low active |
BL | GP13 | Backlight control |
The only fritzing part I could find was a for a smaller LCD but its exactly the same pinout
Parts
Name | Link |
Pico | Raspberry Pi Pico Development Board |
ST7735 lCD | |
Connecting cables | Aliexpress product link |
Code example
I used thonny for development
You need the following 2 libraries to be uploaded to your Pico, we have combined them in one file – ST7735
This is a test example which demonstrates a lot of the functionality
from ST7735 import TFT from sysfont import sysfont from machine import SPI,Pin import time import math BL = 13 DC = 8 RST = 12 MOSI = 11 SCK = 10 CS = 9 spi = SPI(1, baudrate=20000000, polarity=0, phase=0, sck=Pin(10), mosi=Pin(11), miso=None) tft=TFT(spi,8,12,9) tft.initr() tft.rgb(True) def testlines(color): tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((0,0),(x, tft.size()[1] - 1), color) for y in range(0, tft.size()[1], 6): tft.line((0,0),(tft.size()[0] - 1, y), color) tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((tft.size()[0] - 1, 0), (x, tft.size()[1] - 1), color) for y in range(0, tft.size()[1], 6): tft.line((tft.size()[0] - 1, 0), (0, y), color) tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((0, tft.size()[1] - 1), (x, 0), color) for y in range(0, tft.size()[1], 6): tft.line((0, tft.size()[1] - 1), (tft.size()[0] - 1,y), color) tft.fill(TFT.BLACK) for x in range(0, tft.size()[0], 6): tft.line((tft.size()[0] - 1, tft.size()[1] - 1), (x, 0), color) for y in range(0, tft.size()[1], 6): tft.line((tft.size()[0] - 1, tft.size()[1] - 1), (0, y), color) def testfastlines(color1, color2): tft.fill(TFT.BLACK) for y in range(0, tft.size()[1], 5): tft.hline((0,y), tft.size()[0], color1) for x in range(0, tft.size()[0], 5): tft.vline((x,0), tft.size()[1], color2) def testdrawrects(color): tft.fill(TFT.BLACK); for x in range(0,tft.size()[0],6): tft.rect((tft.size()[0]//2 - x//2, tft.size()[1]//2 - x/2), (x, x), color) def testfillrects(color1, color2): tft.fill(TFT.BLACK); for x in range(tft.size()[0],0,-6): tft.fillrect((tft.size()[0]//2 - x//2, tft.size()[1]//2 - x/2), (x, x), color1) tft.rect((tft.size()[0]//2 - x//2, tft.size()[1]//2 - x/2), (x, x), color2) def testfillcircles(radius, color): for x in range(radius, tft.size()[0], radius * 2): for y in range(radius, tft.size()[1], radius * 2): tft.fillcircle((x, y), radius, color) def testdrawcircles(radius, color): for x in range(0, tft.size()[0] + radius, radius * 2): for y in range(0, tft.size()[1] + radius, radius * 2): tft.circle((x, y), radius, color) def testtriangles(): tft.fill(TFT.BLACK); color = 0xF800 w = tft.size()[0] // 2 x = tft.size()[1] - 1 y = 0 z = tft.size()[0] for t in range(0, 15): tft.line((w, y), (y, x), color) tft.line((y, x), (z, x), color) tft.line((z, x), (w, y), color) x -= 4 y += 4 z -= 4 color += 100 def testroundrects(): tft.fill(TFT.BLACK); color = 100 for t in range(5): x = 0 y = 0 w = tft.size()[0] - 2 h = tft.size()[1] - 2 for i in range(17): tft.rect((x, y), (w, h), color) x += 2 y += 3 w -= 4 h -= 6 color += 1100 color += 100 def tftprinttest(): tft.fill(TFT.BLACK); v = 30 tft.text((0, v), "Hello World!", TFT.RED, sysfont, 1, nowrap=True) v += sysfont["Height"] tft.text((0, v), "Hello World!", TFT.YELLOW, sysfont, 2, nowrap=True) v += sysfont["Height"] * 2 tft.text((0, v), "Hello World!", TFT.GREEN, sysfont, 3, nowrap=True) v += sysfont["Height"] * 3 tft.text((0, v), str(1234.567), TFT.BLUE, sysfont, 4, nowrap=True) time.sleep_ms(1500) tft.fill(TFT.BLACK); v = 0 tft.text((0, v), "Hello World!", TFT.RED, sysfont) v += sysfont["Height"] tft.text((0, v), str(math.pi), TFT.GREEN, sysfont) v += sysfont["Height"] tft.text((0, v), " Want pi?", TFT.GREEN, sysfont) v += sysfont["Height"] * 2 tft.text((0, v), hex(8675309), TFT.GREEN, sysfont) v += sysfont["Height"] tft.text((0, v), " Print HEX!", TFT.GREEN, sysfont) v += sysfont["Height"] * 2 tft.text((0, v), "Sketch has been", TFT.WHITE, sysfont) v += sysfont["Height"] tft.text((0, v), "running for: ", TFT.WHITE, sysfont) v += sysfont["Height"] tft.text((0, v), str(time.ticks_ms() / 1000), TFT.PURPLE, sysfont) v += sysfont["Height"] tft.text((0, v), " seconds.", TFT.WHITE, sysfont) def test_main(): tft.fill(TFT.BLACK) tft.text((0, 0), "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", TFT.WHITE, sysfont, 1) time.sleep_ms(1000) tftprinttest() time.sleep_ms(4000) testlines(TFT.YELLOW) time.sleep_ms(500) testfastlines(TFT.RED, TFT.BLUE) time.sleep_ms(500) testdrawrects(TFT.GREEN) time.sleep_ms(500) testfillrects(TFT.YELLOW, TFT.PURPLE) time.sleep_ms(500) tft.fill(TFT.BLACK) testfillcircles(10, TFT.BLUE) testdrawcircles(10, TFT.WHITE) time.sleep_ms(500) testroundrects() time.sleep_ms(500) testtriangles() time.sleep_ms(500) test_main()
Links