HoloCubic_AIO中文字体生成:LvglFontTool完整制作流程
【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO
HoloCubic_AIO是一款运行在 HoloCubic 小电视(ESP32 开发板)上的超多功能 AIO 固件,内置天气时钟、相册、视频播放、桌面投屏、Web 服务、bilibili 粉丝等应用。由于 ESP32 的 Flash 空间有限,固件无法内置完整中文字库,需要借助LvglFontTool按"用到的汉字"裁剪生成 LVGL 中文字体文件。本文将带你完整走通这套中文字体生成流程 🛠️
一、为什么必须手动生成中文字体?
- 空间限制:全量中文字库动辄几十 MB,而 ESP32 的 Flash 通常只有几 MB,必须"按需裁剪"。
- LVGL 机制:固件 UI 基于 LVGL 图形库构建,中文字体本质是打包成 C 数组的字模文件(bitmap),编译时直接烧进固件。
- 项目惯例:HoloCubic_AIO 中的字库都是先用 LvglFontTool V0.4.zip) 生成,再提取去重后的汉字表维护在字库说明文档中,例如 AIO_Firmware_PIO/src/resource/font/README.md。
二、第一步:收集需要显示的汉字
字体生成的核心是先确定字表。推荐做法:
- 把 UI 上会显示的所有中文(界面文案、天气提示、城市名等)先写进一个
.c文件的注释里。 - 用工程自带的提取脚本自动去重收集汉字:
python Script/get_font.py 字模.c文件的路径该脚本位于 Script/get_font.py,它会扫描注释中的汉字并去重输出完整字表。项目里已有现成样例:lv_simulater_platformio/src/font/ch_font_20.c(微软雅黑粗体、字形高度 20),其对应字表维护在 lv_simulater_platformio/src/font/README.md,包含全部 ASCII 符号 + 常用汉字 + 城市名用字。
💡 小提示:天气功能要显示全国城市名,字表需要额外补充地名用字(如"邛邡邢郏鄢"等生僻字),可参考 AIO_Firmware_PIO/src/resource/font/README.md 中的扩展字表。
三、第二步:用 LvglFontTool 生成字体文件
打开 Docs/字体转换工具(源作者阿里兄).zip.zip) 中的LvglFontTool V0.4,关键参数建议如下:
| 参数 | 推荐设置 | 说明 |
|---|---|---|
| 字体 | 楷体 / 微软雅黑粗体 | 小屏幕下楷体(如 16px)更清晰 |
| 字形高度 | 16 或 20 | 高度越小,Flash 占用越少 |
| 编码 | Unicode | 与项目字库保持一致 |
| 灰度 | 开启(4 位灰度) | 边缘平滑,显示更美观 |
把上一步收集的字表粘贴进工具,选择输出为C 数组格式,即可得到字体文件。
工程内附了一份现成成品可对照:AIO_Firmware_PIO/lib/font/font_unicode_kai_16.c,文件头明确标注"本字体文件由 Lvgl Font Tool V0.4 生成",内容为glyph_bitmap[]位图数组 + LVGL 字体结构体:
四、第三步:集成到固件工程
- 把生成的
.c字体文件放进工程的字体目录,如 AIO_Firmware_PIO/lib/font/ 或应用自己的resource/font/目录。 - 在需要显示中文的 LVGL 控件上指定该
lv_font_t字体即可。 - 固件整体采用低耦合的模块化框架,字体属于公共资源,修改后重新编译烧录即可生效:
五、常见问题排查(避坑指南)
- 编译后 Flash 爆了?优先降低字形高度(20→16),并删掉字表中不用的汉字。
- 屏幕上出现"豆腐块"(□)?说明显示的文字不在字表里,把它补进字表后用 LvglFontTool 重新生成。
- 想在电脑上先验证效果?工程附带 LVGL 模拟器工程 lv_simulater_platformio/,把新字体放进
src/font/即可在 PC 上直接预览,不用烧板子。 - 不确定脚本怎么用?官方说明见 README.md 中"lvgl的字体生成"一节。
六、相关文件速查表
| 文件 | 作用 |
|---|---|
| Docs/字体转换工具(源作者阿里兄).zip.zip) | LvglFontTool V0.4 工具本体 |
| Script/get_font.py | 从字模 C 文件中提取去重汉字 |
| AIO_Firmware_PIO/lib/font/font_unicode_kai_16.c | 楷体 16px 成品字体示例 |
| lv_simulater_platformio/src/font/ch_font_20.c | 微软雅黑粗体 20px 字体(模拟器用) |
| AIO_Firmware_PIO/src/resource/font/README.md | 字表清单与提取脚本用法 |
按照"收集汉字 → 生成字模 → 集成编译"三步走,你就能为 HoloCubic_AIO 定制任意内容的中文字体了 🚀
【免费下载链接】HoloCubic_AIOHoloCubic超多功能AIO固件 基于esp32-arduino的天气时钟、相册、视频播放、桌面投屏、web服务、bilibili粉丝等项目地址: https://gitcode.com/GitHub_Trending/ho/HoloCubic_AIO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考