本次 ESP32-S3 开发实操核心围绕GUI Guider 可视化工具展开,完成了工具的安装配置、界面绘制、中文显示设置,以及生成代码向 ESP-IDF 框架(VS Code 开发环境)的移植适配,最终实现了可视化设计界面在 ESP32-S3 板载 LCD 上的正常显示。以下为完整实操流程、关键注意事项及结合项目开发的思考与总结,为后续嵌入式图形界面可视化开发提供参考。

一、GUI Guider 工具安装与基础配置

GUI Guider 是 LVGL 官方推出的可视化界面设计工具,可通过拖拽组件快速绘制嵌入式图形界面并自动生成配套代码,大幅降低 LVGL 界面开发的难度,其安装与基础配置需完成 JDK 环境检查、软件安装及界面汉化,具体步骤如下:

  1. JDK 环境检查GUI Guider 运行依赖 JDK 环境,首先通过WIN+R打开系统运行窗口,输入cmd打开控制台,执行命令java -version,若控制台显示 JDK 版本信息则说明环境已安装;若提示命令未找到,需先下载安装适配的 JDK 版本,完成环境配置后再进行后续操作。
  2. 软件安装双击 GUI Guider 安装包,安装过程中选择中文版本,自定义软件安装路径后点击安装,等待安装进度完成即可;安装完成后打开软件,若未注册账户需先完成注册,已有账户直接登录。
  3. 界面汉化配置软件登录成功后,在系统设置中将界面语言修改为中文,便于后续界面绘制与操作,完成后保存设置,重启软件即可生效。

二、GUI Guider 工程创建与界面绘制

完成工具基础配置后,通过新建工程、可视化拖拽组件实现界面设计,并完成编译预览,快速验证界面设计效果,具体操作步骤如下:

  1. 新建工程打开 GUI Guider 软件,点击创建新工程,根据开发需求配置工程基础信息(如适配 LVGL 版本、硬件分辨率等,需与 ESP32-S3 板载 LCD 参数匹配),配置完成后点击确认,生成空白工程。
  2. 可视化界面绘制GUI Guider 界面分为三大核心区域:左侧为界面与组件显示区,包含各类 LVGL 基础组件(按钮、文本、下拉列表、定时器等);中间为界面绘制区(幕布),是核心设计区域;右侧为组件属性显示区,可调整组件的位置、大小、颜色、显示内容等参数。开发时从左侧组件区拖拽所需组件至中间幕布,在右侧属性区完成组件个性化配置,按需添加多个界面与组件,实现整体界面布局设计。
  3. 工程编译与效果预览界面设计完成后,点击软件右上角编译运行按钮,工具会自动对设计的界面进行编译,生成预览窗口,可直观查看界面显示效果、组件交互逻辑,若需修改可直接返回绘制区调整,直至达到预期效果。

三、GUI Guider 中文显示配置

GUI Guider 默认仅支持一种字体显示中文,若需使用宋体、黑体等自定义字体,需手动导入系统字体文件,具体操作步骤如下:

  1. 打开电脑系统字体目录C:\Windows\Fonts,将需要使用的字体文件(如宋体、黑体)复制到自定义文件夹(工具无法直接识别系统字体目录,需提前复制);
  2. 回到 GUI Guider 软件,点击顶部菜单栏工具→导入字体,在文件选择窗口中定位到上述自定义文件夹,选择需要导入的字体文件完成添加;
  3. 字体导入成功后,在组件属性区的字体选择栏中即可找到新增字体,选中后即可实现组件的中文内容显示,按需调整中文字体大小、颜色等参数。

四、GUI Guider 生成代码向 ESP32-S3 工程(VS Code)移植

完成界面设计并预览无误后,将 GUI Guider 自动生成的代码移植到 VS Code 中的 ESP-IDF 工程,实现设计界面在 ESP32-S3 板载 LCD 上的实际显示,核心分为文件拷贝、内存拓展、代码编写、编译烧录四步,具体操作如下:

步骤 1:获取 GUI Guider 生成的核心文件

打开 GUI Guider 工程目录,找到customgenerated两个核心文件夹,这两个文件夹包含了界面设计的所有代码、配置文件及资源文件,是移植的关键。

步骤 2:将核心文件放入 ESP32-S3 工程指定目录

在 VS Code 中打开 ESP32-S3 的 ESP-IDF 工程,在工程的main文件夹下新建ui 文件夹,将上述customgenerated文件夹完整拷贝至ui文件夹中,保证文件路径无误,避免后续编译时出现文件找不到的错误。

步骤 3:拓展 ESP32-S3 内存,解决内存不足问题

GUI Guider 生成的代码包含界面资源文件,占用内存较大,ESP32-S3 默认分区表内存无法满足需求,需自定义分区表拓展内存,具体操作:

  1. 在 VS Code 的 ESP32-S3 工程根目录下新建文件,命名为partitions.csv
  2. 向该文件中复制粘贴以下分区表配置代码,保存文件:
  3. # ESP-IDF Partition Table
    # Name,     Type,     SubType,     Offset,     Size,     Flags
      nvs,      data,     nvs,         0x9000,     0x6000,   ,
      phy_init, data,     phy,         0xf000,     0x1000,   ,
      factory,  app,      factory,     0x10000,    0x1F0000, ,
      vfs,      data,     fat,         0x200000,   0xA00000, ,
      storage,  data,     spiffs,      0xc00000,   0x400000, ,

  4. 打开 ESP-IDF 的 SDK 配置界面(idf.py menuconfig),依次找到:
    • serial flasher configFlash size,选择与开发板匹配的闪存大小;
    • Partition TablePartition Table,选择Custom partition table CSV
    • Custom partition CSV file中选择上述新建的partitions.csv文件;
  5. 保存 SDK 配置,退出配置界面,重新编译工程即可完成内存拓展。

步骤 4:在 VS Code 中编写移植代码,实现界面调用

    在 VS Code 的 ESP32-S3 工程中,打开hello_world_main.c文件,编写如下代码,实现硬件初始化、LVGL 启动及 GUI Guider 生成界面的调用,完整代码如下:

    #include <stdio.h>
    #include <inttypes.h>
    #include "sdkconfig.h"
    #include "freertos/FreeRTOS.h"
    #include "freertos/task.h"
    #include "esp_chip_info.h"
    #include "esp_flash.h"
    #include "esp_system.h"
    #include "LCD/lcd.h"
    #include "demos/lv_demos.h"
    #include "timer.h"
    // 引入GUI Guider核心头文件
    #include "gui_guider.h"
    #include "custom.h"
    
    // 定义LVGL界面句柄
    lv_ui guider_ui;
    
    void app_main(void)
    {
        // 底层硬件初始化:I2C总线、IO扩展芯片
        bsp_i2c_init();
        pca9557_init();
        // 启动LVGL移植驱动,完成与硬件的适配
        bsp_lvgl_start();
        // 初始化GUI Guider设计的界面
        setup_ui(&guider_ui);
        // 初始化自定义组件与逻辑
        custom_init(&guider_ui);
    
        // 死循环维持程序运行,保证界面持续显示
        while (1) {
            vTaskDelay(pdMS_TO_TICKS(10));
        }
    }

    步骤 5:编译烧录与效果验证

    代码编写完成后,在 VS Code 的终端中依次执行 ESP-IDF 编译(idf.py build)、烧录(idf.py flash)命令,烧录完成后重启 ESP32-S3 开发板,板载 LCD 屏幕将正常显示 GUI Guider 中设计的可视化界面,可进一步添加定时器等功能,实现界面动态效果(如时间实时显示)。

    五、实操全程关键注意事项

    本次 GUI Guider 工具使用与代码移植实操中,多个环节的细节直接影响开发结果,结合实操过程整理核心注意事项,规避同类型开发问题:

    1. 环境与安装环节:JDK 环境是 GUI Guider 运行的前提,需保证版本与工具适配;安装软件时务必选择中文版本,后续汉化更便捷;工具登录后需及时完成界面汉化,降低后续操作难度。
    2. 界面绘制环节:新建 GUI Guider 工程时,LVGL 版本、硬件分辨率需与 ESP32-S3 开发板及工程中的 LVGL 版本严格匹配,否则会出现代码移植后界面显示错乱、组件不兼容等问题。
    3. 中文显示环节:系统字体目录无法被工具直接识别,需提前将字体文件复制到自定义文件夹再导入;导入字体后需在组件属性区手动选择,否则仍会使用默认字体。
    4. 文件移植环节customgenerated文件夹必须完整拷贝至 ESP32-S3 工程的main/ui目录下,文件路径不可随意修改,否则编译时会出现头文件、源文件找不到的报错。
    5. 内存拓展环节:自定义分区表文件必须命名为partitions.csv,配置代码不可修改格式;SDK 配置中需准确选择自定义分区表文件,且 Flash size 需与开发板实际闪存大小匹配,否则会出现烧录失败、内存不足的问题。
    6. 代码编写环节:必须引入gui_guider.hcustom.h头文件,定义lv_ui guider_ui句柄;硬件初始化、LVGL 启动需在界面初始化之前执行,执行顺序不可颠倒;死循环中的延时参数建议设置为 10ms,保证界面动态效果的流畅性。
    7. 编译烧录环节:修改分区表后必须重新保存 SDK 配置并重新编译工程,否则分区表配置不生效;烧录时需保证 ESP32-S3 开发板与电脑连接正常,选择 UART 烧录方式。

    六、项目开发思考与总结

    本次实操实现了 GUI Guider 从安装配置、界面设计到代码移植的全流程操作,将可视化设计的界面成功移植到 ESP32-S3 开发板,相较于纯手写 LVGL 代码,可视化工具大幅提升了开发效率,结合实操过程与嵌入式图形界面项目开发需求,形成以下思考与总结:

    1. 本次实操核心技术收获

    1. 掌握了 GUI Guider 可视化工具的完整使用流程,包括环境检查、软件安装、工程创建、界面绘制、中文显示配置及编译预览,理解了可视化工具 “所见即所得” 的开发优势。
    2. 学会了 GUI Guider 生成代码向 ESP-IDF 框架的移植方法,掌握了核心文件拷贝、自定义分区表拓展内存、移植代码编写的关键步骤,积累了第三方工具代码与 ESP32-S3 工程适配的经验。
    3. 进一步深化了 LVGL 图形库与 ESP32-S3 硬件的适配逻辑,理解了bsp_lvgl_start()的底层作用,以及硬件初始化、LVGL 启动、界面初始化的执行顺序,规避了硬件与软件配置的冲突问题。
    4. 掌握了 ESP32-S3 自定义分区表的配置方法,学会了通过partitions.csv文件拓展内存,解决了嵌入式开发中资源文件占用内存过大的常见问题,该方法也适用于其他需要大内存的 ESP32-S3 开发场景。

    2. 可视化工具开发的项目优势与思考

    1. 开发效率大幅提升:GUI Guider 通过拖拽组件即可完成界面设计,无需手动编写 LVGL 组件的创建、配置代码,自动生成的代码规范、无冗余,相较于纯手写代码,节省了 80% 以上的界面开发时间,尤其适合复杂界面的快速设计,非常适合嵌入式项目的快速原型开发。
    2. 降低开发门槛:对于 LVGL 基础薄弱的开发者,可视化工具无需深入掌握 LVGL 底层 API,只需通过图形化操作即可实现界面设计,降低了嵌入式图形界面的开发门槛,便于团队中硬件开发、软件开发人员的协作。
    3. 界面设计与硬件开发解耦:在实际项目开发中,可由 UI 设计人员通过 GUI Guider 完成界面可视化设计,生成代码后由嵌入式开发人员完成向 ESP32-S3 等硬件的移植适配,实现界面设计与硬件开发的解耦,提升团队整体开发效率。
    4. 灵活性与可定制性兼备:GUI Guider 不仅支持基础组件的拖拽设计,还支持自定义组件、事件逻辑、动态效果,生成的custom文件夹可手动修改代码,实现个性化功能开发,兼顾了开发效率与项目的个性化需求。

    3. 实际项目开发中的优化方向

    1. 字体与资源优化:导入中文字体时,可对字体文件进行裁剪(仅保留项目所需的汉字),减小字体文件占用的内存;对于界面中的图片、图标等资源,可进行压缩处理,降低资源文件对 ESP32-S3 内存的占用。
    2. 代码分层与封装:将 GUI Guider 移植代码与硬件初始化、外设驱动代码进行分层封装,在app_main中仅保留核心调用逻辑,便于后续界面修改、功能拓展时的代码维护,提升项目的可扩展性。
    3. 交互逻辑的完善:GUI Guider 生成的代码仅包含基础界面显示逻辑,实际项目中需在custom文件夹中添加组件的交互逻辑(如按钮点击控制外设、下拉列表选择修改界面参数等),实现图形界面与硬件外设的联动,让界面具备实际的业务功能。
    4. 界面性能优化:对于复杂的多界面项目,需实现界面的懒加载与资源释放,避免同时加载所有界面导致的内存占用过高、界面卡顿;合理设置 LVGL 的刷新频率,兼顾界面流畅性与 ESP32-S3 的系统资源占用。

    4. 后续开发规划

    1. 深入学习 GUI Guider 的高级功能,包括自定义组件制作、界面动画设计、多语言切换等,实现更复杂、更美观的嵌入式图形界面设计,满足实际项目的界面需求。
    2. 结合 ESP32-S3 的板载外设(如姿态传感器、触摸屏、摄像头),在 GUI Guider 设计的界面中添加外设交互逻辑,实现 “界面操作 - 硬件响应 - 数据反馈” 的全流程功能,开发具备实际应用价值的嵌入式项目。
    3. 总结 GUI Guider 代码移植的通用模板,包括分区表配置、移植代码编写、资源优化等,形成标准化的移植流程,为后续不同 ESP32 系列硬件(如 ESP32、ESP32-C3)的 GUI Guider 代码移植提供参考。
    4. 对比 GUI Guider 与其他嵌入式可视化界面工具的优劣,结合项目需求选择合适的开发工具,同时深入学习 LVGL 底层源码,理解可视化工具生成代码的实现逻辑,能够自主解决工具开发与代码移植中的各类问题。

    七、实操最终效果

    本次实操通过 GUI Guider 完成了基础可视化界面的设计,成功移植到 ESP32-S3 开发板后,板载 LCD 屏幕可清晰显示设计的界面布局与中文内容;在此基础上添加定时器功能后,实现了时间实时显示等动态效果,界面显示流畅、无卡顿,组件交互正常,达到了预期的开发目标。

    Logo

    智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

    更多推荐