1. 为什么ESP32上的汉字显示是个“老大难”?
如果你玩过ESP32搭配LVGL做UI,十有八九在显示汉字这块栽过跟头。我刚开始做项目的时候,满心欢喜地写了个界面,结果一跑起来,该显示中文的地方全是空白方块,或者干脆乱码,那感觉就像点了一桌满汉全席,结果端上来的全是空盘子,别提多郁闷了。这背后的原因其实很简单:LVGL这个优秀的开源图形库,其默认的字体引擎是为拉丁字母等字符集设计的,对包含成千上万个字符的汉字库“原生支持”并不友好。ESP32本身的Flash和RAM资源又比较有限,你不可能把一整套完整的汉字字库(比如一个完整的.ttf文件)直接塞进去,那样空间早就爆了。
所以,核心矛盾就来了:我们既想在小巧的ESP32上跑起华丽的LVGL8界面,又想让它能流畅、正确地显示我们需要的汉字。这就像既要马儿跑,又要马儿不吃草。怎么办?答案就是 “按需取字” 。我们不需要把整个新华字典都背下来,只需要记住我们界面里真正用到的那些字就行了。LvglFontTool 这个神器,干的就是这个“精挑细选”的活儿。它能把电脑上漂亮的TrueType字体(.ttf),转换成LVGL能认识的、并且只包含你指定汉字的、极度精简的C语言字体文件。这样一来,字体体积可能从几兆字节缩小到几十千字节,完美适配ESP32的存储空间。
但事情还没完,LVGL版本升级到8.x之后,字体相关的内部结构体有了一些调整,这就导致直接用LvglFontTool生成的文件不能直接编译通过,需要咱们手动“微调”一下。这个过程听起来有点技术性,但别怕,我踩过的坑都会带你绕过去。接下来,我就手把手带你从字体转换、代码修改到实际应用,彻底搞定ESP32+LVGL8的汉字显示难题。
2. 手把手使用LvglFontTool“榨干”字体体积
工欲善其事,必先利其器。首先,你得找到LvglFontTool这个工具。它是由社区里的热心开发者“阿里兄”维护的,你可以在一些嵌入式开发论坛或开源硬件社区里找到它的下载地址(例如在知名的电子开发者论坛搜索关键词即可找到)。这里我强烈建议使用 4.0及以上 的版本,因为它对LVGL8的兼容性更好。
拿到工具,打开它,界面可能不那么炫酷,但功能直给。咱们一步步来:
第一步:告诉它你需要哪些字。 这是最关键的一步,直接决定了最终字体文件的大小。在工具的“输入字符”框里,把你项目中所有界面会用到的汉字、标点,一个一个敲进去。比如你的界面要显示“温度:25℃”、“设置”、“确认”、“返回”,那你就把这些字都输进去。有个偷懒的技巧是使用 “常用汉字” 按钮,它会导入一个包含几千个常用汉字的集合。但慎用!除非你的ESP32 Flash空间非常充裕(比如16MB),否则一股脑儿导入,生成的字体文件可能会非常大。我的经验是,对于简单的设备界面,手动输入几十到一百来个字完全够用了,体积能控制在20KB以内,非常划算。
第二步:为你选中的字挑一件“好看的衣服”。 点击“选择字体”按钮,从你的电脑里挑一个你喜欢的.ttf或.otf字体文件。这里有个小坑:在Windows 10/11上,由于系统权限,你可能无法直接访问C:\Windows\Fonts目录。别慌,有个更简单的办法:打开系统的“控制面板”,找到“字体”设置,在这里你能看到所有已安装的字体。然后,把你心仪的字体(比如“微软雅黑”、“思源黑体”)复制(Ctrl+C)出来,粘贴(Ctrl+V)到桌面或其他任意文件夹,再从LvglFontTool里选择这个拷贝出来的文件就行了。
第三步:关键参数设置。 在转换前,留意一下工具里的几个参数:

3334

被折叠的 条评论
为什么被折叠?



