Keyestudio TFT not working

Hi, I'm new to TFT displays.
I bought a Keyestudio Ks0257 2.8" TFT LCD shield using the ILI9325 driver.
I have run all the examples from the Adafruit TFTLCD library, all with the same result: Unknown driver chip.

09:44:53.057 -> TFT LCD test
09:44:53.057 -> Using Adafruit 2.8" TFT Arduino Shield Pinout
09:44:53.102 -> Unknown LCD driver chip: 9397
09:44:53.147 -> If using the Adafruit 2.8" TFT Arduino shield, the line:
09:44:53.192 -> #define USE_ADAFRUIT_SHIELD_PINOUT
09:44:53.237 -> should appear in the library header (Adafruit_TFT.h).
09:44:53.282 -> If using the breakout board, it should NOT be #defined!
09:44:53.372 -> Also if using the breakout, double-check that all wiring
09:44:53.418 -> matches the tutorial.
09:44:53.418 -> 0

I am using the shield on a UNO, and did edit the Adafruit_TFT.h file to that effect.
The screen does not respond at all, it stays white.
I have also tried forcing the sketch to use the ILI9325 driver chip by adding the line;
"identifier = 0x9325;" below the line "uint16_t identifier = tft.readID ();" as suggested by Claid in a previous post - but no change
Can anyone suggest a solution or an alternative library?
Perhaps connect the display to a ESp32? Wiring details for this is hard to find...

This is the display I purchased: Ks0257 keyestudio 2.8 Inch TFT LCD Shield - Keyestudio Wiki

I have spent the last 3 days trying to get this working, and am so frustrated >:(

Any suggestions will be greatly appreciated.

Your shield has regular Mcufriend pinout.

Install MCUFRIEND_kbv via IDE Library Manager.
Run all the examples.

Report back.

When I know what MCUFRIEND_kbv reports for ID, I can advise you how to use Adafruit_TFTLCD if you prefer that library.


Good day David,

I have run all the examples with success, except for ShowBMP...but i suspect my SD card (FAT32) might be the problem (it has become read-only)

I was a bit lost with the Touchscreen calibration - I did not know where to paste the numbers returned and in which format (I am still learning the Arduino language) I will keep at it!

The result from Diagnose TFT Support is as follows:

13:15:55.083 -> Diagnose whether this controller is supported
13:15:55.128 -> There are FAQs in extras/mcufriend_how_to.txt
13:15:55.128 ->
13:15:55.173 -> tft.readID() finds: ID = 0x9325
13:15:55.218 ->
13:15:55.218 -> MCUFRIEND_kbv version: 2.9.9
13:15:55.218 ->
13:15:55.803 ->
13:15:55.803 -> PORTRAIT is 240 x 320
13:15:55.803 ->
13:15:55.803 -> Run the examples/graphictest_kbv sketch
13:15:55.848 -> All colours, text, directions, rotations, scrolls
13:15:55.893 -> should work. If there is a problem, make notes on paper
13:15:55.938 -> Post accurate description of problem to Forum
13:15:56.028 -> Or post a link to a video (or photos)
13:15:56.028 ->
13:15:56.028 -> I rely on good information from remote users

Thank you so much for your assistance.

Ah-ha. So it really is an ILI9325 !!

Everything in graphictest_kbv should work except for "Band Scroll". ILI9325 always scrolls the whole screen.

Regarding the Serial Terminal. Disable the timestamp. You never need it.

The Calibration sketch should show you what to do.
e.g. which two lines to paste into the Touch_shield_kbv example.


Good day David,

Thank you for the assistance so far.
As the shield is not SPI capable (apparently) I have ordered a 2.2" TFT display with the ILI9341 driver, which seems to have much wider support.
MCUFriend is recommended as the library of choice.

I think it will be much easier using SPI, bit will the refresh rate suffer as a result?
I am planning to use it on a ESP32.
Your opinion will be greatly appreciated.


Your Keyestudio shield should work ok with the ESP32 but it uses most of the GPIO pins.
The shield has a microSD holder. Works with ESP32.
The shield has Touch. Works with ESP32.
The shield can NOT alter the backlight

The Red SPI works fine with ESP32. Not many GPIO pins.
Monster SD holder.
No Touch.

Bodmer supports ILI9341 on TFT_eSPI library. (he does not support Parallel ILI9325)


I have decided to experiment with the Arduino shield attached to an Uno.
I soldered headers to the bottom of the Uno (SLC, SDA, 5V, GND) for connection to a MCU6050, with the aim to display the Accelerometer readings.
I am quite pleased with the layout of the screen.

However, there are some issues I need advice on:

  1. The numbers displayed are not correct when compared to the values on the serial monitor.
  2. The values do not update.
  3. There is a bad flicker on the values.

I am totally new to TFT displays, and any guidance will be greatly appreciated.


#include <SPI.h>          
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>

Adafruit_MPU6050 mpu;

MCUFRIEND_kbv tft;

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

void setup()
  tft.reset(); //Reset LCD to begin
  uint16_t id = tft.readID();
  tft.setRotation(0); // Set Rotation at 90 degress

  //Print heading
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.setCursor(40, 30);    

//Draw lines 
//Print Axis titles
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.setCursor(30, 80);    
  tft.setCursor(30, 140);    
  tft.println("Y"); \
  tft.setCursor(30, 200);    

void loop() {

//Get Readings
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp); 

//Print readings
  tft.setCursor(120, 80);    
  tft.print(a.acceleration.x, 1);
  tft.setCursor(120, 140);    
  tft.print(a.acceleration.y, 1);
  tft.setCursor(120, 200);    
  tft.print(a.acceleration.z, 1);

//Clear readings   


Your Blue Keyestudio shield uses A4 for LCD_RST pin.
A4 is used for SDA with I2C devices on a Uno.

So you can't use I2C (Wire.h) with your display.
I do not recommend the hardware mod because you have an ILI9325.

You can use I2C with your Red SPI display. But remember that the display requires 3.3V logic. And so does the MPU6050.

The world would be a better place if all Arduinos were 3.3V.


You can use I2C with your Red SPI display. But remember that the display requires 3.3V logic. And so does the MPU6050.

So I am back to the ESP32...

This topic was automatically closed after 120 days. New replies are no longer allowed.