반응형

LVGL, TFT_eSPI와 같은 라이브러리는 사용자 설정 파일을 별도로 만들어야 합니다. TFT_eSPI는 단순함이 목적이라 매번 라이브러리 기본 파일을 편집하거나 build_flags에서 상수 값을 지정해야 하지만, LVGL은 범용 라이브러리 이므로 외부 위치에 환경 설정 파일을 만들 수 있습니다.

PlatformIO IDE

lv_conf.h 파일의 기본 위치는 lv_conf_template.h 파일과 같은 위치인 lvgl 폴더 내, 또는 lvgl 폴더의 상위 폴더입니다.

.pio와 같이 .(점)이 붙은 폴더의 파일은 자동으로 생성되고 관리되며, git에서 제외되고, .pio/libdeps 폴더 내의 파일들은 PIO에 의해 삭제됩니다. 예) 라이브러리를 정리하기 위해 Clean 기능을 사용할 때

lv_conf.h 파일을 안전한 위치로 이동

자동으로 삭제될 위험이 없는 곳은 .pio 폴더가 아닌 폴더(PIO 프로젝트 폴더)입니다. PIO에서 기본으로 생성되는 사용자 파일용 폴더는 data, include, lib, src 입니다.

모든 환경에서 같은 lv_conf.h 파일을 공용으로 사용할 때

lv_conf.h는 단일 파일이므로 include 폴더에 저장하는 것이 좋습니다. 그런데 이 폴더는 빌드 시 라이브러리에서 인식하지 못합니다. 그래서 경로 설정을 해야합니다.

platformio.ini

build_flags

build_flags = 
	-I include/
	-D LV_CONF_INCLUDE_SIMPLE

build_flags 항목에 -I, -D 옵션이 있습니다. 바로 뒤의 공백은 없어도 됩니다.

-I는 Include이며, -D는 Define입니다.

LV_CONF_INCLUDE_SIMPLE 상수를 선언하면 LVGL 내부에서 lv_conf.h 파일을 include할 때 ../../lv_conf.h가 아닌 lv_conf.h를 사용합니다.

다른 환경 섹션의 값을 참조하려면 아래처럼 변수를 사용하면 됩니다.

[env:다른환경]
build_flags = 
	${env.build_flags}

build_src_filter

LVGL에는 데모 코드 등, 빌드 시 필요 없는 파일이 많습니다. 이를 제외하면 빌드 속도가 빨라집니다.

build_src_filter = 
	+<../.pio/libdeps/${this.__env__}/lvgl/demos>

이렇게 하면 안 돼요

build_flags = 
  '-D LV_CONF_PATH=${platformio.include_dir}/lv_conf.h'
또는
  -D LV_CONF_PATH="${PROJECT_DIR}/include/lv_conf.h"

이렇게 사용하기도 합니다만 치명적인 오류가 있습니다.

LV_CONF_PATH 값을 LVGL에서 전처리하게 되는데, 경로에 상수 이름이 있으면 해당 값으로 치환이 됩니다.

예) 경로 이름에 ESP32가 있으면 1로 치환됨

lv_conf.h

성능 모니터

위와 같이 FPS, CPU, MEM 성능을 표시할 수 있습니다. 아래 상수를 찾아서 값을 1로 변경합니다.

#define LV_USE_SYSMON 1
#define LV_USE_PERF_MONITOR 1
#define LV_USE_MEM_MONITOR 1

표시 위치는 다음 구조체를 참고하여 설정합니다.

typedef enum {
    LV_ALIGN_DEFAULT = 0,
    LV_ALIGN_TOP_LEFT,
    LV_ALIGN_TOP_MID,
    LV_ALIGN_TOP_RIGHT,
    LV_ALIGN_BOTTOM_LEFT,
    LV_ALIGN_BOTTOM_MID,
    LV_ALIGN_BOTTOM_RIGHT,
    LV_ALIGN_LEFT_MID,
    LV_ALIGN_RIGHT_MID,
    LV_ALIGN_CENTER,

    LV_ALIGN_OUT_TOP_LEFT,
    LV_ALIGN_OUT_TOP_MID,
    LV_ALIGN_OUT_TOP_RIGHT,
    LV_ALIGN_OUT_BOTTOM_LEFT,
    LV_ALIGN_OUT_BOTTOM_MID,
    LV_ALIGN_OUT_BOTTOM_RIGHT,
    LV_ALIGN_OUT_LEFT_TOP,
    LV_ALIGN_OUT_LEFT_MID,
    LV_ALIGN_OUT_LEFT_BOTTOM,
    LV_ALIGN_OUT_RIGHT_TOP,
    LV_ALIGN_OUT_RIGHT_MID,
    LV_ALIGN_OUT_RIGHT_BOTTOM,
} lv_align_t;
#define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT
#define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT

 

반응형

관련글