最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Arduino esp32移植LVGL

2023-07-23 14:13 作者:bili40333023605  | 我要投稿

關(guān)于lvgl 移植到SPI觸摸屏,網(wǎng)上有很多教程,但都只提到了顯示部分。對于觸屏部分都沒有寫清楚。對于小白來說還是不明不白。買了這塊屏后,從接線開始,研究了研究了一天,終于遷移成功了,寫個總結(jié)。

硬件:普中esp32開發(fā)板、SPI觸摸屏幕240*320

esp32
TFT SPI 觸摸屏幕
屏幕引腳說明

軟件:Ardunio IDE, LVGL v8.3.8, TFT_eSPI

第一步:下載依賴包

下載LVGL依賴包,直接用IDE的包管理工具安裝即可。如果因為網(wǎng)絡問題無法安裝,可到github上直接下載源碼,復制到libraries 目錄下。(注意:lvgl的master分支是9.0開發(fā)版本,語法跟V8大不相同,但是全部文檔和示例都是V8的,因此需要下載V8.3的源碼)

官方示例用的驅(qū)動是TFT_eSPI,所以還要下載TFT_eSP驅(qū)動包。方法同上。這個對版本沒有要求,這次使用的是v2.5.31。

第二步:選擇驅(qū)動

打開TFT_eSPI目目錄下的User_Setup_Select.h 文件,選擇對應的驅(qū)動頭文件,取消對應行的注釋,注釋默認的行我這里選的是Setup42_ILI9341_ESP32.h

注意,只能選擇一個驅(qū)動

點擊剛剛選中的頭文件,IDE會直接跳轉(zhuǎn)到對應文件,文件對引腳的定義如下:

引腳5是觸屏輸入,默認不開啟,我們之后會用到,先把這一行注釋取消

我們先測試一下屏幕能不能正常顯示。

按照上面引腳定義,把對應的引腳接上線。(TOUCH_CS 5 可以先不接)。屏幕上有字,對照接線即可。此外,還要接上電源(VCC,GND)和LED背光。我們沒有對LED進行控制,直接接到3.3V電源

打開TFT_eSPI的examples\320 x 240\TFT_Clock, 打開TFT_Clock.ino 文件,編譯上傳到開發(fā)板。在屏幕上看到一個時鐘,說明運行正常。(Ardunio IDE可以快速打開示例,請自己摸索)。

第三步:移植LVGL。

打開LVGL文件夾。復制lv_conf_template.h 到LVGL同級目錄下,重命名為lv_conf.h,

最終目錄結(jié)構(gòu)如下:

lv_conf.h和lvgl目錄同級

修改lv_conf.h文件,把第一個#if改為1:

然后根據(jù)屏幕修改顏色屬性,我的是16,不知道的話就默認值就好

復制官方lvgl\examples\arduino\LVGL_Arduino目錄下的LVGL_Arduino.ino 到項目目錄。然后修改文件,把行和高改成屏幕的行和高。(這個示例代碼只需要改這一點就能用,下面的代碼大部分只作分析,不需要修改)

在setup里初始化屏幕,官方代碼如下:

flush_cb是一個回調(diào)函數(shù),具體作用官方解釋是把緩存寫到屏幕上。具體怎么寫,由用戶自定義

官方實現(xiàn)代碼如下,本質(zhì)就是把lvgl的像素畫到實際屏幕上,注意最后一句,每次寫完后要通知lvgl

取消以下代碼的注釋:

編譯上傳到開發(fā)板。在屏幕正中央顯示

Hello Ardino and LVGL!?

說明移植成功。具體的實現(xiàn)可以看實例程序。如果編譯時報函數(shù)沒有定義錯誤,多半是版本問題。更換LVGL版本試試。

如果編譯上傳成功,屏幕一片空白,檢查引腳是否接對。

到這一步屏幕能顯示內(nèi)容了,但還不能觸摸,接下來實現(xiàn)觸摸功能。

第四步:觸屏功能實現(xiàn)

1首先回到引腳定義文件:

可見對于touch的引腳定義只有一個。但是屏幕上的引腳有5個,這要怎么接?這就涉及spi協(xié)議的規(guī)定,這里不細入。簡單來說,多個設(shè)備可以共用同一個引腳,把觸摸屏看成顯示和輸入兩個設(shè)備,共用部分引腳。

一個主設(shè)備和多個從設(shè)備的SCK、MISO、MOSI,是共享線路的,而CS引腳在這里就起到了重要的作用。它能夠讓主設(shè)備選擇某一時刻與哪一個從設(shè)備進行通信。因此我們只需要將主設(shè)備的SCK、MISO、MOSI引腳引出,然后將多個從設(shè)備的SCK、MISO、MOSI引腳分別接在引出的三條對應的線路上,最后通過程序設(shè)置CS引腳來分時的選通從設(shè)備,就可以在這里實現(xiàn)對觸摸顯示屏的正常驅(qū)動。

另外根據(jù)我們引腳定義的第一行說明(leave TFT SDO disconnected if other SPI devices share MISO) ,顯示MISO 接口是不需要接的。所以只要共享SCK,MOSI 兩個引腳即可

引腳連接

注:一個引腳接兩個接口用面包板或直接讓兩個接口短路即可。

2、接下來移植lvgl。還是剛剛那個程序,下面這段代碼是定義輸入設(shè)備

my_touchpad_read 是一個自定義函數(shù),把輸入設(shè)備上的信息給到lvgl。具體實現(xiàn)官方源碼

我們抄一個簡單的按鍵demo試一下:定義一個button,按下去就改變文字

定義回調(diào)函數(shù):

注釋掉剛剛的測試代碼,在后面添加:

編譯上傳,屏幕上可以正常顯示一個button。點一下,沒有反應。這是怎么回事?

一開始按網(wǎng)上教程做到這一步我也懵了,還以為是屏幕壞了,單獨跑eSPI的觸屏檢測程序,結(jié)果正常。

到LVGL官網(wǎng),看看官方怎么說。

https://docs.lvgl.io/master/get-started/platforms/arduino.html

LVGL說明

注意說明 5. Set LV_TICK_CUSTOM

?打開配置文件lv_conf.h,找到 LV_TICK_CUSTOM

使用自定義時鐘源,不需要使用`lv_tick_inc()手動更新。也就是說要把ardunio的時鐘信號給加上。改一下配置,啟用arduino的時鐘信號:

保存后再次編譯上傳,成功。

這個配置很重要,網(wǎng)上很多 教程都沒提到。

這篇是我的實踐,做個筆記,供大家參考吧。

Arduino esp32移植LVGL的評論 (共 條)

分享到微博請遵守國家法律
凯里市| 尤溪县| 浮梁县| 本溪市| 越西县| 苏州市| 琼中| 余江县| 宝坻区| 盐亭县| 南漳县| 土默特左旗| 农安县| 惠安县| 九台市| 襄樊市| 怀仁县| 启东市| 蓬安县| 永康市| 潜江市| 玉溪市| 罗源县| 宁化县| 蒲城县| 泾川县| 龙里县| 攀枝花市| 丰宁| 太仆寺旗| 铅山县| 永顺县| 朝阳市| 宝鸡市| 耒阳市| 桃园县| 曲阜市| 临武县| 特克斯县| 盈江县| 西青区|