esp32 lvgl8 使用外置中文字库个别字无法显示

在使用LVGL库时遇到问题,即使修改字库和调整标签尺寸也无济于事,LVGL只能一次性显示最多三个中文字符。为解决此问题,采取了字符截断策略,只加载不超过三个字符,超出部分不显示。例如,使用`lv_label_set_text_fmt`函数设置文本时,只包含三个字符的字符串。

类似于上图所示的问题。

期间多次修改字库文件,调整lvgl label大小,设置加载延迟都无效,最后发现lvgl一次性最多显示3个中文字符。室内温度能够显示可能是延迟1000ms显示外加温度已经加载进来了,只需要额外加载两个字 。

解决办法:

一次最多三个字符,超过三个则截断加载。

类似于

string show_data[14];
...
lv_label_set_text_fmt(ui_info, "%s %s %s", show_data[8], show_data[7], show_data[6]);

### 实现 ESP32LVGL 库的中文字体显示 为了在 ESP32使用 LVGL 库实现中文字符的显示,可以采用 FreeType 字库来处理复杂的字体渲染需求。FreeType 是一个开源的软件库,专门用于渲染 TrueType 和其他矢量字体格式。 #### 安装和配置必要的库文件 首先,在 GitHub 上下载并安装最新版本的 `lvgl` 库[^2]。接着,还需要获取 FreeType 的源码或预编译二进制包,并将其集成到项目环境中。对于 Arduino IDE 用户来说,则可以通过 Arduino Library Manager 来简化这个过程: ```cpp #include "lvgl/lvgl.h" #include "freertos/FreeRTOS.h" #include "driver/spi_master.h" // 初始化LVGL的任务句柄 static void lv_tick_task(void *arg) { lv_tick_inc(portTICK_PERIOD_MS); } ``` #### 配置 TFT 屏幕驱动程序 利用 `TFT_eSPI` 库完成对 TFT 显示屏的基础设置,包括但限于分辨率调整以及方向控制等功能[^3]。这一步骤至关重要,因为只有当硬件层面上准备就绪之后才能顺利加载自定义字体资源。 ```cpp #define LOAD_GFXFF // 启用外部字体支持 #include <TFT_eSPI.h> // 引入TFT_eSPI库 TFT_eSPI tft = TFT_eSPI(); // 创建tft对象实例 void setup() { Serial.begin(115200); // 开启串口调试信息输出 while (!Serial) {} // 设置屏幕分辨率为320*240像素点阵模式 tft.init(); tft.setRotation(1); // 将屏幕顺时针旋转90度 ... } ``` #### 加载与注册中文字体 通过调用 FreeType API 解析 TTF 文件中的汉字编码表,并创建相应的位图图像供 LVGL 使用。这里需要注意的是,由于内存限制的原因,建议仅缓存当前页面所需的文字图片而非整个字库。 ```c /* 注册新的字体 */ lv_font_t *reg_custom_font(const char *font_path, uint8_t font_size){ /* ...省略部分代码... */ return &custom_font; } /* 调用此函数以应用新字体样式 */ void apply_chinese_font(lv_obj_t *obj, const char *path_to_ttf_file, int size){ static lv_style_t style; lv_style_init(&style); lv_style_set_text_font(&style, reg_custom_font(path_to_ttf_file, (uint8_t)size)); lv_obj_add_style(obj ,&style,LV_PART_MAIN|LV_STATE_DEFAULT); } ``` 以上就是关于如何基于 ESP32 平台结合 LVGL 及 FreeType 工具链来进行简单而有效的中文文本呈现方案介绍[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值