首页 > 其他分享 >GUI-Guider 生成打印机模板并在 ESP32-S3 上面运行

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

时间:2023-11-19 21:48:14浏览次数:48  
标签:S3 guider ESP32 生成 lv 例程 lvgl Guider png

原文:https://www.jianshu.com/p/51fc4c1d1e66

目录

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

作者:猫猫蓝catcatBlue
链接:https://www.jianshu.com/p/51fc4c1d1e66
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:S3,guider,ESP32,生成,lv,例程,lvgl,Guider,png
From: https://www.cnblogs.com/bruce1992/p/17842718.html

相关文章

  • ESP32检测家中温湿度上云,随时随地多端查看温湿度​
    ESP32检测家中温湿度上云,随时随地多端查看温湿度背景介绍上次说到用ArduinoUno板子结合DHT11温湿度传感器,在Serial里实时返回温湿度的方法,总觉得还差点意思,一是只能配合电脑查看,不够节能,也不环保,不够爱护地球母亲,毕竟诸如Arduino之类的板子的电耗最高也就几十个毫安,0.1瓦都不到,电......
  • 纯CSS3实现圆圈动态发光特效动画
    参考文档:https://www.cnblogs.com/cyfeng/p/12625606.htmlhtml文件: <div class="item"></div>css文件:     <!DOCTYPEHTML><html><head><title>纯CSS3实现圆圈动态发光特效动画</title><style>bo......
  • esp32笔记[10]-rust驱动ssd1306显示屏
    摘要使用rust(no-std)环境和esp-hal库实现SSD1306显示屏(128x64)显示bmp图片.平台信息esp32(模组:ESP32-WROOM-32D)(xtensalx6)(xtensa-esp32-none-elf)rust超链接esp32笔记[7]-使用rust+zig开发入门原理简介rust的include_bytes!宏Rust的include_bytes!宏可以用......
  • 在ESP32-C3上实现断电后RTC(Real-Time Clock)继续走时
    如果您想在ESP32-C3上实现断电后RTC(Real-TimeClock)继续走时,可以考虑以下几种方法:使用外部RTC芯片:您可以连接一个外部的RTC芯片,例如DS1307或DS3231等,这些芯片通常具有内置的锂电池,可以在断电时保持走时。将外部RTC芯片的VDD引脚连接到ESP32-C3的电池或电源,并将时钟信号线连接到ESP3......
  • oracle DES3 to Java code
    oracle加密createorreplacefunctiondes3_enc(inputvarchar2)returnvarchar2isi_datavarchar2(128);v_invarchar2(255);i_keyvarchar2(128);raw_inputRAW(128);key_inputRAW(128);decrypted_rawRAW(2048);i_data:=input;raw_input:=UTL_RAW.CAST_T......
  • OSS+S3+python S3
    OSS是什么? 参考:https://zhuanlan.zhihu.com/p/544661650 ......
  • ATS3607D 环境搭建
    1.编译ninjagitclonegit://github.com/ninja-build/ninja.git&&cdninjagitcheckoutrelease//打开vs2015x86x64兼容工具pythonconfigure.py--bootstrap//第一个错误:fatalerrorC1902:程序数据库管理器不匹配D:\ProgramTools\vs2015\VC\bin和D:\Program......
  • vuejs3.0 从入门到精通——项目搭建
    项目搭建一、环境准备软件名称软件版本nodev20.9.0npm10.1.0Windows10专业版22H2vue/cli5.0.8vitev4.5.0二、vite创建项目>npminitvite@latestsaas--templatevue√Selectaframework:»Vue√Selectavariant:»TypeScriptSca......
  • vuejs3.0 从入门到精通——Pinia——定义Store
    定义Store Store是用defineStore()定义的,它的第一个参数要求是一个独一无二的名字:import{defineStore}from'pinia'//你可以对`defineStore()`的返回值进行任意命名,但最好使用store的名字,同时以`use`开头且以`Store`结尾。(比如`useUserStore`,`useCartStore......
  • 全球30米湿地数据产品(GWL_FCS30)
    简介:该数据集是第一个具有精细分类系统的全球30米湿地地图(GWL_FCS30),包括四个内陆湿地子类别(内陆沼泽、沼泽、泛滥平原和盐碱地)和三个沿海湿地子类(红树林、盐沼和潮坪)。该数据集通过结合2020年的LandsatSR数据与Sentinel-1数据,利用分层分类策略和局部自适应随机森林分类算法在谷歌......