ESP32 ESP-IDF LVGL8 显示中文
陳拓 2022/12/15-2022/12/16
1. 開發(fā)環(huán)境
《ESP32 ESP-IDF LVGL8.3.3移植》
ESP32 ESP-IDF LVGL8.3.3移植_晨之清風的博客-CSDN博客ESP32 ESP-IDF LVGL8.3.3移植。https://blog.csdn.net/chentuo2000/article/details/128269394?spm=1001.2014.3001.5501
2. 使用LVGL自帶的中文字庫
- 字庫文件
~/esp442/esp32_lvgl833/components/lvgl/src/font/lv_font_simsun_16_cjk.c
其中:
CJK是CJK Unified Ideographs的縮寫,意思是“中日韓統(tǒng)一表意文字”,把分別來自中文、日文、韓文、越文中的本質、意義相同、形狀一樣或稍異的表意文字賦予相同編碼,其中主要為漢字,也有仿漢字如日本國字、韓國獨有漢字、越南的喃字等。
這個lv_font_simsun_16_cjk字庫只有1000個常用字和部首偏旁。在
~/esp442/esp32_lvgl833/components/lvgl/src/lv_conf_internal.h
中有說明:
#ifndef LV_FONT_SIMSUN_16_CJK#ifdef CONFIG_LV_FONT_SIMSUN_16_CJK#define LV_FONT_SIMSUN_16_CJK CONFIG_LV_FONT_SIMSUN_16_CJK#else#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/#endif #endif1000個最常見的CJK字根(偏旁部首)
- 配置項目
idf.py menuconfig
1) 選擇theme字號
?
2) 選擇中文字庫
使用自帶的中文字庫Simsun 16 CJK。
選擇Enable Dejavu 16 Persian, Hebrew, Arabic letters是為了能通過后面的編譯。
3) 選擇雙向文本
?
選擇Support bidirectional text是為了能通過后面的編譯。
- 使用LVGL自帶的例子
~/esp442/esp32_lvgl833/components/lvgl/examples/widgets/label/lv_example_label_3.c
代碼中有編譯條件
#if LV_USE_LABEL && LV_BUILD_EXAMPLES && LV_FONT_DEJAVU_16_PERSIAN_HEBREW && LV_FONT_SIMSUN_16_CJK && LV_USE_BIDI其中:LV_USE_LABEL和LV_BUILD_EXAMPLES是默認配置。其他3個條件就是我們在前面配置中所選擇的。
- 修改main.c
添加頭文件:
#include "examples/lv_examples.h"修改create_demo_application函數(shù)
static void create_demo_application(void) {lv_example_label_3(); }- 修改main目錄下的?CMakelists.txt?
- 編譯、燒寫
- ST7789 320x240顯示屏效果
操作細節(jié)見《ESP32 ESP-IDF LVGL8.3.3移植》
ESP32 ESP-IDF LVGL8.3.3移植_晨之清風的博客-CSDN博客ESP32 ESP-IDF LVGL8.3.3移植。https://blog.csdn.net/chentuo2000/article/details/128269394?spm=1001.2014.3001.5501
3. 自定義中文字庫
- 介紹一個很好的學習LVGL的資源網站
http://lvgl.100ask.net/8.2/tools/fonts-zh-source.html
我們可以從這里找到很多免費的字庫,網站有視頻教你怎樣使用。
3.1 使用Windows字庫
- 選擇字庫
我們可以使用Windows帶的字庫:
例如,我們選擇華文隸書。
復制粘貼所選字體到另一個目錄,得到文件:
STLITI.TTF
- 使用lvgl官方在線轉換工具
https://lvgl.io/tools/fontconverter
?如圖設置,點擊Convert得到字庫文件lv_font_stliti_24.c
- 選項說明
Name:字庫名稱lv_font_stliti_24
Size:字符大小24
Bpp:每個像素的比特(位),位數(shù)越大效果越好,字庫尺寸越大。
?
Font compression:啟用字體壓縮(減小大小,但導致渲染速度變慢)
Horizontal subpixel rendering:水平子像素渲染(可能會提高字體質量,但會導致更大的字體庫)
Try to use glyph color info from font to create grayscale icons:嘗試使用字體中的字形顏色信息創(chuàng)建灰度圖標。
由于灰色色調是通過透明度模擬的,所以僅在對比度背景上效果會很好。
詳細說明見:
https://docs.lvgl.io/master/overview/font.html#subpixel-rendering
?
Range:選擇字符范圍,我們只選擇了ASCII碼表。可以選擇多個范圍,用空格分隔。
Symbols:如果在Range中選擇全字庫范圍將得到一個很大的字庫,占用很多空間。在項目中我們只用到少量中文,將這些中文寫在Symbols中,這樣生成的字庫很小。
?
Include another font:包含另一個字庫。
這個功能可以將不同的字庫合并到一個字庫中
具體的使用方法見:
https://www.bilibili.com/video/BV1Ya411r7K2/?p=15
3.2 在程序中使用生成的字庫文件
- 將字庫文件lv_font_stliti_24.c復制到font目錄下
~/esp442/esp32_lvgl833/components/lvgl/examples/assets/font
- 修改main目錄下的?CMakelists.txt?
- 在代碼中引用自定義字體
按照轉換工具下面的說明,要在代碼中添加對自定義字體的引用聲明:
LV_FONT_DECLARE(lv_font_stliti_24);- 修改lv_example_label_3.c 文件的lv_example_label_3函數(shù)
- 顯示效果
參考文檔
https://m.elecfans.com/article/1080052.html
總結
以上是生活随笔為你收集整理的ESP32 ESP-IDF LVGL8 显示中文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海康网路摄像头/监控 Ubuntu 16
- 下一篇: Python 注释