lvgl9 esp32
时间: 2025-01-07 18:56:52 浏览: 2
### 如何在 ESP32 上使用 LVGL 9
#### 创建新项目并初始化
为了在 ESP32 上成功部署 LVGL 9,建议从头创建一个新的工程而不是修改旧版本遗留下来的文件。这可以确保所有依赖项都得到正确处理。
```bash
cd ~/esp/esp-idf/
idf.py create-project lvgl_project
cd lvgl_project
```
#### 添加 LVGL 组件
通过 CMakeLists.txt 或者 platformio.ini 来引入最新版的 LVGL 库作为组件之一。对于 IDF 构建系统而言,在 `main/CMakeLists.txt` 中添加如下内容:
```cmake
set(LVGL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/components/lvgl)
add_subdirectory(${LVGL_DIR} _build/lvgl)
target_link_libraries(${PROJECT_NAME}
PRIVATE
lvgl::lvgl
)
```
同时还需要下载对应版本的 LVGL 源码放置于 components 文件夹内[^1]。
#### 配置显示与输入设备支持
针对特定硬件平台(如ILI9341),需调整 Kconfig 和源代码中的参数以匹配实际使用的显示屏和触控面板特性。例如,当采用 SPI 接口连接时,应该指定正确的主机编号以及引脚映射关系。
```c
// main/display.c
#include "driver/spi_master.h"
...
static const spi_device_interface_config_t lcd_spi_cfg = {
.command_bits = 8,
.address_bits = 0,
.dummy_bits = 0,
.mode = 0, // SPI mode 0
.duty_cycle_pos = 128, // 50% duty cycle
.cs_ena_pretrans = 5, // Pre-command delay (in microseconds)
.cs_ena_posttrans = 5, // Post-command delay (in microseconds)
...
};
```
另外还需注意更新 `menuconfig` 菜单选项里的相关设置以便反映这些改动[^2]。
#### 编写简单的图形界面应用程序
最后一步就是编写一些基本的应用逻辑来验证整个系统的功能正常与否。下面给出了一段展示如何绘制矩形框和平移文本标签的小例子。
```cpp
void app_main(void){
/* Initialize the LVGL library */
lv_init();
/* Initialize your display and input devices here */
while(1) {
/* Periodically call the lv_task_handler() to process events */
lv_task_handler();
vTaskDelay(pdMS_TO_TICKS(1));
static uint32_t cnt = 0;
char buf[32];
sprintf(buf,"Counter:%lu",cnt++);
lv_label_set_text(label,buf);
lv_obj_align(label,NULL,LV_ALIGN_CENTER,0,-40);
}
}
/* Create a demo screen with some objects on it */
static void create_demo_screen(){
/* Create a blue background color */
lv_obj_t *scr = lv_disp_get_scr_act(NULL);
lv_obj_set_style_bg_color(scr,lv_color_hex(0x007AFF),0);
/* Add a rectangle object */
lv_obj_t *rect = lv_rect_create(scr);
lv_obj_set_size(rect,100,50);
lv_obj_center(rect);
/* Place a label at center of screen */
label = lv_label_create(scr);
lv_label_set_text(label,"Hello World!");
lv_obj_align(label, NULL , LV_ALIGN_CENTER, 0 ,-40 );
}
```
阅读全文