본문 바로가기
ESP32

[강좌]ESP32 4.3" TFT-LCD HMI - 7. lvgl 예제 살펴보기 2 ( lvgl examples 2 )

by 소나무기운 2023. 4. 4.
반응형

[2023/04/04] First Start.

소나무 기운 ,  전자제품 개발/생산

[강좌]ESP32 4.3" TFT-LCD HMI - 7. lvgl 예제 살펴보기 2 ( lvgl examples 2 )

이제는 터치를 추가해서 동작 시켜 보는 예제입니다. 3_3-4_TFT-LVGL-Widgets를 살펴보도록 하겠습니다.

터치를 사용하는 lvgl widget을 사용해 보는 프로그램 예제입니다.

Capacitive touch와 Resistive touch 두 가지 모두 지원하고 있습니다.

기본적인 터치의 사용을 알 수 있고, lvgl로 어떤 UI / UX를 만들 수 있는지 확인해 볼 수 있습니다. 

 

 

폴더 구성 및 파일

폴더는 두개, 파일은 세개로 되어 있습니다.

이 사진과 같이 구성되어 있습니다.

# LVGL configuration replacement file 폴더에는 lv_conf.h 파일이 들어 있습니다. 이전 강좌에서 사용한 파일과 동일합니다. 아두이노 라이브리 폴더의 lvgl폴더에 복사해서 사용합니다.

위 위치를 참고하세요.

lgvl과 관련된 설정값들이 선언되어 있습니다.

# LvglWidgets 폴더에는 두개의 파일 LvglWidgets.ino, touch.h가 있습니다. 아두이노 메인 파일과 터치관련 설정 파일입니다.

touch.h를 살펴보면

3개의 터치 드라이버를 사용할 수 있도록 선언이 되어 있습니다.

이 사진에서 처럼 3개의 터치드라이버중 1개를 선택하여 주석으로 막은 부분을 풀어주면 됩니다.

 

FX6X36 :  Resistive touch Driver

GP911 : Capacitive touch Driver

XPT2046 : Resistive touch Driver ( 우리가 사용할 터치 IC )

 

 

 

컴파일과 다운로드

아두이노 IDE에서 LvglWidgets.ino를 열고 컴파일 하고 다운로드 해 줍니다.

아두이노 IDE에서 설정하는 값의 차이는 없습니다.

 

2023.03.27 - [ESP32] - [강좌]ESP32 4.3" TFT-LCD HMI - 4. TFT 예제 살펴보기(Explore Examples)

위 강좌의 상태로 설정하시면 됩니다. 헤더파일 touch.h와 ino파일은 같은 폴더에 있어야 합니다.

 

컴파일하는데는 시간이 많이 걸립니다. 모든 라이브리까지 포함한 소스코드를 전부 매번 컴파일하기 때문입니다.

동작하는 상태를 한번 보시죠.

 

이 예제는 인터넷 상에 여러가지 플랫폼에서 동작하는 예제를 볼 수 있습니다.

 

 

 

 

LvglWidgets.ino 파일 살펴 보기

setup()함수에는 새로추가된 touch_init()함수가 호출 됩니다.

 

그래픽 관련 사항을 초기화 하고 lv_demo_widgets(); 함수를 호출해 주면 끝입니다.

간단하지만 lv_demo_sidgets()함수는 복잡하겠지요.

 

loop()함수로 넘어와 lv_timer_handler();를 주기적으로 호출해 주면 lvgl_demo는 정상적로 잘 동작합니다.

 

터치관련 함수가 추가되었습니다.

void my_touchpad_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data)
{
  if (touch_has_signal())
  {
    if (touch_touched())
    {
      data->state = LV_INDEV_STATE_PR;

      /*Set the coordinates*/
      data->point.x = touch_last_x;
      data->point.y = touch_last_y;
    }
    else if (touch_released())
    {
      data->state = LV_INDEV_STATE_REL;
    }
  }
  else
  {
    data->state = LV_INDEV_STATE_REL;
  }
}

이 my_touchpad_read() 함수를 lvgl에 연결해 줍니다.

 

 

 

마무리

여러가지 그래픽 위젯들이 잘 동작하는 것을 확인하였습니다. ESP32-S3의 경우 240MHz의 속도와 16MByte 플래시를 가지고 있어. 이미지와 화면 동작에 최적화 되어 있습니다. 물론 Audio도 있으며 SD 카드 슬롯도 있습니다.

HMI제작에 완벽한 구성입니다. 최근 GUI의 요청이 많이지고 있습니다. 차근차근 챙겨보고 실력을 키우시길 바랍니다. 

 

 

참고문헌

마무리5

다음 강좌에서는 PlatformIO를 사용하여 LvglWidgets.ino를 사용해 보도록 하겠습니다.

현재 사용하고 있는 아두이노IDE의 경우 컴파일 & 다운로드 할때 마다 모든 소스코드를 전부 컴파일 합니다. 또한 소스 파일이 워낙 많기 때문에 시간이 10분 정도 소요됩니다. 하지만 PlatformIO를 사용하면 어떤점이 좋은지도 알아보겠습니다.

 

 
 

 

 

틀린 부분이나 질문은 댓글 달아주세요.

즐거운 하루 보내세요. 감사합니다.

 

 

반응형

댓글