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