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 手動安裝編譯環境
如果你希望手動安裝所需工具,需要以下組件:
-
CMake (版本 3.12.4 或更高)
- 下載地址:https://cmake.org/download/
- 安裝時選擇將CMake添加到系統PATH
-
MinGW-w64 GCC (支持C11和C++17標準)
- 下載地址:https://winlibs.com/
- 建議選擇帶有POSIX線程的版本
- 安裝后將bin目錄添加到系統PATH
-
GNU Make
- 下載地址:https://ftp.gnu.org/gnu/make/
- 選擇與MinGW-w64版本匹配的版本
- 安裝后將bin目錄添加到系統PATH
-
SDL2庫
- 下載地址:https://github.com/libsdl-org/SDL/releases
- 選擇MinGW開發庫版本(SDL2-devel-x.x.x-mingw.zip)
- 解壓后將include和lib目錄復制到MinGW安裝目錄下
2.2 使用winenv開發環境(推薦)
為了簡化環境配置過程,推薦使用預配置的winenv開發環境:
-
下載winenv
git clone https://gitcode.com/win32grp/winenv.git
-
安裝環境
進入winenv/scripts目錄,運行winenvinstall.bat腳本。該腳本會自動解壓以下工具:
- CMake 4.1.0 RC3
- GNU Make 3.81
- MinGW-w64 GCC 8.1.0
- SDL2 2.32.4
-
啟動開發環境
雙擊winenv根目錄下的shell.bat腳本,將打開一個配置好環境變量的命令行終端。在這個終端中,你可以直接使用cmake、make、gcc等命令。
winenv開發環境的使用方法請參考:搭建Windows系統CMake構建環境.md
3. 源碼獲取
-
克隆倉庫及其子模塊
git clone --recursive https://gitcode.com/aiprtem_lvgl/lv_port_window.git cd lv_port_window
如果你已經克隆了倉庫但沒有包含子模塊,可以使用以下命令獲取子模塊:
git submodule update --init --recursive
4. 項目編譯
4.1 使用命令行編譯
-
創建構建目錄
mkdir build cd build
-
配置CMake
cmake .. -G "MinGW Makefiles"
注意:如果你使用winenv環境,已經自動設置了CMAKE_GENERATOR為"MinGW Makefiles",可以直接使用:
cmake ..
-
編譯項目
make
-
安裝到輸出目錄
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框架的強大功能,包含以下應用:
- Calculator:一個功能完整的計算器應用,支持基本運算和科學計算
- Draw:繪圖工具,支持觸控或鼠標輸入
- Game_2048:經典的2048游戲,適配嵌入式設備的性能優化版本
- Music Player:音樂播放器,支持本地音頻文件播放和控制(只有界面,功能未實現)
- 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 創建新應用
- 參考examples目錄下的示例代碼
- 創建新的應用目錄和CMakeLists.txt文件
- 實現應用的主要功能和UI界面
- 將新應用添加到主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上快速開發和測試,然后再部署到實際的嵌入式設備上。