Esp32s3(立创实战派)移植LVGL
Esp32s3(立创实战派)移植LVGL
移植:
使用软件EEZ studio
创建工程选择带EEZ Flow的,可以使用该软件更便捷的功能

根据屏幕像素调整画布为320*240

复制ui文件至工程
将生成的ui文件夹复制到main文件夹同级目录(ui文件夹在工程文件src中)
工程结构:

修改声明头文件路径
首先将ui文件夹中的所有声明头文件由:

改成

因为组件的路径已经声明,lvgl作为组件添加进工程,所以在目录中可以直接索引。
main.c文件
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"
#include "freertos/task.h"
#include "IOadd_PCA9557.h"// IO扩展芯片
#include "BSP_IIC.h"
#include "LCD.h"
#include "esp_log.h"
#include "lvgl_lcd_port.h" // 自己编写的lvgl液晶屏接口
#include "ui.h"//EEZ生成的UI文件
void app_main(void)
{
i2c_master_init(); // I2C初始化
pca9557_init(); // IO扩展芯片初始化
bsp_lvgl_start(); // 初始化液晶屏lvgl接口(初始化lcd+touch,添加lvgl接口)
//锁定LVGL接口以防止在UI初始化过程中发生并发访问。
//初始化UI后,解锁LVGL接口。
lvgl_port_lock(0); // 锁定lvgl接口
ui_init(); // 初始化UI
lvgl_port_unlock(); // 解锁lvgl接口
//无限循环,用于持续更新UI
while (1)
{
lvgl_port_lock(0); // 锁定lvgl接口,以保护UI更新过程。
ui_tick(); // UI刷新
lvgl_port_unlock(); // 解锁lvgl接口以允许其他任务访问。
vTaskDelay(pdMS_TO_TICKS(1)); // 函数延迟1毫秒,以避免过度占用CPU资源。
}
}
main.c添加:
声明ui头文件#include "ui.h"//EEZ生成的UI文件
初始化ui
while循环刷新ui:ui_tick(); // UI刷新
安全机制:
lvgl_port_lock(0); // 锁定lvgl接口,以保护UI更新过程。
ui_tick(); // UI刷新
lvgl_port_unlock(); // 解锁lvgl接口以允许其他任务访问。
vTaskDelay(pdMS_TO_TICKS(1)); // 函数延迟1毫秒,以避免过度占用CPU资源。
修改CMakeLists.txt,
修改CMakeLists.txt,添加ui文件夹至工程编译路径
set(UI_DIR ../ui)
file(GLOB_RECURSE UI_SRCS ${UI_DIR}/*.c ${UI_DIR}/*.cpp)
idf_component_register(SRCS "lvgl_lcd_port.c"
"BSP_IIC.c"
"main.c"
"IOadd_PCA9557.c"
"LCD.c"
"lvgl_lcd_port.c"
${UI_SRCS}
INCLUDE_DIRS "." ${UI_DIR})
逻辑:
1、set(UI_DIR ../ui):
设置一个变量
UI_DIR,其值为../ui,表示UI源文件的目录在main.c的上层文件夹的ui目录。2、file(GLOB_RECURSE UI_SRCS ${UI_DIR}/.c ${UI_DIR}/.cpp) :
使用
file(GLOB_RECURSE ...)命令递归地搜索${UI_DIR}目录下的所有.c和.cpp文件,并将这些文件的路径存储在UI_SRCS变量中。3、idf_component_register(SRCS "lvgl_lcd_port.c" ...... ${UI_SRCS}:
命令注册一个组件,该组件包含源文件
lvgl_lcd_port.c、......以及UI_SRCS中的所有文件(../ui/*c,../ui/*cpp)4、INCLUDE_DIRS "." ${UI_DIR}):
指定了该组件的头文件目录:当前目录(main.c路径下)
.和${UI_DIR}(../ui路径下)
在EEZ我添加了图片和键盘,移植成功后烧录效果:

基于立创改,适用立创例程:
#include <stdio.h>
#include "esp32_s3_szp.h"
#include "logo_en_240x240_lcd.h"
#include "yingwu.h"
#include "ui.h"
extern "C" void app_main(void)
{
bsp_i2c_init(); // I2C初始化
pca9557_init(); // IO扩展芯片初始化
bsp_lvgl_start(); // 初始化液晶屏lvgl接口
//锁定LVGL接口以防止在UI初始化过程中发生并发访问。
//初始化UI后,解锁LVGL接口。
lvgl_port_lock(0); // 锁定lvgl接口
ui_init(); // 初始化UI
lvgl_port_unlock(); // 解锁lvgl接口
//无限循环,用于持续更新UI
while (1)
{
lvgl_port_lock(0); // 锁定lvgl接口,以保护UI更新过程。
ui_tick(); // UI刷新
lvgl_port_unlock(); // 解锁lvgl接口以允许其他任务访问。
vTaskDelay(pdMS_TO_TICKS(1)); // 函数延迟1毫秒,以避免过度占用CPU资源。
}
}
# Search for src files
set(UI_DIR ./ui)
file(GLOB_RECURSE UI_SRCS ${UI_DIR}/*.c ${UI_DIR}/*.cpp)
idf_component_register(SRCS "esp32_s3_szp.c" "main.cpp" ${UI_SRCS}
INCLUDE_DIRS "." ${UI_DIR})
add_compile_definitions (LV_LVGL_H_INCLUDE_SIMPLE)
- 设置一个变量
UI_DIR,其值为./ui,表示UI源文件的目录。 - 使用
file(GLOB_RECURSE ...)命令递归地搜索${UI_DIR}目录下的所有.c和.cpp文件,并将这些文件的路径存储在UI_SRCS变量中。 - 使用
idf_component_register(...)命令注册一个组件,该组件包含源文件esp32_s3_szp.c、main.cpp以及UI_SRCS中的所有文件。同时,指定了该组件的头文件目录为当前目录.和${UI_DIR}。 - 使用
add_compile_definitions(...)命令添加一个编译定义LV_LVGL_H_INCLUDE_SIMPLE,这可能在编译时用于控制某些编译选项或宏定义。
直观写成:
# Search for src files
set(UI_DIR ./ui)
file(GLOB_RECURSE UI_SRCS ./ui/*.c ./ui/*.cpp)
idf_component_register(SRCS "esp32_s3_szp.c" "main.cpp" ./ui/*.c ./ui/*.cpp
INCLUDE_DIRS "." ./ui)
add_compile_definitions (LV_LVGL_H_INCLUDE_SIMPLE)
设置ui路径下的*.c文件添加到工程执行,头文件路径为/ui
目的是将ui文件夹下的文件添加进工程编译执行
使用
图片:
在侧边栏找到

点击后在顶栏找到加号添加图片(jpg,png)
图片命名遵守变量规则,不能以数字开头

色彩格式选择真色彩TRUE COLORE(真色彩),TRUE COLORE ALPAH(透明背景)
界面切换

按键设置:
添加触发事件

Handler type必须是Flow
添加Action(LVGL)

选中编辑Action

page2是我的页面二,

需在eez-flow.cpp和eez-flow.h添加
#define LV_LVGL_H_INCLUDE_SIMPLE
缘由:

避免头文件报错
变量:
新建变量:

- Global:全局变量,可以被用户使用
- Local:本地变量,作用范围仅限每个页,无法被用户使用
- Structs:全局结构体
- Enums:全局枚举

分别为设置变量名,变量类型,初始值
变量显示:使用widgets下的Label

Text设置:第一个写全变量名,第二个框选择显示变量

用户控件Action选择设置变量

绑定按钮与变量设置

Esp32s3(立创实战派)移植LVGL的更多相关文章
- 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
深度解析SDN——利益.战略.技术.实践(实战派专家力作,业内众多专家推荐) 张卫峰 编 ISBN 978-7-121-21821-7 2013年11月出版 定价:59.00元 232页 16开 ...
- Arduino+ESP32 之 驱动GC9A01圆形LCD(二),移植LVGL,跑示例程序,显示自制图片
在前文Arduino+ESP32 之 驱动GC9A01圆形LCD(一), 我们已经移植好了arduino GFX库, 该库的示例程序内,还有LVGL的示例程序哦. arduino环境下移植lvgl是很 ...
- stm32h750移植lvgl
之前没做过ui,只用过lcd画几条线写点字,如果按键.菜单什么的全用线画也太麻烦了,所以需要一个ui库. 听说lvgl用的人很多,就打算裸机移植一下用用.本文移植的lvgl版本是lvgl6.2,也移植 ...
- 卷积神经网络实战-----0001(移植卷积神经网络c++ to python or java)
1. https://github.com/174high/simple_cnn 自己fork的 2. https://github.com/can1357/simple_cnn 最初始的 3. ...
- 实战派 | Java项目中玩转Redis6.0客户端缓存!
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...
- 龙中华著《Spring Boot实战派》读书笔记之入门篇
第一章 进入Spring Boot的世界 理念:默认大于配置.有很多集成好的方案,开箱即用.针对痛点:环境配置耗时. 1.1 Spring Boot 的特色: 使用简单 注解方式实现类的定义和功能开发 ...
- BI实战派:医疗BI项目落地方案
任何BI项目面临的两大难题是项目价值和基础数据,BI项目应该给企业带来管理优化.业绩增长.医院面临的两大难题,一:绩效管理(奖金分配):二:医患关系:在医院开始自负盈亏时日常基本运营管理显得非常重要. ...
- 深度学习实战-----0001(移植反向传播Python to c++)
1. https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ 老外教程 2. https://github. ...
- SpringBoot实战派读书笔记---响应式编程
1.什么是WebFlux? WebFlux不需要Servlet API,在完全异步且无阻塞,并通过Reactor项目实现了Reactor Streams规范. WebFlux可以在资源有限的情况下提高 ...
- 龙中华著《Spring Boot实战派》读书笔记之基础篇
第四章 Spring Boot 基础 4.1 了解Spring Boot 项目结构 src/main/java //入口类,等 src/main/resources //静态文件和配置文件 src/t ...
随机推荐
- 中电金信:GienTech动态|中标、入选、参会...近期精彩呈现!
中电金信参编业内首个银行核心系统分级度量标准 2024年6月6日,由中国信息通信研究院云计算与大数据研究所主办的"应用现代化赋能银行核心系统升级"交流会议在京召开.会议发布了业内首 ...
- 【Go进阶】手写 Go websocket 库(一)|WebSocket 通信协议
前言 这里是白泽,我将利用一个系列,为你分享如何基于 websocket 协议的 rfc 文档,编写一个库的过程.并从0开始写一遍 gorilla/websocket 这个库,从中你可以学习到 web ...
- 2024年1月Java项目开发指南17:自动接口文档配置
Knife4j 文档 :https://doc.xiaominfo.com/ 有能力的建议自己去看文档配置,本文仅做参考,因为官方文档会更新,本文不会,以后说不定本文就过时了. ok,我们继续.虽然本 ...
- Mac安装CMake
官网下载CMake: 传送门:https://cmake.org/download/ image.png 安装完打开: image.png 选择Tools-->How to instal ...
- Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控
一.前言 用ffmpeg做硬解码开发,参考自带的示例hw_decode.c即可,里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码,也就是无需区分用的何种显卡,操作系统自动 ...
- Qt开源作品9-扁平化样式flatui
一.前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产生的质感色彩反 ...
- 一篇复杂的研究🤔A Comprehensive Study of 😨Jailbreak Attack versus Defense for Large Language Models
本认为,这篇文章的亮点在于对攻击和防御技术的多维评估,另外通过比较不同模型(如Vicuna.LLama和GPT-3.5 Turbo)对攻击和防御策略的反应,文章提供了对模型间差异的深入理解. 对现有的 ...
- ThreeJs-11精通着色器编程(重难点)
着色器语言编程比较重要,后面的几个章节都会围绕这个来做特效 一.初识着色器语言 首先什么叫做着色器,他是一种语言,首先需要设置为着色器材质,然后在材质里面书写一些语言,可以告诉他顶点,然后去自定义一些 ...
- [Git][基本原理与命令]
引言 Git是工作中最常用的版本控制工具,本文中将介绍其常用的命令. 根据作用的不同,可以分为基本命令.撤销命令.合并命令与远程仓库命令,下面将依次介绍这些命令. 基本原理 git 中提供了底层api ...
- 微服务实战系列(六)-网关springcloud zuul-copy
1. 场景描述 今天接着介绍springcloud,今天介绍下springcloud的路由网关-Zuul,外围系统或者用户通过网关访问服务,网关通过注册中心找到对应提供服务的客户端,网关也需要到注册中 ...