当前位置: 首页 > news >正文

LVGL + ESP-Brookesia 在Windows下的编译和运行

LVGL + ESP-Brookesia 在Windows下的编译和运行

1. 项目介绍

本项目是基于 LVGL(轻量级多功能图形库)和 ESP-Brookesia 的嵌入式模拟桌面应用开发框架,专为嵌入式设备构建丰富的图形界面而设计。通过在Windows环境下模拟嵌入式设备的图形界面,可以快速开发和测试嵌入式UI应用,无需实际硬件设备。

项目源码:https://gitcode.com/aiprtem_lvgl/lv_port_window.git

1.1 主要特性

  • 基于LVGL图形库,提供丰富的UI组件和动画效果
  • 集成ESP-Brookesia框架,支持app式的应用管理方式
  • 使用SDL2进行显示和输入设备模拟
  • 支持多种开发环境:VSCode、ESP-IDF、Arduino
  • 提供多种示例应用,包括简单控件演示和复杂应用界面
  • 兼容Squareline Studio导出的UI设计代码

2. 环境搭建

在Windows系统下编译和运行LVGL + ESP-Brookesia项目,有两种方式:手动安装所需工具,或使用预配置的winenv开发环境。

2.1 手动安装编译环境

如果你希望手动安装所需工具,需要以下组件:

  1. CMake (版本 3.12.4 或更高)

    • 下载地址:https://cmake.org/download/
    • 安装时选择将CMake添加到系统PATH
  2. MinGW-w64 GCC (支持C11和C++17标准)

    • 下载地址:https://winlibs.com/
    • 建议选择带有POSIX线程的版本
    • 安装后将bin目录添加到系统PATH
  3. GNU Make

    • 下载地址:https://ftp.gnu.org/gnu/make/
    • 选择与MinGW-w64版本匹配的版本
    • 安装后将bin目录添加到系统PATH
  4. SDL2库

    • 下载地址:https://github.com/libsdl-org/SDL/releases
    • 选择MinGW开发库版本(SDL2-devel-x.x.x-mingw.zip)
    • 解压后将include和lib目录复制到MinGW安装目录下

2.2 使用winenv开发环境(推荐)

为了简化环境配置过程,推荐使用预配置的winenv开发环境:

  1. 下载winenv

    git clone https://gitcode.com/win32grp/winenv.git
    
  2. 安装环境

    进入winenv/scripts目录,运行winenvinstall.bat脚本。该脚本会自动解压以下工具:

    • CMake 4.1.0 RC3
    • GNU Make 3.81
    • MinGW-w64 GCC 8.1.0
    • SDL2 2.32.4
  3. 启动开发环境

    双击winenv根目录下的shell.bat脚本,将打开一个配置好环境变量的命令行终端。在这个终端中,你可以直接使用cmake、make、gcc等命令。

    winenv开发环境的使用方法请参考:搭建Windows系统CMake构建环境.md

3. 源码获取

  1. 克隆仓库及其子模块

    git clone --recursive https://gitcode.com/aiprtem_lvgl/lv_port_window.git
    cd lv_port_window
    

    如果你已经克隆了仓库但没有包含子模块,可以使用以下命令获取子模块:

    git submodule update --init --recursive
    

4. 项目编译

4.1 使用命令行编译

  1. 创建构建目录

    mkdir build
    cd build
    
  2. 配置CMake

    cmake .. -G "MinGW Makefiles"
    

    注意:如果你使用winenv环境,已经自动设置了CMAKE_GENERATOR为"MinGW Makefiles",可以直接使用:

    cmake ..
    
  3. 编译项目

    make
    
  4. 安装到输出目录

    make install
    

    默认情况下,编译好的可执行文件会安装到项目根目录下的out/lv_port_window/bin目录中。

5. 示例运行

项目提供了多个示例应用,位于examples目录下:

  • widget_demo: 展示LVGL基础控件的使用
  • esp_brookesia_demo: 演示ESP-Brookesia框架的基本功能
  • esp_brookesia_advanced: 包含多个基于ESP-Brookesia的高级应用示例,如计算器、音乐播放器、游戏等

5.1 运行示例

编译完成后,可以在out/lv_port_window/bin目录下找到编译好的可执行文件:

# 在项目根目录下
cd out/lv_port_window/bin# 运行基础控件演示
./widget_demo# 运行ESP-Brookesia基本功能演示
./esp_brookesia_demo# 运行ESP-Brookesia高级应用示例
./esp_brookesia_advanced

5.2 esp_brookesia_advanced示例

esp_brookesia_advanced是一个综合示例,展示了ESP-Brookesia框架的强大功能,包含以下应用:

  1. Calculator:一个功能完整的计算器应用,支持基本运算和科学计算
  2. Draw:绘图工具,支持触控或鼠标输入
  3. Game_2048:经典的2048游戏,适配嵌入式设备的性能优化版本
  4. Music Player:音乐播放器,支持本地音频文件播放和控制(只有界面,功能未实现)
  5. Video Player:视频播放器,支持低分辨率视频的流畅播放(只有界面,功能未实现)

在这里插入图片描述

6. 项目结构解析

6.1 目录结构

  • /examples:示例代码,展示LVGL组件的使用方法
    • /esp_brookesia_advanced:ESP-Brookesia高级功能示例
    • /esp_brookesia_demo:ESP-Brookesia基础演示示例
    • /widget_demo:LVGL组件演示示例
  • /lvgl:LVGL核心库文件
  • /lv_drivers:LVGL驱动程序库
  • /esp-brookesia:ESP-Brookesia相关代码和配置
  • /CMakeLists.txt:项目构建配置文件
  • /Makefile:项目编译脚本
  • /lv_conf.h:LVGL配置文件
  • /lv_drv_conf.h:LVGL驱动程序配置文件

6.2 构建系统

项目使用CMake作为构建系统,主要的CMakeLists.txt文件包括:

  • 根目录的CMakeLists.txt:定义整个项目的构建配置
  • examples目录下的CMakeLists.txt:定义示例应用的构建配置
  • 各个子目录下的CMakeLists.txt:定义具体模块的构建配置

7. ESP-Brookesia框架介绍

ESP-Brookesia是一个面向物联网设备的人机交互开发框架,由乐鑫(Espressif)开发,其主要特性包括:

7.1 核心功能

  • 资源优化:通过内存管理和算法优化,显著降低LVGL在嵌入式设备上的资源占用
  • 性能提升:针对嵌入式硬件特性(如低功耗CPU、有限内存)进行专项优化,确保图形界面流畅运行
  • 硬件适配:提供统一的硬件抽象层,支持快速移植到不同嵌入式平台
  • 功耗管理:集成智能功耗控制策略,延长设备续航时间

7.2 应用管理

  • 采用C++开发,可在PC或ESP SoCs平台上编译
  • 提供丰富的标准化系统UI,支持动态调整UI样式
  • 采用app的应用管理方式,实现多个app的UI隔离与共存
  • 应用UI兼容Squareline导出代码的开发方式

8. 自定义应用开发

8.1 创建新应用

  1. 参考examples目录下的示例代码
  2. 创建新的应用目录和CMakeLists.txt文件
  3. 实现应用的主要功能和UI界面
  4. 将新应用添加到主CMakeLists.txt中

8.2 应用集成

要将自定义应用集成到ESP-Brookesia框架中,可以参考esp_brookesia_demo/main.cpp中的代码:

// 创建一个Phone对象
ESP_Brookesia_Phone *phone = new ESP_Brookesia_Phone();// 选择并激活样式表
stylesheet = new ESP_Brookesia_PhoneStylesheet_t ESP_BROOKESIA_PHONE_1024_600_DARK_STYLESHEET();
phone->addStylesheet(stylesheet);
phone->activateStylesheet(stylesheet);// 安装应用
YourCustomApp *app = new YourCustomApp();
phone->installApp(app);

9. 常见问题与解决方案

9.1 编译错误

问题:找不到SDL2库

解决方案

  • 确保SDL2库已正确安装
  • 检查CMake配置中的SDL2路径是否正确
  • 如果使用winenv环境,确保已运行winenvinstall.bat脚本

问题:编译时出现C++标准相关错误

解决方案

  • 确保使用的GCC编译器支持C++17标准
  • 在CMake配置中添加-std=c++17标志

问题:ESP-Brookesia使用了指定初始化器(Designated Initializers)语法,导致在MINGW下编译失败

解决方案

  • 升级GCC版本到最新版
  • 检查ESP-Brookesia代码,确保在使用指定初始化器语法的代码中不会跳过某些字段的初始化

9.2 运行错误

问题:运行时找不到SDL2.dll

解决方案

  • 将SDL2.dll复制到可执行文件所在目录
  • 或将SDL2库的bin目录添加到系统PATH环境变量
  • 或者静态链接SDL2库(推荐)

问题:窗口创建失败或黑屏

解决方案

  • 检查显示器分辨率设置
  • 确保lv_conf.h中的分辨率配置正确
  • 检查图形驱动初始化代码

10. 总结

这个开发环境为嵌入式UI开发提供了便捷的方式,让你可以在PC上快速开发和测试,然后再部署到实际的嵌入式设备上。

http://www.xdnf.cn/news/1227637.html

相关文章:

  • Flutter基础知识
  • 关于Web前端安全防御CSRF攻防的几点考虑
  • 常用git命令
  • 编译器工作原理的显微镜级拆解
  • 开箱即用的Next.js SSR企业级开发模板
  • 什么是doris
  • Typora v1.10.8 好用的 Markdown 编辑器
  • DreamBoards 借助 DreamHAT+ 雷达插件为 Raspberry Pi 提供 60GHz 毫米波雷达
  • 思途JSP学习 0801
  • 《软件测试与质量控制》实验报告一 测试用例设计
  • 逻辑回归参数调优实战指南
  • JS核心语法与实战技巧
  • 【读文献】Capacitor-drop AC-DC
  • 计数组合学7.10(舒尔函数的组合定义)
  • ls hgfs提示ls: cannot access ‘hgfs‘: Permission denied
  • Python 项目路径配置完全指南
  • 如何优雅删除Docker镜像和容器(保姆级别)
  • 开源工具FossFLOW,绘制技术图表
  • linux中posix消息队列的使用记录
  • Cesium性能优化
  • windows系统安装文生图大模型Stable diffusion V3.5 large(完整详细可用教程)
  • 第15讲——微分方程
  • 分类预测 | Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测
  • 操作系统-lecture4(进程的调度)
  • ubuntu22.04系统入门 linux入门(二) 简单命令 多实践以及相关文件管理命令
  • 分布在背侧海马体CA1区域的位置细胞(place cells)对NLP中的深层语义分析的积极影响和启示
  • 设计模式1:创建型模式
  • Java 学习笔记:常用类、String 与日期时间处理
  • 在纯servlet项目中,使用@WebFilter定义了多个filter,如何设置filter的优先级
  • Google机器学习基础(语言模型)