GUI-Guider 生成打印機模板并在 ESP32-S3 上面運行

目錄

ESP32-S3 移植 GUI-Guider 的打印機例程

參考鏈接
ESP32 學習筆記 - ESP32 使用 GUI-Guider 制作 LVGL 圖形界面

前提準備

  • esp-idf v4.4 開發環境 + VSCode 的 idf 插件 v1.4.0
  • 帶 ili9481 或其他屏幕的 esp32-s3(n8r16 或 n8r8) 開發板
  • 已經移植的 lvgl(v7) 例程(見lv_port_esp32),以及你需要會移植(如何移植到esp32?)。
  • GUI Guider 1.3.0

其實自帶的例程就有這個打印機 demo,但是為了使用 GUI Guider,因此還是移植一遍這個。
關于工程模板以及移植好的工程,不會上傳zip,有需要留言吧。

1. GUI Guider 生成工程

根據屏幕參數新建工程

注意文件路徑不能含有中文和空格,項目名稱必須以字母開頭。長度必須至少為三個字符,只能包含字母、數字和下劃線。

新建工程


1648689615245.png

界面改成中文


1648689785505.png

可以運行模擬器測試一下


1648689851418.png

模擬器界面


1648689910760.png

玩完了就可以直接生成代碼了


1648690117589.png

生成完畢之后就可以用生成的代碼了,主要用到這倆文件夾,在項目文件夾里面。
注意:先把 custom 復制到 generated 里面,然后復制 generated 到 移植好的 lvgl 例程里的 components 文件夾里,使生成的代碼作為組件使用。

1648690388036.png

1648690757803.png

2.移植代碼到 lvgl 例程里

關于組件

將生成的代碼作為組件使用

用 VSCode 打開 lvgl 工程,生成的代碼還不能直接作為組件使用,還需要一個 CMakeLists.txt 把代碼包含在工程里面。在 generated 文件夾創建 CMakeLists.txt,其內容如下:

if(ESP_PLATFORM)

file(GLOB_RECURSE SOURCES *.c ./images/*.c  ./guider_fonts/*.c ./custom/*.c)

idf_component_register(SRCS ${SOURCES}
                       INCLUDE_DIRS .
                                    ./guider_customer_fonts
                                    ./guider_fonts
                                    ./images
                                    ./custom
                                    ../lvgl
                                    ../lvgl/src/lv_core
                                    ../lvgl/src/lv_draw
                                    ../lvgl/src/lv_font
                                    ../lvgl/src/lv_gpu
                                    ../lvgl/src/lv_hal
                                    ../lvgl/src/lv_misc
                                    ../lvgl/src/lv_themes
                                    ../lvgl/src/lv_widgets
                       REQUIRES lvgl)

else()
    message(FATAL_ERROR "LVGL LV examples: ESP_PLATFORM is not defined. Try reinstalling ESP-IDF.")
endif()

這個 CMakeLists.txt 是從 components\lv_examples 里復制的,根據 generated 所用到的代碼添加內容。
其中../lvgl/src/lv_core以下的一長串只有../lvgl/src/lv_font是必須的,因為在components\generated\guider_fonts\guider_fonts.h里有#include "lv_font.h",其他沒啥用,注釋掉也行,方便接別的移植工程復制這個 CMakeLists.txt。

與參考鏈接中的不同

  1. 在參考鏈接(ESP32 學習筆記 - ESP32 使用 GUI-Guider 制作 LVGL 圖形界面)中,需要 lv_lib_split_jpg,但是本項目移植圖片已經的全都是.c 文件了不需要把 jpg 轉為 c 了。

  2. 參考鏈接中

6、然后再修改 main 文件夾里面的 CMakeLists.txt,把 generated 文件夾添加到編譯環境里面,如下圖所示。

實測并不需要,保持原樣即可,像參考中那樣做反而會報錯。


1648692511208.png

調用生成的代碼

main\main.c中,注釋掉原本運行的例程所包含的頭文件:

1648692870232.png

包含生成的代碼,注意lv_ui guider_ui;不能丟,在components\generated\gui_guider.h里聲明了extern lv_ui guider_ui;,需要調用這個guider_ui

#include "gui_guider.h"
#include "guider_lv_conf.h"
#include "guider_fonts.h"
#include "events_init.h"

lv_ui guider_ui;
1648692967270.png

然后注釋掉原本運行的例程的 demo,并調用生成的代碼:

    /* 調用生成的代碼 */
    setup_ui(&guider_ui);
    events_init(&guider_ui);
1648693308838.png

由于static void create_demo_application(void)聲明了 static,使用需要注釋掉它的聲明和實現,不然在本文件中不調用create_demo_application的話編譯器也會報錯。

1648693594634.png

特別注意,這里有個反斜杠,這里也要注釋!不然編譯器會識別為多行注釋報錯。

1648694291720.png

除此之外,在components\generated\guider_lv_conf.h里生成了一些配置,由于之前移植的 lvgl 例程里面已經有了,如果這邊再聲明一遍會報錯,因此通過#if 0#endif注釋掉整個文件就行了。

1648694374551.png

這時已經移植得差不多了,但是如果現在就編譯的話還是會報錯,主要是生成器生成的代碼中包含 lvgl 頭文件都是用這種形式#include "lvgl/lvgl.h",不過該例程中實際上用的都是#include "lvgl.h",生成器生成的文件這么多,怎么辦呢?

其實也挺簡單,首先在components\generated文件夾里打開一個新的 VSCode 窗口:

1648693933685.png

然后搜索#include "lvgl/lvgl.h"替換成

#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif

就行了。


1648694474166.png
1648694481961.png

回到打開 lvgl 的窗口。
由于生成的例程有點大,需要大一點的 flash,需要改分區表,首先先編譯一次以方便打開 sdk config。


1648694791152.png

現在編譯肯定會報錯空間不夠。


1648694810349.png

關于分區表

隨便從別的例程復制一個分區表partitions_example.csv到項目根文件夾:

1648695041381.png

partitions_example.csv 內容如下:

# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 1M,
storage,  data, fat,     ,        1M,

右鍵打開分區表編輯器:


1648695191857.png

根據報錯內容把factory改大一點,這里改成 4M。
保存成功:

1648695300600.png

打開 sdk config 使用剛才的分區表:


1648695374066.png

改名,然后保存。


1648695472595.png

萬事大吉,重新編譯!


1648695616334.png

編譯成功,燒錄試試:


1648695681566.png

看看效果:


動畫4.gif
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容