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.pswp.cn/diannao/94185.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94185.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94185.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ip】IP地址能否直接填写255?

IP地址数值限制​ 最近有朋友后台问我,IP地址里填255行不行?思索着有一阵子没有分享基础的知识,就在今天大致说一下,关于IP地址里填255行不行?答案当然是否定的。 IP地址由4个段组成,每个段的数值范围其实限…

力扣热题100----------141.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索…

【Java开发日记】我们来说说 LockSupport 的 park 和 unpark

目录 一、LockSupport 1.1、LockSupport函数列表 1.2、基本使用 先 park 再 unpark 先 unpark 再 park 1.3、特点 与 Object 的 wait & notify 相比 二、LockSupport park & unpark原理 2.1、情况一,先调用park,再调用unpark park 操作…

AGI|从“实验室”到“生产线”:企业级AI Agent 如何突围

在数字化转型的深水区,企业级 AI Agent 正从技术概念走向产业实践,成为驱动生产力变革的核心引擎。目录 一、风口已至:AI Agent 的崛起逻辑与市场刚需 二、企业级AI Agent:核心能力与独特价值定位 三、AI Agent 的未来目标 一、…

AtCoder Beginner Contest 417

文章目录A A SubstringB Search and DeleteC Distance IndicatorsD Takahashis ExpectationE A Path in A DictionaryF Random GatheringG Binary CatAtCoder Beginner Contest 417A A Substring You are given an N-character string S consisting of lowercase English lett…

C++23 Concepts:用类型约束重构泛型编程的终极方案

一、开篇:模板元编程的"类型检查困局" 某金融量化团队曾遇到诡异bug: template<typename T> void process(T data) {static_assert(std::is_arithmetic<T>::value, "需要数值类型");// 业务逻辑... } 当调用process("hello")时…

【RK3568 看门狗驱动开发详解】

RK3568 看门狗驱动开发详解一、Linux 看门狗子系统架构​二、设备树配置​三、 看门狗驱动实现四、验证看门狗定时器&#xff08;Watchdog Timer&#xff09;是保障嵌入式系统可靠性的关键硬件&#xff0c;它通过定期接收 “喂狗” 信号监控系统运行状态&#xff0c;当系统故障…

探索 Vue 3.6 新特性:Vapor Mode 与高性能 Web 应用开发

Vue 3.6 简介 Vue.js 是一个广受欢迎的渐进式 JavaScript 框架&#xff0c;以其简洁的 API、灵活的组件系统和高性能著称。Vue 3.6 是 Vue 3 系列的一个重要版本&#xff0c;引入了多项性能优化和新特性&#xff0c;尤其是备受关注的 Vapor Mode&#xff0c;这是一个无需虚拟 D…

初识prometheus

Prometheus&#xff1a;云原生时代的监控利器 在当今快速发展的云原生和微服务架构时代&#xff0c;传统的监控系统面临着巨大的挑战&#xff1a;如何高效地收集海量、动态变化的指标&#xff1f;如何实时告警并快速定位问题&#xff1f;如何实现灵活的可视化和强大的数据查询…

从源码角度分析导致 JVM 内存泄露的 ThreadLocal

文章目录1. 为什么需要ThreadLocal2. ThreadLocal的实现解析1.1 实现分析1.2 具体实现1.3 ThreadLocalMap中Hash冲突的解决1.3.1 Hash冲突解决的几种方法1.3.1.1 开放定值法1.3.1.2 链地址法1.3.1.3再哈希法&#xff1a;1.3.1.4 建立公共溢出区1.3.2 ThreadLocal解决Hash冲突的…

React组件化的封装

1. 组件化封装的结构 1.1. 定义一个类(组件名必须是大写&#xff0c;小写会被认为是html元素), 继续自React.Component1.2. 实现当前组件的render函数 render当中返回的jsx内容&#xff0c;就是之后React会帮助我们渲染的内容 1.3. 结构图如下&#xff1a; data 方法render()…

嵌入式仿真教学的革新力量:深圳航天科技创新研究院引领高效学习新时代

嵌入式系统作为现代信息技术的核心基石&#xff0c;已深度融入工业控制、物联网、智能终端等关键领域。高校肩负着培养嵌入式技术人才的重任&#xff0c;但传统教学方式正面临严峻挑战&#xff1a;硬件实验设备投入巨大、更新滞后、维护繁琐、时空限制严格&#xff0c;难以满足…

六、Linux核心服务与包管理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年8月3日 专栏&#xff1a;Linux教程 要保证一个Linux系统稳定、安全、功能完备&#xff0c;有效管理其后台服务和软件包是至关重要的。本文将深入介绍现代Linux系统中四个核心的管理工具&#xff1a;systemctl (服务管理)&…

【数据结构】哈希表实现

目录 1. 哈希概念 2 哈希冲突和哈希函数 3. 负载因子 4. 将关键字转为整数 5. 哈希函数 5.1直接定址法 5.2 除法散列法/除留余数法 5.3 乘法散列法&#xff08;了解&#xff09; 5.4 全域散列法&#xff08;了解&#xff09; 5.5 其他方法&#xff08;了解&#xff09…

PostgreSQL面试题及详细答案120道(21-40)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

数据建模及基本数据分析

目录 &#xff08;一&#xff09;数据建模 1.以数据预测为核心的建模 2.以数据聚类为核心的建模 &#xff08;二&#xff09;基本数据分析 1.Numpy 2. Pandas 3.实例 4.Matplotlib 资料自取&#xff1a; 链接: https://pan.baidu.com/s/1PROmz-2hR3VCTd6Eei6lFQ?pwdy8…

电动汽车DCDC转换器的用途及工作原理

在电动汽车的电气架构中&#xff0c;DCDC转换器&#xff08;直流-直流转换器&#xff09;是一个至关重要的部件&#xff0c;负责协调高压动力电池&#xff08;通常300V~800V&#xff09;与低压电气系统&#xff08;12V/24V&#xff09;之间的能量流动。它的性能直接影响整车的能…

PyTorch 应用于3D 点云数据处理汇总和点云配准示例演示

PyTorch 已广泛应用于 3D 点云数据处理&#xff0c;特别是在深度学习驱动的任务中如&#xff1a; 分类、分割、配准、重建、姿态估计、SLAM、目标检测 等。 传统 3D 点云处理以 PCL、Open3D 为主&#xff0c;深度学习方法中&#xff0c;PyTorch 是构建神经网络处理点云的核心框…

ABP VNext + Quartz.NET vs Hangfire:灵活调度与任务管理

ABP VNext Quartz.NET vs Hangfire&#xff1a;灵活调度与任务管理 &#x1f680; &#x1f4da; 目录ABP VNext Quartz.NET vs Hangfire&#xff1a;灵活调度与任务管理 &#x1f680;✨ TL;DR&#x1f6e0; 环境与依赖&#x1f527; Quartz.NET 在 ABP 中接入1. 安装与模块…

[硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?

1. CMOS电平定义&#xff1a; CMOS&#xff08;Complementary Metal-Oxide-Semiconductor&#xff09;电平基于互补金属氧化物半导体工艺&#xff0c;由PMOS和NMOS晶体管组成。其核心特点是低功耗、高抗干扰性和宽电源电压范围&#xff08;通常为3V~18V&#xff09;。关键参数&…