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.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;。關鍵參數&…