简介
在本文中将详细讲解如何在ESP-IDF的环境下使用M5 Stack Tab5 的BSP来使用LVGL点亮屏幕。 在M5 Stack的官网文档中。一共有三种开发方式、第一种则是使用UiFlow2、第二种则是Arduino、第三种则是使用ESP-IDF的方式进行开发。 第一种的开发方式我们在前文中已经有介绍了。好处是开发的方式比较快,但是对某些功能的开发的话完全用图形化编程的话有点笨拙。 对于Arduino的开发方式。具有很多库,比较适合用户。由于我长期都是使用的ESP-IDF已经习惯了。所以本文将使用ESP-IDF集合LVGL环境来点亮屏幕。
,
M5 STACK TAB5 IDF-BSP
M5 Tab5 提供了一个ESP-IDF的BSP,是以乐鑫的组件管理器的方式进行维护的。在创建IDF的项目之后可以通过下述代码添加对BSP的引用。这样就不需要我们额外的去开发开发板载上的硬件传感器了。
idf.py add-dependency "espressif/m5stack_tab5^1.0.0"

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

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

确保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配置的模版。

修改项目根目录的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)编译烧录后效果如下
附件
我要赚赏金
