LGVL配合FreeType为可变字体设置字重-ESP32篇(上)
- LGVL配合FreeType为可变字体设置字重-模拟器篇
- LGVL配合FreeType为可变字体设置字重-ESP32篇(上)
- LGVL配合FreeType为可变字体设置字重-ESP32篇(下)
前言
我们在上篇中已经实现了模拟器环境下可变字体字重的设置.
是时候掏出你吃灰已久的ESP32了.
本文会使用PlatformIO创建一个全新的项目,直到显示出现上篇文章末尾的动图为止.
如遇到问题,可参考常见问题内解答.
准备工作
软件准备
为了后续内容顺利进行下去,这里需要你安装好VSCode,并在VSCode上安装PlatformIO插件.
硬件准备
名称 | 数量 | 备注 | 图例 |
---|---|---|---|
ESP32 开发板 | 1 | \ | ![]() |
1.54寸LCD | 1 | 驱动ST7789,分辨率240x240 | ![]() |
杜邦线若干 | N | \ | ![]() |
创建项目
使用PlatformIO创建一个名为lvgl_with_freetype的项目
创建完毕后目录结构如下:1
2
3
4
5
6
7
8
9
10.
├── include
│ └── README
├── lib
│ └── README
├── platformio.ini
├── src
│ └── main.cpp
└── test
└── README
点亮屏幕
由于已经写过一篇点亮屏幕的文章,故本文不做过多赘述,只说明一下区别.
之前的屏幕分辨率是135x240,这次的屏幕分辨率是240x240.
所以需要使用TFT_eSPI里面的Setup24_ST7789.h
同时接线变更为
ESP32引脚名称 | 液晶屏引脚名称 |
---|---|
VCC | VCC |
GND | GND |
G23 | SDA |
G18 | SCL |
G2 | DC |
G4 | RES |
GND | CS |
VCC | BLK |
对应Setup24_ST7789.h
里面内容
1 |
随便写点内容.测试下屏幕的点亮.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library
void setup() {
Serial.begin(115200); // Set to a high rate for fast image transfer to a PC
tft.init();
tft.setRotation(0);
tft.fillScreen(TFT_BLACK);
}
void loop() {
tft.print("Ready Perfectly");
}
移植LVGL
屏幕点亮以后,就可以开始移植LVGL了.
当前时间为2021.12.19,GitHub上LVGL最新版本是8.1.1-dev
使用命令1
git clone https://github.com/lvgl/lvgl.git
获取LVGL后将其复制到lib文件夹下.此时文件目录为1
2
3
4
5
6
7
8
9
10
11
12.
├── include
│ └── README
├── lib
│ └── README
│ └── lvgl
│ └── TFT_eSPI
├── platformio.ini
├── src
│ └── main.cpp
└── test
└── README
platformio.ini文件内容1
2
3
4
5
6
7
8[env:pico32]
platform = espressif32
board = pico32
framework = arduino
monitor_speed = 115200
lib_extra_dirs =
lib/TFT_eSPI
lib/lvgl
修改LVGL配置文件
创建LVGL的配置文件,找到lvgl文件夹内的lv_conf_templat.h
,复制一份lv_conf_templat.h
并重命名为lv_conf.h
,然后打开lv_conf.h
为了使配置文件内容生效,找到第15行(其他版本的lvgl行数可能不在这里,需要自行寻找)1
改为1
找到第30行,修改颜色顺序1
改为1
找到第49行,启用自定义内存管理1
修改为1
找到第88行,设置自定义周期函数1
修改为1
找到第174行,启用LVGL日志功能1
修改为1
对接LVGL和TFT_eSPI
按照目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15.
├── include
│ └── README
├── lib
│ └── README
│ └── lvgl
│ └── TFT_eSPI
├── platformio.ini
├── src
│ └── main.cpp
│ └── Port
│ └── lv_port_disp.cpp
│ └── lv_port_disp.h
└── test
└── README
创建lv_port_disp.cpp
和lv_port_disp.h
1 |
|
1 |
|
再写个简单例子测试下LVGL能不能运行1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void setup() {
Serial.begin(115200); // Set to a high rate for fast image transfer to a PC
Port_Init();
lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Toou.\nAnata wa watashi no masuta ka?");
// 一切就绪, 启动LVGL任务
xTaskNotifyGive(handleTaskLvgl);
}
void loop() {
}
Toou.Anata wa watashi no masuta ka?
施工中,待更新
常见问题
Q:点亮屏幕时候,编译器报找不到TFT_eSPI
A:检查TFT_eSPI是否集成
将TFT_eSPI放置在lib文件夹内,并向platformio.ini文件末尾添加1
lib_extra_dirs = lib/TFT_eSPI
Q:在移植LVGL时候,屏幕颜色异常
A:可能与lv_conf.h文件内#define LV_COLOR_16_SWAP 0有关
可以尝试将此处的0改成1,或1改回0
环境:
1 | Espressif 32 (3.4.0) > ESP32 Pico Kit |