LVGL WIN32模拟器環境搭建
- LVGL簡介
- 環境搭建
-
- IDE 選擇
- 模拟器代碼下載下傳
- PC模拟器搭建
- 其他配置項說明
LVGL簡介
LVGL是一個跨平台、輕量級、易于移植的圖形庫。因其支援大量特性和其易于裁剪,配置開關衆多,且版本更新較快,不同版本之間存在一定的差異性,相關的使用教程有一定的滞後性,由于缺少最新版本的中文教程,加上大量的教程中未注明對應的版本,初始接觸的開發者往往容易中招,花費大量時間爬坑。本文僅對自己的使用經驗進行記錄和總結,望對初始接觸LVGL的開發者有所幫助。
LVGL 提供了模拟器來在電腦上仿真 LVGL,讓使用者可以擺脫硬體和平台的束縛,專注于 LVGL 邏輯層面的開發。對于如何在 PC 上仿真 LVGL,官方已經給出了詳細的文檔說明,具體可參考 Simulator on PC
環境搭建
根據自己的需要、平台和IDE下載下傳模拟器,本人選擇 WIN10 + VS2022
IDE 選擇
Visual studio2022下載下傳
VS2022安裝:
1、需要勾選C++桌面開發,其他的如果不需要暫時可以不選
2、必要的元件安裝,LVGL的支援的visual studio PC模拟器是根據Vs2019的生成工具生成,需要把VS2019的工具集安裝上
模拟器代碼下載下傳
LVGL官網介紹的LVGL所支援的PC模拟器:
1、進入倉庫後我們就直接點選Code下載下傳第一個PC模拟器檔案
2、進入LVGL.LvglPlatform檔案分别點選下面三個檔案夾去裡面下載下傳對應的裡面的源碼
- freetype
- lv_drivers
- lvgl
PC模拟器搭建
- 解壓lv_port_win_visual_studio-master壓縮包
- LVGL.LvglPlatform檔案夾下載下傳中的freetype、lv_drivers、lvgl 檔案,解壓并複制到對應的檔案夾中。
- 檔案全部複制完成之後就可以直接打開啟動檔案啟動Visual studio
- VS2019的工具集選擇
- 右鍵選擇工程,點選生成開始編譯, 編譯通過後選擇本地調試器開始運作,能夠加載出官方執行個體就證明移植成功了。
其他配置項說明
1、debug log 等級修改
在LVGL.Simulator/lv_conf.h中,修改LV_USE_LOG 選擇開不開起debug log, 修改LV_LOG_LEVEL 選擇 debug log的開啟等級,如圖
2、檔案系統使用
在LVGL.Simulator/lv_conf.h中,檔案系統預設是使用的WIN32,
修改配置如下
#define LV_USE_FS_WIN32 1
#if LV_USE_FS_WIN32
#define LV_FS_WIN32_LETTER '/'
#define LV_FS_WIN32_PATH "D:\\SD" //此處可使用你自己的目錄
#define LV_FS_WIN32_CACHE_SIZE 0
#endif
然後,開啟main函數中的如下代碼
lv_fs_dir_t d;
if (lv_fs_dir_open(&d, "/") == LV_FS_RES_OK)
{
char b[MAX_PATH];
memset(b, 0, MAX_PATH);
while (lv_fs_dir_read(&d, b) == LV_FS_RES_OK)
{
LV_LOG_ERROR("%s\n", b);
}
lv_fs_dir_close(&d);
}
編譯并運作程式,檢視控制台視窗,是不是應該出現指定目錄下的所有目錄和檔案,是的話則檔案系統啟用成功
3、螢幕的分辨率的設定
打開項目之後,檢視LVGL.Simulator.cpp 在single_display_mode_initialization 函數中修改螢幕的分辨率
bool single_display_mode_initialization()
{
if (!lv_win32_init(
GetModuleHandleW(NULL),
SW_SHOW,
800, //輸出螢幕的寬
480, //輸出螢幕的高
LoadIconW(GetModuleHandleW(NULL), MAKEINTRESOURCE(IDI_LVGL))))
{
return false;
}
lv_win32_add_all_input_devices_to_group(NULL);
return true;
}
4、添加一個UI
- 使用SquareLine_Studio_Windows工具繪制一個UI界面
- 在LVGL.Simulator\lvgl目錄下建立一個屬于自己的目錄,如 hmi
- 将繪制的UI源碼全部複制到hmi目錄下
- LVGL.Simulator.cpp中添加對應的頭檔案,并在main中調用繪制UI的函數接口