art-pi 添加 littlevGL2RTT(lvgl) 支持包
前言
体验了一把 rtt-thread studio 之后,发现真的太方便了,rt-thread 真的实在做一个开发者的生态系统,这样后面再进行物联网设备开发时,会大大降低开发难度,支持rt-thread。
硬件说明
- ART-PI
- 正点原子4.3 寸LCD显示屏( 800 * 480)
添加 littlevGL2RTT 支持包
手把手教程
1、使用 rt-thread studio 创建一个 art-pi 的 blink_led 示例工程。
创建完成之后,先编译一遍,正常情况下可以直接编译通过。
2、添加 LCD驱动 和 LVGL支持包,打开工程目录下的,RT-Thread Setting,点击 更多配置
。
在 硬件配置选项中添加 LCD驱动,勾选 Enable LCD
即可,勾选之后,保存工程,可以直接 ctrl + s
,保存工程。
在软件包选项中添加 littlelvgl2rtt
支持包,请按照图示添加lvgl支持包。
- 勾选
LittlevGL2RTT
包 - 版本好使用
latest
- LittlevGL2RTT Options 选项中要按照显示屏的参数进行配置,注意像素深度的计算
- 勾选
LittlevGL2RTT demo example
- 保存工程
3、修改 lcd_port.h
文件
4、构建工程,没有错误之后,下载工程
下载完成后,显示屏上应该可以正常显示lvgl的示例工程了。
添加触摸屏驱动
手把手教程
在工程的 RT-Thread Setting 中进行如下配置。
5、添加 i2c驱动支持
6、添加触摸屏驱动 GT9147 支持
软件包 -> peripheral libraries and drivers -> touch drivers(enable) -> GT9147 (enable)
配置完成后,保存工程,重新编译项目,下载到开发板上查看效果,查看 i2c驱动是否成功编译的方法,可以直接在 finsh
中使用 list_device
命令查看。
msh />list_device
device type ref count
-------- -------------------- ----------
lcd Graphic Device 1
i2c1 I2C Bus 0
uart4 Character Device 2
pin Miscellaneous Device 0
可以看到,i2c1 已经正确加载了,但是被使用了 0 次,下面就要想办法让 gt9147 驱动使用 i2c1 接口了。
9、添加 gt9147 驱动配置
修改 packages/gt9147-latest/src/gt9147.c
文件,增加如下驱动初始化配置代码。
#define GT9147_IRQ_PIN 108
#define GT9147_RST_PIN 51
int rt_hw_gt9147_port(void)
{
struct rt_touch_config config;
rt_uint8_t rst;
rst = GT9147_RST_PIN;
config.dev_name = "i2c1";
config.irq_pin.pin = GT9147_IRQ_PIN;
config.irq_pin.mode = PIN_MODE_INPUT_PULLDOWN;
config.user_data = &rst;
rt_hw_gt9147_init("gt", &config);
return 0;
}
INIT_DEVICE_EXPORT(rt_hw_gt9147_port);
8、添加 gt9147_sample
在 packages/gt9147-latest/samples
路径下,找到gt9147_sample.c 文件,将该文件加入到工程的 packages/gt9147-latest/
目录中,修改该文件,在代码末尾增加如下启动配置。
void touch_init(void)
{
gt9147_sample("gt",800,480);
}
INIT_APP_EXPORT(touch_init);
9、重新编译工程,并下载到ART-PI 上面。
___ ______ _____ ______ _ ______ _____ _____ _____
/ _ \ | ___ \|_ _| | ___ \(_) | ___ \/ _ \/ _ \|_ _|
/ /_\ \| |_/ / | | ______ | |_/ / _ | |_/ /| | | || | | | | |
| _ || / | | |______|| __/ | | | ___ \| | | || | | | | |
| | | || |\ \ | | | | | | | |_/ /\ \_/ /\ \_/ / | |
\_| |_/\_| \_| \_/ \_| |_| \____/ \___/ \___/ \_/
Powered by RT-Thread.
[D/drv.sdram] sdram init success, mapped at 0xC0000000, size is 33554432 bytes, data width is 16
[I/I2C] I2C bus [i2c1] registered
\ | /
- RT - Thread Operating System
/ | \ 4.0.3 build Nov 24 2020
2006 - 2020 Copyright by rt-thread team
[D/drv.lcd] LTDC init success
[I/touch] rt_touch init success
[I/gt9147] touch device gt9147 init success
id = 9 1 4 7
range_x = 480
range_y = 480
point_num = 5
[littlevgl2rtt] Welcome to the littlevgl2rtt.
[littlevgl2rtt] You can find latest ver from https://github.com/liu2guang/LittlevGL2RTT.
msh />list_device
device type ref count
-------- -------------------- ----------
lcd Graphic Device 1
gt Touch Device 1
i2c1 I2C Bus 1
uart4 Character Device 2
pin Miscellaneous Device 0
可以看看到,gt9147已经初始化成功,并且能够识别到 9147 id。
使用 list_device
查看设备驱动,已经能够看到 i2c1 驱动已经被使用了,并且也多了一个 gt 的设备,这就是刚刚使用 rt_hw_gt9147_init
初始化的 gt设备。
这个时候如果在触摸屏上用手指触摸,串口上将会打印触摸信息,这也是 gt9147_sample 示例的功能,用来检测屏幕触摸使用。
\ | /
- RT - Thread Operating System
/ | \ 4.0.3 build Nov 24 2020
2006 - 2020 Copyright by rt-thread team
[D/drv.lcd] LTDC init success
[I/touch] rt_touch init success
[I/gt9147] touch device gt9147 init success
id = 9 1 4 7
range_x = 480
range_y = 480
point_num = 5
[littlevgl2rtt] Welcome to the littlevgl2rtt.
[littlevgl2rtt] You can find latest ver from https://github.com/liu2guang/LittlevGL2RTT.
msh />
msh />
msh />0 394 392 25197 68
0 394 392 25213 68
0 394 392 25228 68
0 394 392 25244 68
0 394 392 25259 68
0 394 392 25275 68
0 394 392 25290 68
0 394 392 25318 68
0 394 392 25334 68
0 394 392 25349 68
0 395 392 25364 68
0 398 391 25380 68
0 416 388 25408 68
0 421 388 25423 68
0 424 388 25438 68
0 431 387 25466 68
0 437 384 25494 68
0 439 383 25510 68
0 440 382 25525 68
0 441 381 25541 68
0 441 380 25556 68
0 441 380 25584 68
0 441 380 25612 68
0 441 380 25639 68
0 441 379 25654 68
结尾说明
适配完 lvgl 支持包之后,发现使用这个支持包在 ART-PI 上面运行 lvgl的官方示例还是非常卡的,屏幕刷新不流畅,应该是刷屏的一个接口函数写的不是很好导致的,这个后面要优化一下,才能正常使用。
关于触摸屏驱动适配 lvgl 的接口,在 littlevGL2RTT 中,也已经留有了 littlevgl2rtt_send_input_event
接口函数,可以利用触摸驱动事件莱进行触发操作,完成对 lvgl的适配,这个留作后面再详细说明。
工程下载
这个 demo 工程还是非常简单的,推荐一步一步操作,尽量不要下载工程示例,该示例仅留作对比参考使用。
art-pi lvgl示例工程下载链接