I am doing my NEA project right now and I have a problem using 2 TFT LCD. Here are more details about the LCD 2.8" LCD SPI, Driver: ili9341 with touch version 1.2, this a picture of it: enter image description here

I have connected the first LCD in the following Steps:

Step 1:

I connected the Screen to the GPIO to the following pin diagram:

Display GPIO #
VCC 3.3v
GND gnd
CS 8
DC 22
SCK 11
LED 13

Step 2:

I installed the tft9341 overlay:

git clone https://github.com/goodtft/LCD-show.git
cd LCD-show/
sudo cp ./usr/tft9341-overlay.dtb /boot/overlays/tft9341.dtbo

Step 3:

I updated the /boot/config.txt file

# turns spi on
# loads tft module for /dev/fb1
# sets tft backlight pin on
# or off at startup

and then restarted the Raspberry Pi and everything was working and the screen was connected to /dev/fb1 and I was able to control the screen with pygame.

Now I want to control the second LCD at the same time.

If someone knows how to help me I would be grateful

1 Answer 1


here is how I did it that's how I connected the screens to the Raspberry Pi:

enter image description here

Then execute this commands:

sudo pip3 install adafruit-circuitpython-rgb-display
sudo apt-get install fonts-dejavu
sudo apt-get install python3-pil
sudo apt-get install libopenjp2-7 libtiff5 libatlas-base-dev
pip3 install adafruit-blinka

this is for the coding for python Now we need to enable the SPI so to do that we need to execute this command

sudo nano /boot/config.txt

usually this line is commented so uncomment by simply removing the "#" before it enter image description here and add the following line also :


then Ctrl+S and Ctrl+X now if you want to check if everything is fine tell now: execute the following command:

ls -l /dev/spi*

you should see this enter image description here and you can use this code it would work:

import time
import subprocess
import digitalio
import board
import busio
from PIL import Image, ImageDraw, ImageFont
from adafruit_rgb_display import ili9341

cs_pin = digitalio.DigitalInOut(board.CE0)
dc_pin = digitalio.DigitalInOut(board.D25)
reset_pin = digitalio.DigitalInOut(board.D24)
cs_pin1 = digitalio.DigitalInOut(board.D18)
dc_pin1 = digitalio.DigitalInOut(board.D26)
reset_pin1 = digitalio.DigitalInOut(board.D6)

# Config for display baudrate (default max is 24mhz):
BAUDRATE = 24000000

# Setup SPI bus using hardware SPI:
spi1 = busio.SPI(board.SCK_1, MOSI=board.MOSI_1, MISO=board.MISO_1)
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
                        # 0.96" SSD1331
disp = ili9341.ILI9341(
    rotation=90,  # 2.2", 2.4", 2.8", 3.2" ILI9341
disp1 = ili9341.ILI9341(
    rotation=90,  # 2.2", 2.4", 2.8", 3.2" ILI9341

if disp.rotation % 180 == 90:
    height = disp.width  # we swap height/width to rotate it to landscape!
    width = disp.height
    width = disp.width  # we swap height/width to rotate it to landscape!
    height = disp.height

image = Image.new("RGB", (width, height))

# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)

# Draw a black filled box to clear the image.
draw.rectangle((0, 0, width, height), outline=0, fill=(0, 0, 0))

# First define some constants to allow easy positioning of text.
padding = -2
x = 0

font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 24)

while True:
    # Draw a black filled box to clear the image.
    draw.rectangle((0, 0, width, height), outline=0, fill=0)
    cmd = "hostname -I | cut -d' ' -f1"
    IP = "IP: " + subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"
    CPU = subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = "free -m | awk 'NR==2{printf \"Mem: %s/%s MB  %.2f%%\", $3,$2,$3*100/$2 }'"
    MemUsage = subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = 'df -h | awk \'$NF=="/"{printf "Disk: %d/%d GB  %s", $3,$2,$5}\''
    Disk = subprocess.check_output(cmd, shell=True).decode("utf-8")
    cmd = "cat /sys/class/thermal/thermal_zone0/temp |  awk '{printf \"CPU Temp: %.1f C\", $(NF-0) / 1000}'"  # pylint: disable=line-too-long
    Temp = subprocess.check_output(cmd, shell=True).decode("utf-8")

    # Write four lines of text.
    y = padding
    draw.text((x, y), IP, font=font, fill="#FFFFFF")
    y += font.getsize(IP)[1]
    draw.text((x, y), CPU, font=font, fill="#FFFF00")
    y += font.getsize(CPU)[1]
    draw.text((x, y), MemUsage, font=font, fill="#00FF00")
    y += font.getsize(MemUsage)[1]
    draw.text((x, y), Disk, font=font, fill="#0000FF")
    y += font.getsize(Disk)[1]
    draw.text((x, y), Temp, font=font, fill="#FF00FF")

    # Display image.

this only works with the ili9341 driver display i am not aware of how I would do it with a different driver But if you want to find out how to do it I used these websites: -enter link description here -enter link description here -enter link description here Here is a picture of it enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.