ESP32 LVGL btn事件、label赋值、ddlist选项读取

我这里ESP32 LVGL使用Gui Guider图形化工具进行代码生产

1、 btn

需要在Gui Guider中启用事件,在btn上点击右键,选择事件添加

选中custom code(自定义代码),同时在通用中选中自定义

编辑,events_init.c文件中就会自动添加事件

static void main_screen_btn_1_event_handler (lv_event_t *e)
{
	lv_event_code_t code = lv_event_get_code(e);

	switch (code) {
	case LV_EVENT_CLICKED:
	{
		
		break;
	}
	default:
		break;
	}
}

 通过界面进行代码配置,点击按钮设置label的内容

2、label 

使用下面代码就可以设置label 的text为1

lv_label_set_text(guider_ui.main_screen_label_1, "1");

3、 ddlist

添加一个ddlist,增加3个选项

 需要在Gui Guider中启用事件,在ddlist上点击右键,选择事件添加

依次添加index:0,设置label_1的文本为1, index:1,设置label_1的文本为2,index:2,设置label_1的文本为3后运行

默认

选择3

生成代码如下

static void main_screen_ddlist_1_event_handler (lv_event_t *e)
{
	lv_event_code_t code = lv_event_get_code(e);

	switch (code) {
	case LV_EVENT_CLICKED:
	{
		uint16_t id = lv_dropdown_get_selected(guider_ui.main_screen_ddlist_1);
		switch(id) {
		case 0:
		{
			lv_obj_set_style_text_font(guider_ui.main_screen_label_1, &lv_font_montserratMedium_12, 0);
			lv_label_set_text(guider_ui.main_screen_label_1, "1");
			break;
		}
		case 1:
		{
			lv_obj_set_style_text_font(guider_ui.main_screen_label_1, &lv_font_montserratMedium_12, 0);
			lv_label_set_text(guider_ui.main_screen_label_1, "2");
			break;
		}
		case 2:
		{
			lv_obj_set_style_text_font(guider_ui.main_screen_label_1, &lv_font_montserratMedium_12, 0);
			lv_label_set_text(guider_ui.main_screen_label_1, "3");
			break;
		}
		default:
			break;
		}
		break;
	}
	default:
		break;
	}
}

通过界面进行代码配置

int number = 1234;
char buffer[20]; // 确保有足够的空间存储转换后的字符串
snprintf(buffer, sizeof(buffer), "%d", number);
// 现在你可以使用buffer中的字符串来显示数字
lv_label_set_text(guider_ui.main_screen_label_1, buffer);

4、roller

roller非常适合作为时间选择

// 获取选择项的索引
int selected_index = lv_roller_get_selected(roller);
    
// 获取选择项的字符串
char selected_str[32];
lv_roller_get_selected_str(roller, selected_str, sizeof(selected_str));

放到事件里

static void roller_event_cb(lv_obj_t *roller, lv_event_t event) {
    if (event == LV_EVENT_VALUE_CHANGED) {
        char buf[32];
        lv_roller_get_selected_str(roller, buf, sizeof(buf));
        ESP_LOGI("LVGL", "选中的选项: %s", buf);
    }
}

通过界面进行代码配置,这里写一个全局变量int data_number=10;其他函数里也可用

 生成代码包含全局变量

代码内容

int data_number=10;

static void main_screen_roller_1_event_handler (lv_event_t *e)
{
	lv_event_code_t code = lv_event_get_code(e);

	switch (code) {
	case LV_EVENT_CLICKED:
	{
		char buffer[32];
	data_number = 20;
	lv_roller_get_selected_str(guider_ui.main_screen_roller_1, buffer, sizeof(buffer));
	// 现在你可以使用buffer中的字符串来显示数字
	lv_label_set_text(guider_ui.main_screen_label_1, buffer);
		break;
	}
	default:
		break;
	}
}

效果

### ESP32LVGL框架的结合使用 ESP32 是一款功能强大的微控制器,支持 Wi-Fi 和蓝牙通信。LVGL(Light and Versatile Graphics Library)是一个轻量级的图形库,专为嵌入式系统设计,能够提供丰富的用户界面功能[^5]。将 ESP32LVGL 结合使用,可以开发出具有复杂图形界面的应用程序。 #### 硬件与软件准备 在开始之前,需要确保以下硬件和软件环境已经准备好: 1. **硬件**:ESP32 开发板、TFT 显示屏(如 ILI9341 或 ST7789)、触摸屏(可选)。 2. **软件**:安装最新版本的 ESP-IDF(Espressif IoT Development Framework),这是 ESP32 的官方开发框架。同时需要配置 LVGL 库以适配 ESP32。 #### 配置步骤 以下是配置 ESP32LVGL 的基本步骤: 1. **安装 ESP-IDF**: - 下载并安装 [ESP-IDF](https://github.com/espressif/esp-idf)。 - 配置工具链和环境变量。 2. **集成 LVGL**: - 下载 [LVGL](https://github.com/lvgl/lvgl) 源代码。 - 将 LVGL 文件夹复制到 ESP-IDF 项目目录中。 3. **初始化显示驱动**: - 根据 TFT 显示屏的类型,选择合适的驱动程序(如 ILI9341 或 ST7789)。 - 在 ESP-IDF 中初始化显示驱动,并配置 SPI 或 I2C 接口。 4. **初始化触摸屏(可选)**: - 如果使用触摸屏,需要配置相应的驱动程序(如 XPT2046)。 - 初始化触摸屏并与 LVGL 集成。 #### 示例代码 以下是一个简单的示例代码,展示如何在 ESP32 上初始化 LVGL 并创建一个按钮: ```c #include "lvgl/lvgl.h" #include "driver/gpio.h" void lvgl_init() { // 初始化 LVGL lv_init(); // 创建一个屏幕缓冲区 static lv_disp_buf_t disp_buf; static lv_color_t buf[LV_HOR_RES_MAX * LV_VER_RES_MAX]; lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX * LV_VER_RES_MAX); // 初始化显示器 lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); disp_drv.flush_cb = my_display_flush; // 替换为实际的显示刷新函数 disp_drv.buffer = &disp_buf; lv_disp_drv_register(&disp_drv); // 初始化输入设备(可选) lv_indev_drv_t indev_drv; lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read_cb = my_touch_read; // 替换为实际的触摸读取函数 lv_indev_drv_register(&indev_drv); } void create_button() { // 创建一个按钮 lv_obj_t *btn = lv_btn_create(lv_scr_act()); lv_obj_set_size(btn, 100, 50); lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0); // 添加标签到按钮 lv_obj_t *label = lv_label_create(btn); lv_label_set_text(label, "Hello"); } void app_main() { lvgl_init(); create_button(); } ``` #### 常见问题与解决方案 1. **显示异常**:检查显示屏的硬件连接是否正确,确保 SPI 或 I2C 配置无误。 2. **触摸屏不响应**:确认触摸屏驱动程序是否正确初始化,并检查校准参数。 3. **内存不足**:优化 LVGL 的配置文件 `lv_conf.h`,减少不必要的功能以节省内存。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开花落的个人博客

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值