Подключение TFT дисплея 4 дюйма к ESP32

Китаец прислал дисплей 4 дюйма, описание товара следующее

TFT ЖК-дисплей 3,95 дюйма/4,0 дюйма, HD электронный STM32 ESP32 Ar C51 SPI PCB Board,
сенсорный дисплей ILI9488 480320 3,3 V

Ссылка на дисплей https://aliexpress.ru/item/1005004799679873.html

[Вид дисплея сзади]

[Описание пинов спереди]

[Подключаю к ESP32 так] (ESP32 у меня такое же как на рисунке)

Содержимое файла User_Setup.h

#define USER_SETUP_INFO "User_Setup"

#define ILI9488_DRIVER   
#define TFT_MISO 19 //SD0
#define TFT_MOSI 23 //SD1
#define TFT_SCLK 18
#define TFT_CS   14  // Chip select control pin
#define TFT_DC   27  // Data Command control pin
#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   32  // LED back-light (required for M5Stack)

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT

#define SPI_FREQUENCY  27000000

// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY  20000000

// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
#define SPI_TOUCH_FREQUENCY  2500000

#define SUPPORT_TRANSACTIONS

[Пример]

#include <SPI.h>

#include <TFT_eSPI.h>       // Hardware-specific library

TFT_eSPI tft = TFT_eSPI();  // Invoke custom library

void setup(void) {
  tft.init();

  tft.fillScreen(TFT_BLACK);
  tft.drawRect(0, 0, tft.width(), tft.height(), TFT_GREEN);

  // Set "cursor" at top left corner of display (0,0) and select font 4
  tft.setCursor(0, 4, 4);

  // Set the font colour to be white with a black background
  tft.setTextColor(TFT_WHITE);

  // We can now plot text on screen using the "print" class
  tft.println(" Initialised default\n");
  tft.println(" White text");
  
  tft.setTextColor(TFT_RED);
  tft.println(" Red text");
  
  tft.setTextColor(TFT_GREEN);
  tft.println(" Green text");
  
  tft.setTextColor(TFT_BLUE);
  tft.println(" Blue text");

  delay(5000);

}

void loop() {

  tft.invertDisplay( false ); // Where i is true or false
 
  tft.fillScreen(TFT_BLACK);
  tft.drawRect(0, 0, tft.width(), tft.height(), TFT_GREEN);

  tft.setCursor(0, 4, 4);

  tft.setTextColor(TFT_WHITE);
  tft.println(" Invert OFF\n");

  tft.println(" White text");
  
  tft.setTextColor(TFT_RED);
  tft.println(" Red text");
  
  tft.setTextColor(TFT_GREEN);
  tft.println(" Green text");
  
  tft.setTextColor(TFT_BLUE);
  tft.println(" Blue text");

  delay(5000);


  // Binary inversion of colours
  tft.invertDisplay( true ); // Where i is true or false
 
  tft.fillScreen(TFT_BLACK);
  tft.drawRect(0, 0, tft.width(), tft.height(), TFT_GREEN);

  tft.setCursor(0, 4, 4);

  tft.setTextColor(TFT_WHITE);
  tft.println(" Invert ON\n");

  tft.println(" White text");
  
  tft.setTextColor(TFT_RED);
  tft.println(" Red text");
  
  tft.setTextColor(TFT_GREEN);
  tft.println(" Green text");
  
  tft.setTextColor(TFT_BLUE);
  tft.println(" Blue text");

  delay(5000);
}

При включении питания дисплей вспыхивает белым на доли секунды и больше ни чего не показывает, как правильно подключить данный дисплей?

попробуй CS на 5 и частоту SPI снизить, поставь 4 мегагерца, запустится, будешь гнать

Надуюсь всё правильно сделал, но не помогло (физически с CS провод перенёс на пин D5).

#define USER_SETUP_INFO "User_Setup"
//SD0=MISO, SD1=MOSI, CLK=SCLK
#define ILI9488_DRIVER   
#define TFT_MISO 19 //SD0
#define TFT_MOSI 23 //SD1
#define TFT_SCLK 18
#define TFT_CS   5  // Chip select control pin
#define TFT_DC   27  // Data Command control pin
#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   32  // LED back-light (required for M5Stack)

#define LOAD_GLCD   // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2  // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4  // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6  // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7  // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8  // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF  // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts

// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded
// this will save ~20kbytes of FLASH
#define SMOOTH_FONT

#define SPI_FREQUENCY  4000000

// Optional reduced SPI frequency for reading TFT
#define SPI_READ_FREQUENCY  4000000

// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:
//#define SPI_TOUCH_FREQUENCY  2500000

#define SUPPORT_TRANSACTIONS

попробуй драйвер ili9341

а плату какую выбираешь?

Спасибо за помощь, оказывается у дисплея подсветка пин BL, а не PEN как я думал, случайно наткнулся на эту статью Ардуино: графический ЖК дисплей Nokia 5110 | Класс робототехники и узнал, что BL нужно подключить на 3.3 вольта и всё заработало, точнее оно скорее всего и так работало, просто без подсветки это было не видно.

это да, тоже не посмотрел в коде на это

// #define TFT_BL   32            // LED back-light control pin
// #define TFT_BACKLIGHT_ON HIGH  // Level to turn ON back-light (HIGH or LOW)
1 лайк

Здравствуйте, такой же экран, копирую и подключаю все как здесь, получаю белый экран. Подскажите пожалуйста что не так

Варианта два: либо неправильно копируете, либо - неправильно подключаете.

как раз с ними сижу ковыряюсь)))
может будет полезно
User_Setup.h мои настройки

#ifndef USER_SETUP_H
#define USER_SETUP_H

// 1. Измените параметры дисплея:
#define ST7735_DRIVER
#define TFT_WIDTH  128
#define TFT_HEIGHT 160
#define ST7735_REDTAB160x128
#define TFT_INVERSION_ON
#define TFT_RGB_ORDER TFT_BGR

// Пины SPI (HSPI для ESP32)
#define TFT_MOSI 13  // GPIO13 (D7)
#define TFT_SCLK 14  // GPIO14 (D5)
#define TFT_CS   15  // GPIO15 (D8) - Чипселект
#define TFT_DC    2  // GPIO2  (D4) - Data/Command
#define TFT_RST   4  // GPIO4  (D2) - Reset
#define TFT_BL   12  // GPIO12 (D6) - Подсветка (PWM)

// Настройки SPI
#define SPI_FREQUENCY  40000000
#define SPI_READ_FREQUENCY 16000000
#define SPI_TOUCH_FREQUENCY 2500000

// Пины TFT (HSPI)
#define TFT_CS   15   // GPIO15
#define TFT_DC   2    // GPIO2
#define TFT_RST  4    // GPIO4

// Подсветка
#define TFT_BL   12   // GPIO12 (можно PWM)

// SPI для TFT (HSPI)
#define TFT_SCLK 14   // GPIO14
#define TFT_MOSI 13   // GPIO13
#define TFT_MISO -1   // Не используется

// Частота SPI для дисплея
#define SPI_FREQUENCY  27000000  // Работает на ESP32

// Включить JPEG с SD
#define LOAD_JPG

// Пины SD-карты (VSPI)
#define SD_CS    5    // GPIO5
#define SD_SCLK  18   // GPIO18
#define SD_MOSI  23   // GPIO23
#define SD_MISO  19   // GPIO19

// Шрифты
#define LOAD_GLCD
#define LOAD_FONT2
#define LOAD_FONT4
#define LOAD_GFXFF
#define SMOOTH_FONT

#endif

код вывода jpg рисунков с sd

#include <TFT_eSPI.h>
#include <TJpg_Decoder.h>
#include <SPI.h>
#include <SD.h>
TFT_eSPI tft = TFT_eSPI();
// Пины SD-карты
#define SD_CS 5
#define TFT_BL 12 // Подсветка
// Глобальные переменные для размеров изображения
uint16_t imgWidth = 0;
uint16_t imgHeight = 0;
// Функция для вывода JPEG
bool tft_output(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t* bitmap) {
if (y >= tft.height()) return 0;
// Сохраняем размеры изображения
imgWidth = w;
imgHeight = h;
tft.pushImage(x, y, w, h, bitmap);
return 1;
}

void setup() {
Serial.begin(115200);
// Настройка подсветки
pinMode(TFT_BL, OUTPUT);
digitalWrite(TFT_BL, HIGH);  // Включить подсветку
// Инициализация дисплея
tft.init();
tft.setRotation(0);
tft.setSwapBytes(true); // Важно для правильных цветов!
tft.fillScreen(TFT_BLACK);
// Инициализация SD-карты
if (!SD.begin(SD_CS)) {
Serial.println("SD Card Mount Failed");
while(1); // Зависаем, если SD карта не найдена
}
// Настройка JPEG декодера
TJpgDec.setJpgScale(1);
TJpgDec.setCallback(tft_output);
Serial.println("Initialization done"); 
// Тестовый вывод - заливка цветом
tft.fillScreen(TFT_RED);
delay(500);
tft.fillScreen(TFT_GREEN);
delay(500);
tft.fillScreen(TFT_BLUE);
delay(500);
tft.fillScreen(TFT_BLACK);
}

void loop() {
Serial.println("Starting animation...");
for(int i = 0; i < 50; i++) {
char filename[20];
sprintf(filename, "/frame_%02d.jpg", i);
if(SD.exists(filename)) {
uint32_t start = millis();
// Очистка всего экрана
tft.fillScreen(TFT_BLACK);
// Получение размеров JPEG
uint16_t w = 0, h = 0;
TJpgDec.getSdJpgSize(&w, &h, filename);
// Центрирование изображения
uint16_t x = (tft.width() - w) / 2;
uint16_t y = (tft.height() - h) / 2;
// Вывод JPEG
TJpgDec.drawSdJpg(x, y, filename);
uint32_t duration = millis() - start;
Serial.printf("Frame %s: %dx%d, pos(%d,%d), %d ms\n", 
filename, w, h, x, y, duration);
if(duration < 40) delay(40 - duration); }
}
delay(1000);
}

если что чуть подправьте не свой

Экран завелся, но не реагирует сенсор .НУ ЧТО ЕМУ ЕЩЕ НУЖНО.

пожалуйста помогите с сенсором

4 пина, и вроде аналоговых)))
ну и лентяй же вы…
https://voltiq.ru/esp32-touchscreen-display-connection/

может я чего то не понимаю, но у нас драйвер 9488. и как я понял сенсор должен работать от библиотеки TFT eSPI. Если не трудно обьясните пожалуйста

это дисплей, а тач может быть собран на любом контроллере для тачей, это два НЕЗАВИСИМЫЕ устройства

как узнать какой контролер тача стоит в этом дисплее

видимо посмотреть

посмотрел. загружаю пример из библиотеки tft eSPI с использованием сенсора, в коде нет никаких сторонних драйверов. это ошибка или нужно дописывать руками или есть еще какой то способ

так надо и в сетапе тач настроить

ура, все заработало. еще вопрос-можно данный дисплей запитать от 5 вольт