欢迎光临散文网 会员登陆 & 注册

基于Arduino框架下的ESP32移植LVGL教程

2023-03-24 12:21 作者:yogurt3_  | 我要投稿

  这篇文章将成为一个教程--关于如何在Arduino框架下ESP32移植LVGL(Light and Versatile Graphics Library)。学习之余,在此写下我的学习笔记。

关于LVGL

  简而言之,LVGL是一个具有广泛功能的轻量图形库。基本上适用于所有的显示器,因为其本身不是LCD驱动库---它依赖于其他额外的库来驱动显示器。此外,它还是一个开源库,在此附上开源链接。

硬件软件

硬件:
· ESP32开发板
· 带有SPI接口的LCD
· USB供电线
软件:
· Platform IO(也可以使用Arduino IDE,本教程中使用前者)
· TFT_eSPI或其他显示屏驱动库(例如Adafruit GFX Library)

开发环境

  对于本教程,我将使用PlatformIO开发环境。该IDE相较于Arduino IDE,个人使用感觉更加便捷容易。
  要开始使用 PlatformIO,首先,你需要下载它。实际上,它是 Visual Studio Code 的一个附加组件——可扩展的文本编辑器。
安装后,可以创建你的第一个项目。使用方法在此就不赘述。 

硬件设置

本教程中,使用是的1.44寸TFT屏模块/SPI,驱动IC是ST7735,连接ESP32开发板如下

移植LVGL前驱动LCD

  首先,你需要一个在 LVGL 之外工作的显示器——只有它的驱动程序库。根据显示类型(SPI、I2C、并行),有多种选择。如果你使用 Adafruit 的(或具有相同驱动器 IC 的类似 LCD)显示器,则可以使用 Adafruit 库。你还可以使用基于 Adafruit 库的Bodmer 的 TFT_eSPI库。如果你已经熟悉 eSPi 库,则可以使用它。你还可以为显示器编写你自己的几个驱动程序函数——这样你将节省一些程序内存,因为 LVGL 只需要上述库中的一些函数。本教程中使用的是TFT_eSPI。

TFT_eSPI驱动TFT显示屏

  你可以在PlatformIO中直接下载,或从GithubTFT_eSPI获取,也可以直接获取本教程的驱动代码。
  将库文件添加至工程后,需要编辑修改 User_Setup.h文件以满足你的要求。以下代码为本教程

此外,还需实例化一个tft对象并初始化

至此,LCD屏幕驱动完成。

ESP32移植LVGL

  当LCD屏幕启动并运行时,下一步就是使LVGL适配你的显示设置。首先,下载LVGL至你的PlatformIO工程中,下载方法同上TFT_eSPI。本教程使用的@8.2.0版本。
ps:并非本教程中所有内容对不同版本的lvgl完全适用。

编辑配置文件

  一开始我们需要配置一些 LVGL 库。转到项目中的 LVGL 文件夹,找到“lv_conf_template.h”文件。将其重命名为“lv_conf.h”。然后,打开它进行编辑。在里面你会发现一行告诉你

“将这个文件复制并重命名为 lv_conf.h并放至 lvgl文件夹”。
首先,您应该将第一个定义更改为如下所示:

然后,找到一行:

使用 Arduino 时,您需要将其值更改为 1:

  虽然此文件中有更多设置,但需要更改这两行才能在 Arduino 系统上启动一个简单的 LVGL 示例。此外,如果你将 LV_TICK_CUSTOM 的值保留为 0,则屏幕不会定期更新或在屏幕触摸后更新。

编辑main.cpp文件

  包含LVGL库

  注意到上面的 include 中有一条很长的路径。通常它应该像这样工作:

  但有时 PlatformIO 决定不查找所需的头文件,你将不得不从当前文件编写一个相对路径。

  接下来,让我们创建一些变量:

编写回调函数

  编写回调函数,用于将缓冲区的内容复制到显示器的特定区域。

设置功能

  当我们完成以上步骤后,需要将所需代码添加至 setup()函数中:

  编译代码并烧录,至此,我们的LVGL移植完毕。

教程源码链接及其他

教程源码链接:https://github.com/Yogurt-994/MyESP32Project/tree/master/NODEMCU-32_LVGL_JSON
LVGL 官方网站:https://lvgl.io/
百问网韦东山LVGL 中文站:http://lvgl.100ask.net/8.2/index.html


基于Arduino框架下的ESP32移植LVGL教程的评论 (共 条)

分享到微博请遵守国家法律