1 点亮你的屏幕
本次培训所用的屏幕是2寸电容触摸屏,屏幕驱动IC为ST7789,触控驱动IC为FT6336。
电容触摸屏的显示与触控部分的驱动是分离的,本次教程暂不涉及触控。因此仅需考虑ST7789的使用即可。

| 信号线 | 引脚号 | 说明 |
| LCD DC | 39 | 液晶屏寄存器/数据选择控制信号(低电平:寄存器,高电平:数据) |
| LCD MOSI | 40 | 液晶屏幕写数据信号线 |
| LCD CS | 6 | 液晶屏片选控制信号(低电平使能) |
| LCD SCK | 41 | 液晶屏通信时钟线 |
| LCD BL | 42 | 液晶屏背光控制线 |
安装GFX Library for Arduino库支持,省去自行编写驱动程序的工作。

加载 Arduino_GFX_Library 库
#include <Arduino_GFX_Library.h>
配置使用的开发板
在本示例中使用的是ESP32,
并且使用的是HSPI 的硬件SPI引脚,
根据原理图,使用以下代码进行开发板的配置:
创建GFX通信总线接口驱动
/* More data bus class: <https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class> */ //Arduino_DataBus *bus = create_default_Arduino_DataBus(); Arduino_DataBus bus = newArduino_ESP32SPI(39 / DC /, 6 / CS /, 41 / SCK /, 40 / MOSI /, GFX_NOT_DEFINED / MISO /, HSPI / spi_num */);
创建GFX屏幕对象
Arduino_GFX *gfx = new Arduino_ST7789( bus, GFX_NOT_DEFINED /* RST */, 1 /* rotation */, true /* IPS */, 240 /* width */, 320 /* height */, 0 /* col offset 1 */, 0 /* row offset 1 */);
定义背光控制引脚的宏定义
#define GFX_BL 42
编写初始化程序
void screen_init(void)
{
gfx->begin();
gfx->fillScreen(WHITE);
#ifdef GFX_BL
pinMode(GFX_BL, OUTPUT);
digitalWrite(GFX_BL, LOW);
#endif
delay(5000); // 5 seconds
gfx->fillScreen(BLUE);
}
2 LVGL简介
LVGL(Light and Versatile Graphics Library) 是一款用 C 语言开发、兼容 C++ 的 免费开源嵌入式 GUI 库 ,以高可扩展性、低资源占用和强大功能著称。适用于从资源受限的微控制器到嵌入式 Linux 等多种平台,广泛应用于消费电子、工业控制、物联网终端等场景。LVGL 提供丰富的图形组件、现代化视觉效果、灵活的输入设备支持及跨平台模拟开发环境,助力开发者高效构建流畅、美观的嵌入式图形界面。
简而言之,LVGL 是一个轻量却强大的开源图形库,只需接入显示屏和输入设备,就能帮你在嵌入式系统上快速构建出流畅、美观的图形界面。
你只需要把 LVGL 加进你的工程里,告诉它你的显示屏怎么画图、你的输入设备怎么获取,它就能把所有繁琐的 GUI 工作帮你搞定。
功能上,它可以说是 麻雀虽小五脏俱全:
提供按钮、滑块、图表、图片等各种 UI 元素;
支持动画、滚动、抗锯齿、透明度等丰富效果;
支持多种输入设备,比如触摸屏、按键、编码器、鼠标等等;
能用多语言(UTF-8),界面可按语言切换;
多显示器也支持,哪怕颜色格式不同也能混合使用;
还支持像 CSS 一样的“样式系统”,界面随心自定义。
更重要的是,它是 跨平台、跟硬件无关 的。不管你用的是 STM32、ESP32、Raspberry Pi,甚至是 PC 上模拟,都可以跑 LVGL。
体积小: 能在只有几十 KB Flash 和 RAM 的芯片上跑;
易移植: 只要你的 MCU 能驱动显示器,就能跑 LVGL;
开发效率高: 有模拟器,UI 可以在 PC 上调试好再移植到真机;
支持 C 和 C++: 还能绑定到 MicroPython;
文档齐全、教程丰富: 而且社区活跃。
其实 LVGL 对硬件要求不高,一般的 16/32/64 位 MCU 都能跑,比如 STM32F4、ESP32、NRF52、NXP Kinetis、Raspberry Pi Pico 等都很合适。
最小要求大概是这样:
主频建议 16MHz 起步;
Flash 至少 64 KB(推荐 180 KB 以上);
RAM 至少 16 KB(推荐更高,尤其你界面丰富的话);
一个能刷显示的方式,比如 SPI、并口、RGB、HDMI 等都行;
显示缓冲区大小最好达到水平方向分辨率的 10 倍。
