这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【M5STACKTAB5W/OBATTERY】【六】在IDF的环境下运行LVGL

共1条 1/1 1 跳转至

【M5STACKTAB5W/OBATTERY】【六】在IDF的环境下运行LVGL

工程师
2026-01-30 16:09:57     打赏

简介

在本文中将详细讲解如何在ESP-IDF的环境下使用M5 Stack Tab5 的BSP来使用LVGL点亮屏幕。 在M5 Stack的官网文档中。一共有三种开发方式、第一种则是使用UiFlow2、第二种则是Arduino、第三种则是使用ESP-IDF的方式进行开发。  第一种的开发方式我们在前文中已经有介绍了。好处是开发的方式比较快,但是对某些功能的开发的话完全用图形化编程的话有点笨拙。 对于Arduino的开发方式。具有很多库,比较适合用户。由于我长期都是使用的ESP-IDF已经习惯了。所以本文将使用ESP-IDF集合LVGL环境来点亮屏幕。

54e7dee3ebce675cb5032ff9c1f6a7d0.jpg


M5 STACK TAB5 IDF-BSP

M5 Tab5 提供了一个ESP-IDF的BSP,是以乐鑫的组件管理器的方式进行维护的。在创建IDF的项目之后可以通过下述代码添加对BSP的引用。这样就不需要我们额外的去开发开发板载上的硬件传感器了。

idf.py add-dependency "espressif/m5stack_tab5^1.0.0"

image.png

在编译完项目或者进入Menuconfig的时候IDF的组件管理器会自动的下载更新后的依赖包。

image.png

可以从上述的文件列表中看到上述已经涵盖了很多的驱动了。具体的支持情况则是如下所示。

image.png

确保IDF的组件管理器中的组件如下所示

## IDF Component Manager Manifest File
dependencies:
## Required IDF version
idf:
version: '>=4.1.0'
espressif/m5stack_tab5: ^1.0.0
espressif/esp_io_expander: '*'

然后使用下述代码,并且编译和烧录。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
// 引入 BSP 头文件
#include "bsp/m5stack_tab5.h"
// 引入 LVGL (BSP 通常会自动包含 LVGL)
#include "lvgl.h"

static const char *TAG = "M5_TAB5_EXAMPLE";

void app_main(void)
{
    ESP_LOGI(TAG, "Starting M5Stack Tab5 initialization...");

    /* 
     *1. 初始化 I2C 总线
     */
    bsp_i2c_init();

    /* 2. 初始化显示屏和 LVGL
     * 这会自动配置 SPI/8080 接口并启动 LVGL 定时器任务
     */
    bsp_display_start();

    /* 3. 使用 LVGL 绘制内容 (线程安全方式) */
    bsp_display_lock(0); // 获取显示锁

    // 获取当前活动屏幕
    lv_obj_t *scr = lv_scr_act();

    // 设置背景为白色 (确保你能看出来屏幕亮了)
    lv_obj_set_style_bg_color(scr, lv_color_white(), LV_PART_MAIN);

    // 创建一个标签
    lv_obj_t *label = lv_label_create(scr);
    lv_label_set_text(label, "Hello EEPW ! Hello M5Stack Tab5!");
    lv_obj_set_style_text_color(label, lv_color_black(), LV_PART_MAIN);
    lv_obj_set_style_text_font(label, &lv_font_montserrat_14, LV_PART_MAIN); // 字体大小
    lv_obj_center(label);                                                    // 居中显示

    bsp_display_unlock(); // 释放显示锁

    //开启屏幕背光
    bsp_display_backlight_on();

    ESP_LOGI(TAG, "Display initialized and backlight on.");
}

需要注意的是,上述的字体使用的是14的大小,如果想要修改字体的话,局限于这个项目本身没有LVGL.conf 的文件,需要从组件管理器中拷贝一个LVGL配置的模版。

image.png

修改项目根目录的CmakeList 如下所示

# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
# "Trim" the build. Include the minimal set of components, main, and anything it depends on.
idf_build_set_property(MINIMAL_BUILD ON)
project(cam_screen)

# 添加项目根目录到include路径,以便LVGL可以找到lv_conf.h
include_directories(".")

# 为LVGL组件添加include路径
idf_component_get_property(lvgl_lib lvgl__lvgl COMPONENT_LIB)
target_include_directories(${lvgl_lib} PUBLIC ".")

修改src下的如下所示

idf_component_register(SRCS "main.c"
INCLUDE_DIRS "."
PRIV_REQUIRES spi_flash esp_timer unity m5stack_tab5 esp_driver_ppa)

# 使用自定义的 lv_conf.h
target_compile_definitions(${COMPONENT_TARGET} PUBLIC LV_CONF_INCLUDE_SIMPLE)


编译烧录后效果如下fbb7a2a87a8d7b8c0b47cf573d193719.jpg


附件

cam_screen.zip




关键词: LVGL          M5STACKTAB5W     ESP-ID    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]