하드웨어

ESP32 LVGL 튜토리얼: 터치스크린 UI 만들기

LVGL로 ESP32용 터치스크린 UI를 만들고, 브라우저에서 시각적으로 디자인하고, 실시간으로 미리보고, 플래시 준비된 C 코드를 내보내세요. 초보자를 위한 친절한 가이드입니다.

ED Ed
esp32 lvgl ui tutorial touchscreen esp-idf arduino
업데이트 2026-05-29
01 /12

개요

이것은 초보자를 위한 ESP32 LVGL 튜토리얼입니다. 끝까지 따라오면 ESP32용 터치스크린 UI를 시각적으로 디자인하는 방법(수백 줄의 LVGL C 코드를 직접 작성하지 않고), 브라우저에서 실시간으로 미리보는 방법, 그리고 ESP-IDF, Arduino, PlatformIO 프로젝트에 바로 쓸 수 있는 플래시 준비 코드를 내보내는 방법을 알게 됩니다.

ESP32 UI 편집기나 명확한 ESP32 LVGL 가이드를 찾고 있었다면, 이 문서는 브라우저 기반 시각적 LVGL 편집기인 PicoPixel을 사용해 전체 작업 흐름을 안내합니다. 설치 불필요, 신용카드 불필요.

02 /12

ESP32 UI에 시각적 편집기를 사용하는 이유

전통적인 방식으로 ESP32용 터치스크린 인터페이스를 만드는 것은 느립니다. 각 위젯을 배치하기 위한 LVGL C 코드를 직접 작성하고, 색상과 크기를 설정하고, 보드에 플래시하고, 화면을 들여다보고, 몇 픽셀을 조정하고, 다시 플래시합니다. 작은 변경 하나에도 하드웨어와 왕복이 필요합니다.

시각적 편집기는 이 과정을 뒤집습니다. LVGL 위젯을 캔버스에 드래그하고, 클릭으로 스타일을 설정하고, 결과를 즉시 확인합니다. 만족스러우면 C 코드를 내보내면 됩니다. 재컴파일하는 대신 디자인에 시간을 쓸 수 있습니다.

NOTE

PicoPixel은 LVGL 8.x를 대상으로 합니다. 내보내는 코드는 독자적인 런타임 없이 표준 LVGL 8.x API 호출을 사용하므로, 이미 LVGL 8.x를 실행 중인 모든 ESP32 프로젝트에 바로 적용할 수 있습니다. (LVGL v9 지원은 계획 중입니다.)

03 /12

필요한 것

따라오기 위해 많은 것이 필요하지 않습니다:

  • 디스플레이가 있는 ESP32 보드, LVGL을 실행할 수 있는 모든 ESP32 변형이 작동합니다(특정 보드에 대해서는 아래를 참고).
  • 선호하는 펌웨어 툴체인: ESP-IDF, Arduino, 또는 PlatformIO, LVGL 8.x가 이미 추가되고 디스플레이 + 터치 드라이버가 작동 중이어야 합니다.
  • 무료 PicoPixel 계정, 이 가이드의 모든 작업은 브라우저에서 이루어집니다.
TIP

아직 보드에서 LVGL이 실행되지 않는다면, 먼저 디스플레이 라이브러리(TFT_eSPI, LovyanGFX, 또는 ESP LCD panel API)를 사용해 화면에 간단한 "hello world" 라벨을 표시해 보세요. LVGL 텍스트가 하나라도 나타나면 진짜 UI를 넣을 준비가 된 것입니다.

04 /12

1단계 - 디스플레이 크기 설정하기

편집기를 열고 새 프로젝트를 시작합니다. 가장 먼저 맞춰야 할 것은 해상도입니다. 디자인이 물리적 화면과 픽셀 단위로 일치하도록 해야 합니다.

디스플레이에 맞는 프리셋을 선택하세요:

  • 320×240, 가장 일반적인 소형 SPI TFT 패널(ST7789, ILI9341).
  • 240×240, GC9A01 같은 원형 디스플레이.
  • 480×320, 480×480, 또는 800×480, 대형 및 정사각형 패널.

처음부터 올바르게 설정하면 디자인한 내용이 디바이스에 그대로 표시됩니다.

05 /12

2단계 - 드래그 앤 드롭으로 디자인하기

이제 재미있는 부분입니다. 팔레트에서 LVGL 위젯을 캔버스에 드래그합니다. 버튼, 레이블, 슬라이더, 호, 스위치, 차트, 드롭다운 등 30가지 이상의 위젯 타입이 있습니다. 배치한 다음, 사이드 패널에서 색상, 폰트, 간격, 둥근 모서리를 시각적으로 스타일링합니다. 이 단계에서는 C 코드가 필요 없습니다.

작업하면서 알아두면 유용한 것들:

  • 여러 화면. 필요한 만큼 화면을 추가하고 화면 간 내비게이션을 연결합니다. 메뉴, 설정 페이지, 대시보드에 매우 유용합니다.
  • 처음부터 터치 지원. 위젯은 탭에 반응하고 컨테이너는 스크롤되므로 정적인 레이아웃이 아닌 실제 터치스크린 상호작용을 디자인할 수 있습니다.
  • 폰트와 이미지도 핵심 기능. 임베디드 디바이스의 텍스트와 그래픽은 LVGL이 저장할 수 있는 형식으로 변환해야 합니다. PicoPixel이 이를 대신 처리합니다. 폰트를 작게 유지하는 방법은 폰트 가이드를, 애니메이션이 있는 멀티 스테이트 위젯을 원한다면 스프라이트 가이드를 참고하세요.
TIP

템플릿에서 시작하는 것이 빈 캔버스보다 빠른 경우가 많습니다. 하나를 열어서 텍스트와 색상을 바꾸면 좋은 출발점이 됩니다.

06 /12

3단계 - 실시간으로 미리보기

하드웨어에 손대기 전에 미리보기를 실행하세요. PicoPixel은 실제 LVGL 엔진을 WebAssembly로 컴파일해 브라우저에서 직접 실행하므로, 보이는 것이 모형이나 대략적인 근사치가 아닌 진짜 LVGL 렌더링입니다.

버튼을 탭하고, 슬라이더를 드래그하고, 스크롤하며 화면 내비게이션을 확인합니다. 여기서 레이아웃 문제를 수정하는 데는 몇 초가 걸리지만, 디바이스에서 수정하려면 플래시 사이클이 필요합니다. 팀원이나 클라이언트에게 피드백을 받기 위해 미리보기 링크를 공유할 수도 있습니다.

07 /12

4단계 - 프로덕션 준비 C 코드 내보내기

디자인이 완성되면 내보냅니다. 깔끔하고 표준적인 LVGL 8.x C 코드가 담긴 picopixel_lvgl_ui.zip을 받게 됩니다:

  • ui.c / ui.h, 진입점으로 ui_init()ui_tick()을 포함합니다.
  • screens.c / screens.h, 화면과 레이아웃.
  • styles, fonts, images, actions, vars, 디자인에서 사용하는 모든 것이 자동 생성됩니다.
  • README.md, 내보내기에 대한 평문 설명(5단계에서 다룹니다).

독자적인 의존성이 없고 추가해야 할 PicoPixel 런타임 라이브러리도 없습니다. 순수한 LVGL이므로 ESP-IDF, Arduino, PlatformIO 어느 것을 사용해도 동일하게 작동합니다.

08 /12

5단계 - ESP32 프로젝트에 UI 추가하기

내보낸 파일을 프로젝트에 압축 해제합니다(대부분 ui/ 폴더 아래에 둡니다). 그런 다음 펌웨어에서 두 가지만 하면 됩니다. LVGL과 디스플레이/터치 드라이버 설정 후 한 번 ui_init()를 호출하고, 메인 루프에서 ui_tick()를 호출합니다.

Arduino 스타일 스케치에서의 모습:

cpp
#include <lvgl.h>
#include "ui/ui.h"          // exported by PicoPixel

void setup() {
  lv_init();
  // ... initialize your display + touch drivers here ...
  ui_init();                // builds the UI you designed
}

void loop() {
  lv_timer_handler();       // let LVGL render and handle input
  ui_tick();                // keep PicoPixel's screens updated
  delay(5);
}

런타임에 화면을 전환하려면(예: 버튼이 눌렸을 때) 원하는 화면과 함께 loadScreen()을 호출합니다. 통합은 이것이 전부입니다. 컴파일하고 플래시하면 ESP32의 UI가 브라우저에서 본 것과 동일하게 표시됩니다.

TIP

AI 어시스턴트에게 연결 작업을 맡기고 싶으신가요? README.md를 포함한 내보낸 zip을 Claude Code, GitHub Copilot, Codex 같은 코딩 어시스턴트에게 전달하세요. 그 파일에는 프로젝트 구조, 공개 API, 위젯에 필요한 lv_conf.h 설정이 설명되어 있어 어시스턴트가 UI를 프로젝트에 통합하고 빌드할 수 있게 도와줍니다.

09 /12

어떤 ESP32 보드가 작동하나요?

PicoPixel이 표준 LVGL C 코드를 내보내므로, LVGL 8.x를 실행할 수 있는 거의 모든 ESP32에서 작동합니다. 변형별 간단한 안내:

  • ESP32-S3, 대부분의 디스플레이 프로젝트에 가장 적합: PSRAM을 갖춘 듀얼 코어로 풍부한 UI에 충분한 여유가 있습니다.
  • ESP32(오리지널) / ESP32-S2, 간단한 인터페이스에 적합합니다. 메모리 예산에 주의하세요.
  • ESP32-C3 / C6, 가벼운 단일 코어 RISC-V 칩으로 소규모 UI에 좋습니다.
  • ESP32-P4, Espressif의 가장 강력한 칩으로 부드럽고 고해상도 인터페이스를 위한 전용 GPU를 갖추고 있습니다. PicoPixel 내보내기는 Waveshare와 Guition의 ESP32-P4 보드에서 테스트되었습니다.

인기 있는 기성품 보드인 LILYGO T-Display-S3, M5Stack Core2/CoreS3, Waveshare와 Sunton 디스플레이 보드, Espressif ESP32-S3-BOX, 그리고 저가형 "Cheap Yellow Display" 모두 작동합니다. ST7789, ILI9341, GC9A01(원형), ILI9488 같은 일반적인 드라이버도 지원됩니다.

10 /12

UI를 메모리 효율적으로 유지하기

임베디드 디스플레이는 스마트폰이나 노트북보다 메모리가 훨씬 적으므로, 약간의 주의를 기울이면 UI를 빠르고 플래시 효율적으로 유지할 수 있습니다:

  • 폰트 크기를 적절히 조정하세요. 각 폰트는 고정된 픽셀 크기로 저장되며, 대형 문자 집합(특히 중국어, 일본어, 한국어)은 금방 용량이 쌓입니다. 폰트 가이드에서 실제로 사용하는 문자만 포함하는 방법을 설명합니다.
  • 디스플레이의 색상 깊이에 맞추세요. 16비트 패널에는 32비트 이미지가 필요하지 않습니다. 올바른 색상 깊이를 선택하면 에셋 크기가 줄어듭니다.
  • 중복 대신 재사용하세요. 위젯을 한 번 만들고 화면과 프로젝트 전반에 걸쳐 재사용합니다.
11 /12

자주 묻는 질문

PicoPixel이 ESP32와 호환되나요?

네. LVGL 8.x를 실행하는 모든 ESP32 변형에서 ESP-IDF, Arduino, PlatformIO와 함께 작동하는 표준 LVGL C 코드를 생성합니다. 내보내기는 ESP32-P4 하드웨어에서도 테스트되었습니다.

어떤 LVGL 버전을 지원하나요?

LVGL 8.x입니다. 내보낸 코드는 LVGL 8.x API를 사용하므로 LVGL 9.x 호출과 혼용하지 마세요. (v9 지원은 계획 중입니다.)

C 코드를 직접 작성해야 하나요?

5단계의 소량의 연결 코드(즉, ui_init()ui_tick() 호출)만 작성하면 됩니다. UI 자체는 시각적으로 디자인되고 자동으로 생성됩니다.

무료인가요?

네. PicoPixel은 개인 및 취미 사용에는 무료이며 신용카드가 필요하지 않습니다. 상업적 사용은 월 $17(연간 $204)부터 시작합니다.

12 /12

다음 단계

이제 아이디어에서 플래시된 UI까지의 전체 과정을 알게 됐습니다. 해상도 설정, 드래그 앤 드롭 디자인, 실시간 미리보기, 내보내기, 통합. 다음으로:

다음 글

계속 읽기.

PicoPixel에서 펫 사용하기 thumbnail
PICOPIXEL

PicoPixel에서 펫 사용하기

펫은 어떤 조건에서든 트리거할 수 있는 여러 모드를 갖춘 완성된 애니메이션 스프라이트입니다. 디렉토리에서 하나를 골라 프로젝트에 추가한 다음, 데이터 가져오기, 과열, 코드 리뷰 등 기기가 하는 모든 일에 반응하도록 연결하세요.

pets · sprites · picopixel
PicoPixel templates, UI kits, full apps 사용 방법 thumbnail
PICOPIXEL

PicoPixel templates, UI kits, full apps 사용 방법

PicoPixel templates, UI kits, examples, sprites, widgets, full app files를 찾고, 열고, 다운로드하고, import하고, customize한 뒤 디바이스용 LVGL C code로 export합니다.

templates · ui-kits · full-apps
LVGL Animated Image 위젯 사용하기 thumbnail
LVGL

LVGL Animated Image 위젯 사용하기

LVGL animated image 위젯의 작동 방식: 같은 크기의 프레임 시퀀스를 업로드하고, 재생 시간과 반복을 설정해 디스플레이에서 프레임 단위 애니메이션을 재생하는 방법을 알아봅니다.

lvgl · animated-image · animimg