AI语音智能体开发日记(九)LVGL 8.4.0 中文字体配置全攻略

相关链接:

AI语音智能体开发日记(一)如何为"小智"服务器启用并调试 License 功能-CSDN博客

AI语音智能体开发日记(二)解决 Wi-Fi 配网小程序的兼容性问题-CSDN博客

AI语音智能体开发日记(三)解决小程序配网中的蓝牙命名与MAC地址获取问题-CSDN博客

AI语音智能体开发日记(四)在FreeRTOS中构建线程安全的UART2通信模块-CSDN博客

AI语音智能体开发日记(五)为智能设备注入"灵魂"------详解MCP工具的注册与使用-CSDN博客

AI语音智能体开发日记(六)为智能体注入旋律------七牛云音乐服务的接入与避坑指南-CSDN博客

AI语音智能体开发日记(七)搞定功放控制------详解GX8006平台Mute电平配置-CSDN博客

AI语音智能体开发日记(八)LVGL 8.4.0 移植实战------从零构建嵌入式GUI-CSDN博客

AI语音智能体开发日记(九)LVGL 8.4.0 中文字体配置全攻略-CSDN博客

推荐链接:

AI语音智能体架构解析(一)系统架构全景图-CSDN博客

AI语音智能体架构解析(二)大模型(AI 的大脑)-CSDN博客

AI语音智能体架构解析(三)智控台(指挥中心)-CSDN博客

AI语音智能体架构解析(四)AI 语音终端(执行器官)-CSDN博客

AI语音智能体架构解析(五)小程序/APP(遥控器)-CSDN博客

推荐链接:

AI 应用 图文 解说 (一) -- 百度智能云 实现 语音 聊天-CSDN博客

AI 应用 图文 解说 (二) -- 百度智能云 ASR LIM TTS 语音AI助手程序 -CSDN博客

开发手记:LVGL 8.4.0 中文字体配置全攻略

在嵌入式GUI开发中,让屏幕正确显示中文往往是新手遇到的第一个"拦路虎"。默认的LVGL库通常只包含基础的ASCII字符,直接显示中文会变成方块或乱码。

今天这篇博客,我将详细记录在LVGL 8.4.0版本中,从零开始配置中文字体的完整流程。

我们将使用"阿里巴巴普惠体"作为示例,解决从字体获取、转换到代码适配的所有问题。

第一步:获取并转换字体文件

LVGL不能直接使用.ttf.otf等矢量字体文件,我们需要将其转换为C语言数组。

  1. 选择字体

    首先,我们需要一个支持中文且可免费商用的字体。这里推荐使用阿里巴巴普惠体 ,它字形清晰,非常适合屏幕显示。你可以从其官网或其他可信渠道下载.ttf格式的字体文件。阿里巴巴普惠体电脑版下载2026最新_阿里巴巴普惠体pc版免费下载_华军软件园

  2. 在线转换

    LVGL官方提供了一个非常方便的在线字体转换工具:LVGL Font ConverterFont Converter --- LVGL

    • Name : 给你的字体起个名字,例如 myFont
    • Size : 设置字体大小,例如 16
    • Bpp : 设置位深,4 bit-per-pixel 能在清晰度和内存占用之间取得不错的平衡。
    • TTF/WOFF font : 点击"Browse"上传你下载的 AlibabaPuHuiTi-3-35-Thin.ttf 文件。
    • Symbols: 这是最关键的一步!中文字库非常庞大,全部转换会导致生成的C文件巨大,耗尽MCU的Flash。因此,我们只转换项目实际需要用到的汉字。将所有需要用到的汉字(例如"重庆七月小玉门敦煌..."等)复制粘贴到这个文本框中。
    • 点击"Submit"按钮,即可下载生成好的 myFont.c 文件。
第二步:将字体文件集成到工程
  1. 放置文件

    将下载好的 myFont.c 文件复制到LVGL库的字体目录下。根据我们的项目结构,路径为:

    project/ln_model_public/components/gui/lvgl-8.4.0/src/font/

  2. 版本兼容性修复(关键步骤)

    由于LVGL版本迭代,在线转换工具生成的代码可能与LVGL 8.4.0不完全兼容,直接编译会报错。我们需要手动修改 myFont.c 文件。

    • 打开 myFont.c,找到大约第217行,你会看到如下代码:

      复制代码
      .static_bitmap = 0,
    • 将其修改为条件编译的形式:

      复制代码
      #if LVGL_VERSION_MAJOR >= 9
          .static_bitmap = 0,
      #endif

    这样修改后,.static_bitmap 字段只会在LVGL 9.x及以上版本中被包含,从而完美兼容LVGL 8.4.0。

第三步:在LVGL中注册新字体

文件就位后,我们需要在LVGL的配置文件中声明并启用它。打开 project/ln_model_public/components/gui/lvgl-8.4.0/lv_conf.h 文件进行修改。

  1. 声明字体

    lv_conf.h 文件中找到 LV_FONT_CUSTOM_DECLARE 宏定义的位置(大约在第422行),添加我们的字体声明:

    复制代码
    #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(myFont)

    如果需要声明多个自定义字体,可以这样写:

    复制代码
    #define LV_FONT_CUSTOM_DECLARE \
        LV_FONT_DECLARE(alFont12) \
        LV_FONT_DECLARE(alFont18) \
        LV_FONT_DECLARE(alFont24)
  2. 设置为默认字体

    接着,找到 LV_THEME_DEFAULT_FONT_NORMAL 宏定义(大约在第481行),将其指向我们的新字体:

    复制代码
    #define LV_THEME_DEFAULT_FONT_NORMAL &myFont //默认生成的字体文件

    LVGL主题有四种字体设置:小字体、默认字体、副标题字体和标题字体。我们将最常用的"默认字体"替换为自定义的中文字体,这样大部分文本都能正常显示中文了。

    复制代码
    #define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_16 //小字体
    #define LV_THEME_DEFAULT_FONT_NORMAL &myFont //默认字体,我们默认使用这个
    #define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_16 //副标题字体
    #define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_16 //标题字体
第四步:编写代码验证效果

最后,我们来编写一段测试代码,验证字体是否配置成功。在 usr_app.cusr_app_task_entry 函数中,创建两个标签(Label)来分别显示数字和中文。

编译并烧录固件后,如果一切顺利,你的屏幕左上角将会清晰地显示出"2026"和"重庆"。

总结

为LVGL添加中文字体,核心流程就是"获取TTF -> 在线转换 -> 修复兼容 -> 配置声明 -> 代码使用"。

其中有两个关键点需要特别注意:

  1. 按需转换:务必在转换工具中只输入项目实际用到的汉字,避免生成的C文件过大。
  2. 版本兼容:LVGL 8.4.0需要手动修改生成的C文件,通过条件编译来规避版本差异导致的编译错误。

掌握了这个方法,你就可以轻松地为你的嵌入式设备换上任何你喜欢的字体了。

相关推荐
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(28):MEM1——将记忆压缩融入推理,实现近似恒定上下文的长程智能体
论文阅读·人工智能·学习·开源·github
光锥智能11 小时前
荣耀将阿莱电影工作流融入机器人手机
人工智能·智能手机·机器人
云端漫步198711 小时前
HarmonyOS NEXT AI 智能生活助手:创建企业级 AI 工程与目录结构
人工智能·生活·harmonyos
ServBay11 小时前
Qwen3.8-Max 开源超大杯正式发布,如何让 AI 无感切换新模型
aigc·ai编程
2501_9467361611 小时前
在线考试平台如何选型?从功能、优势与应用场景角度详解
大数据·人工智能·算法
厚皮龙11 小时前
OpenCV 版本导致 AprilTag 检测数量不同
人工智能·opencv·webpack
苦猿的大模型日记12 小时前
Day44|Agent 可观测性与调试:它没报错,但它做错了
人工智能
天辛大师12 小时前
天心大师:不确定中锚定自我,AI生活的哲学命题
人工智能·算法·决策树·机器学习·生活·启发式算法
Beginner x_u12 小时前
Codex Rules 与 Skills:项目级和全局级配置一览
ai·codex·rules·skill