第12章 LVGL開發(fā)入門
12.1 LVGL開發(fā)簡(jiǎn)介
12.1.1 LVGL介紹
LVGL(Light and Versatile Graphics Library)是一個(gè)開源的嵌入式圖形庫,由Gábor Kiss-Vámosi于2016年創(chuàng)建,遵守MIT協(xié)議。目前由來自世界各地的志愿者共同維護(hù)和開發(fā)。
LVGL
LVGL具有輕量級(jí)、多功能、靈活和可移植等特點(diǎn),可以幫助開發(fā)者快速和方便地創(chuàng)建美觀和功能豐富的GUI。LVGL適用于各種嵌入式平臺(tái),并且支持多種操作系統(tǒng),例如Linux、Windows、RTOS等,可運(yùn)行于多種硬件板卡上。LVGL還支持多種不同分辨率的顯示器、多種接口的觸摸屏。LVGL還提供了多種語言的綁定,例如Python、Micropython、JavaScript等,并提供多種開發(fā)工具,例如模擬器、視覺化設(shè)計(jì)器、字體轉(zhuǎn)換器等。
LVGL支持多種控件:圓弧、動(dòng)畫圖像、進(jìn)度條、按鈕、按鈕矩陣、日歷、圖表、畫布、復(fù)選框、下拉列表、圖象、圖像按鈕、鍵盤、標(biāo)簽、線條、菜單、消息框、滾輪、標(biāo)尺、滑動(dòng)條、跨度、旋轉(zhuǎn)框、旋轉(zhuǎn)器、開關(guān)、表、文本框、平鋪視圖、窗口等。使用LVGL可以制作風(fēng)格多樣的界面,比如:
12.1.2 LVGL內(nèi)部機(jī)制
使用LVGL創(chuàng)建出各個(gè)圖標(biāo)并在屏幕上顯示之后,以按鈕圖標(biāo)為例,它如何及時(shí)地響應(yīng)用戶的點(diǎn)擊操作?以溫濕度圖標(biāo)為例,如何及時(shí)地更新它的數(shù)據(jù)?LVGL使用“timer”來實(shí)現(xiàn)。
操作圖標(biāo)時(shí),要先點(diǎn)擊觸摸屏。我們會(huì)為觸摸屏創(chuàng)建一個(gè)輸入設(shè)備(“l(fā)v_indev_t”),并為它創(chuàng)建一個(gè)timer,通過這個(gè)timer周期性地讀取鼠標(biāo)的輸入數(shù)據(jù)。以“packagesLVGL-v8.3.11 estssrclv_test_init.c”為例,注冊(cè)鼠標(biāo)設(shè)備時(shí),內(nèi)部注冊(cè)了一個(gè)timer:
LVGL的主循環(huán)會(huì)周期性地調(diào)用上述的“l(fā)v_indev_read_timer_cb”函數(shù),它里面將調(diào)用“l(fā)v_test_mouse_read_cb”得到鼠標(biāo)數(shù)據(jù),然后發(fā)送給被選中的圖標(biāo)。
假設(shè)有圖標(biāo)被用來顯示溫濕度值,我們也會(huì)為這個(gè)圖標(biāo)添加一個(gè)timer,通過這個(gè)timer周期性地讀取溫濕度值并更新圖標(biāo)。比如:
LVGL的主循環(huán)會(huì)周期性地調(diào)用上述的“l(fā)abel_speed_timer”函數(shù),它里面將讀取溫濕度傳感器的數(shù)值,并更新“l(fā)abel_speed”的文字。
這些定時(shí)器都是在LVGL的主循環(huán)里被調(diào)用的,主循環(huán)如何得到這些定時(shí)器?它們都被放入一個(gè)鏈表里:
怎么處理_lv_timer_ll鏈表里的各個(gè)timer?LVGL里有一個(gè)循環(huán),代碼如下:
12.2 開發(fā)第1個(gè)LVGL程序
本節(jié)課程演示如何編譯、運(yùn)行第1個(gè)LVGL程序。
12.2.1 下載源碼
這些源碼可以在網(wǎng)盤資料中看到,你可以不必自己下載:
RemiPi上運(yùn)行的是Linux系統(tǒng),支持的顯示設(shè)備是基于Framebuffer的。所以,可以從LVGL官網(wǎng)下載“l(fā)v_port_linux_frame_buffer”:它是基于Linux的、支持Framebuffer的示例程序。
如下圖所示下載v9.0版本:
在“l(fā)v_port_linux_frame_buffer”里,含有編譯工具、LVGL 的源碼鏈接(“如上圖步驟4所示,就是LVGL源碼鏈接”)。“l(fā)v_port_linux_frame_buffer”里,“l(fā)vgl”子目錄是空的,我們需要下載LVGL v9.1的源碼放到“l(fā)vgl”目錄里(LVGL9.0有些問題)。點(diǎn)擊上圖步驟4的“l(fā)vgl”,如下圖操作:
把“l(fā)v_port_linux_frame_buffer-release-v9.0.zip”、“l(fā)vgl-9.1.0.zip”分別解壓后,得到“l(fā)v_port_linux_frame_buffer-release-v9.0”、“l(fā)vgl-9.1.0”,把后者目錄下的所有文件復(fù) 制進(jìn)“l(fā)v_port_linux_frame_buffer-release-v9.0/lvgl”目錄下。
在Ubuntu下可以執(zhí)行以下命令解壓:
左右滑動(dòng)查看完整內(nèi)容
$ unzip lv_port_linux_frame_buffer-release-v9.0.zip $ unzip lvgl-9.1.0.zip $ mv lvgl-9.1.0/* lv_port_linux_frame_buffer-release-v9.0/lvgl/
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19141瀏覽量
305915 -
開源
+關(guān)注
關(guān)注
3文章
3365瀏覽量
42551 -
圖形庫
+關(guān)注
關(guān)注
0文章
18瀏覽量
9031 -
LVGL
+關(guān)注
關(guān)注
1文章
85瀏覽量
2992
原文標(biāo)題:LVGL開發(fā)入門 - RZ MPU工業(yè)控制教程連載(45)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論