IT/Platform

[TFT LCD] ili9488 LVGL 재도전 #4 EEZ & LOLIN & PlatformIO

블랙오닉스 2024. 11. 3. 20:53

2024.11.03

EEZ로 생성된 UI를 적용하여 컴파일 에러를 다 잡았다.

 

실행하면 Serial로 좌표값은 넘어오는데, 화면이 안나온다.

녹칸다님 예제와 1:1 비교를 해서 수정

 

그래도 화면은 안나온다.

TFT_eSPI 관련 함수를 따라가다보니 TFT_eSPI .h 의 버전이 다르다.

git에서 받은 것은 2.5.43

화면이 나오는 버전은 2.4.61

디렉토리를 복사해서 사용하니 화면이 나온다.

 

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

 

Dependency Graph
|-- lvgl @ 8.3.6
|-- TFT_eSPI @ 2.4.61
|-- TFT_Touch @ 0.3
|-- ui

#define DOUT 34  /* Data out pin (T_DO) of touch screen */
#define DIN  32  /* Data in pin (T_DIN) of touch screen */
#define DCS  33  /* Chip select pin (T_CS) of touch screen */
#define DCLK 25  /* Clock pin (T_CLK) of touch screen */
TFT_Touch touch = TFT_Touch(DCS, DCLK, DIN, DOUT);

// TODO: Replace with your screen resolution
static const uint16_t screenWidth  = 480;
static const uint16_t screenHeight = 320;

static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[ screenWidth * screenHeight / 10 ];


// TODO: Replace with your screen's touch controller
TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight);
...
void my_touchpad_read( lv_indev_drv_t * indev_driver, lv_indev_data_t * data )
{
    uint16_t touchX = 0, touchY = 0;

    //만약 XPT2046에 터치가 감지된다면~
    bool touched = touch.Pressed();//tft.getTouch( &touchX, &touchY, 600 );

    if( !touched )
    {
        data->state = LV_INDEV_STATE_REL;
    }
    else
    {
        //XPT2046에서 인식된 x좌표와 y좌표를 LVGL에 넘겨준다
        touchX = touch.X();
        touchY = touch.Y();

        data->state = LV_INDEV_STATE_PR;

        /*Set the coordinates*/
        data->point.x = touchX;
        data->point.y = touchY;

        Serial.print( "Data x " );
        Serial.println( touchX );

        Serial.print( "Data y " );
        Serial.println( touchY );
    }
}
...
void loop() {
  lv_timer_handler();
  // Update EEZ-Studio UI
  ui_tick();
}

 

#define ILI9488_DRIVER 
#define TFT_BACKLIGHT_ON HIGH

//ILI9341연결법(SPI)
//VSPI(X), HSPI(O)
#define TFT_MOSI 13 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_SCLK 14
#define TFT_CS   15  // Chip select control pin
#define TFT_DC   2  // Data Command control pin
#define TFT_RST  12 
...
#define SPI_FREQUENCY  27000000
// #define SPI_FREQUENCY  40000000
// #define SPI_FREQUENCY  55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)
// #define SPI_FREQUENCY  80000000

// 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

// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.
// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)
// then uncomment the following line:
#define USE_HSPI_PORT

//나머지는 모두 주석

 

Library 버전 차이는 나중에 다시 확인

녹칸다 예제 라이브러리와 git clone으로 받은 2.5.43이 많이 다르다

git clone으로 2.4.61도 받아 비교

git clone --branch v2.4.61 https://github.com/Bodmer/TFT_eSPI

-> copilot 방법
git clone https://github.com/Bodmer/TFT_eSPI
git checkout tags/v2.4.61 -b v2.4.61

같다


화면에 여러가지 위젯을 추가했는데 좌표가 어긋 난다.

 touch.setCal(526, 3443, 750, 3377, screenWidth, screenHeight, 1);

녹칸다 예제에서 복사하고 320, 240을 화면 해상도로 변경

적당히 잘 되는데 추가한 키보드에 좌표가 약간 어긋난다.