1. LVGL이란?
다양한 MCU와 디스플레이에 GUI 개발을 돕는 대형 라이브러리이다. 임베디드 개발자를 위해 다양한 MCU를 지원하도록 호환성을 갖추고 있다.
디스플레이의 큰 목적은 해당 디바이스 제품에 직접적인 사용자 UI를 제공하여 디바이스에서 처리되는 데이터를 시각화하거나, 직접적인 컨트롤을 수행하기 위함이다. (개인적 생각)
주요특징
- 크로스 플랫폼 지원:
- LVGL은 다양한 마이크로컨트롤러 및 운영체제에서 동작합니다. 이는 Arduino, ESP32, STM32, Raspberry Pi 등의 하드웨어와 함께 사용될 수 있습니다.
- 유연한 아키텍처:
- LVGL은 모듈식 구조로 설계되어 있어, 필요한 기능만 선택적으로 사용하고 불필요한 코드를 제거할 수 있습니다. 이를 통해 메모리와 성능 최적화를 할 수 있습니다.
- 다양한 위젯 지원:
- 버튼, 슬라이더, 차트, 텍스트, 이미지 등 다양한 GUI 위젯을 기본적으로 제공하여, 복잡한 UI도 쉽게 구현할 수 있습니다.
- 고성능:
- 하드웨어 가속 지원 및 효율적인 메모리 관리로 인해, 저사양의 임베디드 시스템에서도 부드럽고 빠른 그래픽 성능을 제공합니다.
- 터치스크린 지원:
- 멀티 터치 및 제스처 인식 기능을 포함하여, 다양한 터치스크린 디바이스와의 호환성을 갖추고 있습니다.
2. LVGL 구현을 위한 간단한 이해
- LVGL 라이브러리는 다양한 MCU에서 지원되도록 설계되어 있다.
- 디스플레이 컨트롤러 (IC칩)이 다양한 형태로 존재하는 데 LVGL은 해당 디스플레이 컨트롤러에 알맞도록 설정할 수 있을 것이다.
- LVGL을 MCU에 빌드하여 디스플레이 컨트롤러(IC칩)와 연결되고 제어 하여 화면 출력을 구현할 수 있다.
다음은 디스플레이 컨트롤러 종류에 대한 간략한 설명이다.
- ILI9341
- 설명: ILI9341은 240x320 해상도의 TFT LCD 컨트롤러로, 262K 색상을 지원합니다.
- 특징: SPI, 8-bit, 16-bit 인터페이스를 지원하며, 터치스크린 인터페이스가 포함될 수 있습니다.
- 사용 사례: Arduino 및 기타 마이크로컨트롤러 프로젝트에서 많이 사용됩니다.
- ST7735
- 설명: ST7735는 128x160 해상도의 TFT LCD 컨트롤러로, 65K 또는 262K 색상을 지원합니다.
- 특징: SPI 인터페이스를 지원하며, 소형 디스플레이 모듈에 주로 사용됩니다.
- 사용 사례: 소형 휴대용 기기, 웨어러블 디바이스 및 임베디드 시스템에서 많이 사용됩니다.
- SSD1963
- 설명: SSD1963은 최대 800x480 해상도의 TFT LCD 컨트롤러입니다.
- 특징: 8-bit, 16-bit, 18-bit 인터페이스를 지원하며, PWM 백라이트 제어와 터치 패널 인터페이스를 포함합니다.
- 사용 사례: 대형 디스플레이 모듈, 임베디드 시스템 및 산업용 디스플레이 애플리케이션에서 많이 사용됩니다.
- SSD1306
- 설명: SSD1306은 128x64 해상도의 OLED 디스플레이 컨트롤러입니다.
- 특징: I2C, SPI 인터페이스를 지원하며, 고명암비와 저전력 소비가 특징입니다.
- 사용 사례: 소형 디스플레이, 웨어러블 디바이스, Arduino 프로젝트에서 많이 사용됩니다.
- RA8875
- 설명: RA8875는 최대 800x480 해상도의 TFT LCD 컨트롤러입니다.
- 특징: SPI, 8-bit, 16-bit 인터페이스를 지원하며, 터치스크린 인터페이스와 그래픽 가속 기능을 포함합니다.
- 사용 사례: 고급 임베디드 시스템, 산업용 제어 패널, 자동차 디스플레이에서 많이 사용됩니다.
- 디스플레이 모듈 자체에 MCU가 탑재되어 있는 경우와 탑재되지 않은 형태에 따라서 개발형태가 달라지게 된다.
- 디스플레이 모듈 자체에 MCU가 탑재되어 있다면, USB를 이용하여 바로 LVGL을 사용한 GUI를 빌드하여 사용할 수 있다.
- 디스플레이 모듈에 MCU가 탑재 되어 있지 않은 형태라면 개발보드를 사용하여 디스플레이(컨트롤러 IC)와 배선하여 LVGL 자체를 개발보드에 빌드하여 개발해야한다.
3. 메모리 사용량에 관한 문제
생각보다 LVGL 라이브러리 에서는 MCU의 메모리가 많이 요구되지 않는다.
현재 사용중인 MCU(ESP32-S3-WROOM)는 384kb ROM과 512kB SRAM이 탑재되어 있으므로 최소 요구사항 보다 훨씬 충족한다.
놀랍게도 이런 근사한 GUI가 50kb의 RAM과 100kb의 ROM 이 사용되었다고 한다. 역시 임베디드를 위한 LVGL은 최고의 라이브러리라고 생각된다.
'Embedded System > 소프트웨어 (C,C++)' 카테고리의 다른 글
[모듈 제작] 전류 CT 센서 인터페이스 모듈 - RMS 취득 펌웨어 (0) | 2024.08.21 |
---|---|
[GUI & 터치스크린] LVGL 구현 관련 정리 (0) | 2024.07.31 |
[C/C++] 고정된 너비 정수 (fixed-width integers) 자료형 (0) | 2024.07.09 |
[F/W] 펌웨어 구현 시 메모리 관리 (0) | 2024.06.25 |
[C++] 참조자 (Reference)/ 참조에 의한 호출(Call-by-reference) (0) | 2024.06.21 |