1 点亮你的屏幕

本次培训所用的屏幕是2寸电容触摸屏,屏幕驱动IC为ST7789,触控驱动IC为FT6336。

电容触摸屏的显示与触控部分的驱动是分离的,本次教程暂不涉及触控。因此仅需考虑ST7789的使用即可。

信号线引脚号说明
LCD DC39液晶屏寄存器/数据选择控制信号(低电平:寄存器,高电平:数据)
LCD MOSI40液晶屏幕写数据信号线
LCD CS6液晶屏片选控制信号(低电平使能)
LCD SCK41液晶屏通信时钟线
LCD BL42液晶屏背光控制线

安装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 倍。

Avatar photo

作者 skyate

发表回复