0.71inch LCD Module
| ||||||||||||||||||||||||
| ||||||||||||||||||||||||
产品介绍
产品简介
0.71 英寸圆形 LCD 模块,采用IPS 屏,160 x 160 像素,内置 GC9D01 驱动芯片,SPI 接口通信,适合集成到ESP32/树莓派Pico/Arduino等主控上,做一些创意仿真电子眼睛或可穿戴设备等应用。
产品参数
工作电压 | 通信接口 | 显示面板 | 控制芯片 |
---|---|---|---|
3.3V/5V | 4-wire SPI | IPS | GC9D01 |
分辨率 | 显示尺寸 | 像素间距 | 外形尺寸 |
160 × 160 pixels | 18 × 18 (mm) | 37.5 × 112.5 (μm) | 20.12 × 22.3 (mm) |
接口定义
工作原理
LCD 及其控制器
本款LCD使用的内置驱动器位GC9D01,分辨率为160×160 ,内部有GRAM,支持12/16/18位数据总线MCU接口,即RGB444,RGB565,RGB666三种颜色格式,这也是常用的RGB格式。
对于大部分的LCD控制器而言,都可以配置控制器的通信方式,通常都有8080并行接口、三线SPI、四线SPI等通信方式。此LCD使用四线SPI通信接口,这样可以大大的节省GPIO口,同时通信速度也会比较快。
其实呀你可以理解为就是一个正方形的屏幕在里面画了一个内切圆,我们只在这个内切圆中显示内容,其他位置的像素点就直接丢弃了,市面上的圆形LCD大多也是如此。
通信协议
注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏。
RESX为复位,模块上电时拉低,通常情况下置1;
CSX为从机片选, 仅当CS为低电平时,芯片才会被使能。
D/CX为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据
SDA为传输的数据,即RGB数据;
SCL为SPI通信时钟。
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHA = 0,在第一个跳变沿进行数据采集;
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。
从图中可以看出,当SCLK第一个下降沿时开始传输数据,一个时钟周期传输8bit数据,使用SPI0,按位传输,高位在前,低位在后。
产品尺寸
ESP32-C3下使用
器件准备
- ESP32-C3-Zero x1
- 0.71inch LCD Module x1
硬件连接
- 8PIN 杜邦线接口
LCD引脚 | ESP32C3 |
VCC | 5V |
GND | GND |
DIN | GPIO7 |
CLK | GPIO6 |
CS | GPIO5 |
DC | GPIO4 |
RST | GPIO8 |
BL | 3V3 |
环境搭建
下载和安装 Arduino IDE
- 点击访问Arduino官网,选择对应的系统和系统位数下载。
- 运行安装程序,全部默认安装即可。
安装ESP32开发板
- ESP32相关主板在Arduino IDE使用,须先安装“ESP32开发板”。
国内环境,推荐下载安装 ESP32_Arduino离线包 (推荐2.0.12版本),安装教程详见:Arduino 板管理教程
安装库
- 使用本产品,所需的库文件见Demo路径:
0.71inch-LCD-Module-Demo\ESP32-C3\libraries\
,库说明详见下表
库名称 | 说明 | 库安装要求 |
---|---|---|
TFT_eSPI | LCD驱动库 | “离线”安装 |
LVGL | LVGL库 | “离线”安装 |
- 库离线安装教程,详见:Arduino 库管理教程
示例程序
- 下载示例程序,并解压
- 打开示例,0.71inch-LCD-Module-Demo\ESP32-C3\examples
示例程序 | 说明 | 依赖库 |
---|---|---|
1.Text_and_Number_Display | 文字和数字显示 | TFT_eSPI |
2.Shapes_on_Circular_Display | 画图 | TFT_eSPI |
3.Animated_Eye1 | 仿真眼睛样式1 | TFT_eSPI |
4.Animated_Eye2 | 仿真眼睛样式2 | TFT_eSPI |
5.Animated_Eye12 | 仿真眼睛样式1和样式2,交替显示 | TFT_eSPI |
6.Image_Display | 显示图片 | TFT_eSPI 和 LVGL |
7.Clock | 时钟 | TFT_eSPI 和 LVGL |
- Arduino 示例工程设置:
01_Text_and_Number_Display
【程序说明】
- 此示例在 TFT 显示屏上循环显示从 00 到 99 的两位数数字,并在程序启动时展示一系列颜色过渡效果。适用于学习 ESP32 与 TFT 屏交互,可显示循环递增的两位数数字,有颜色过渡和文本显示,测试稳定性与可靠性
【代码分析】
- setup():
setup
函数在程序启动时执行一次,主要负责初始化 TFT 显示屏并进行一些初始设置tft.init();
初始化 TFT 显示屏,为后续的显示操作做好准备- 通过一系列的
tft.fillScreen()
和delay()
实现颜色过渡效果,展示了 TFT 显示屏的颜色填充功能,增加程序启动的视觉吸引力 tft.fillScreen(0x04FF);
设置特定的背景颜色,tft.setTextColor(TFT_WHITE, 0x04FF);
设置文本颜色,确保文本在背景下清晰可见tft.drawString("Hello, Waveshare!", 30, 40, 2);
显示欢迎消息,增强用户体验
- loop():
loop
函数在程序运行过程中不断循环,实现核心的数字显示功能置- 数字格式化:将整数
number
转换为字符串displayNumber
,并在数字为一位时添加前导零,确保两位数显示 tft.drawString(displayNumber, 55, 80, 6);
在显示屏特定位置以特定字体大小显示格式化后的数字number++
实现数字自增,当number
超过 99 时重置为 0,保证数字在 00 到 99 之间循环delay(1000)
控制数字更新速度,让用户能够清晰地看到数字变化
- 数字格式化:将整数
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
02_Shapes_on_Circular_Display
【程序说明】
- 此示例实现了在圆形显示屏上依次显示随机颜色的正方形、三角形和圆形的效果,展示了 TFT 显示屏的图形绘制功能和随机颜色生成的灵活性。适用于学习 ESP32 与圆形显示屏交互,依次绘制随机颜色的正方形、三角形和圆形,位于屏幕中心,每隔 3 秒切换,测试图形绘制稳定性
【硬件连接】
- 将开发板接入电脑
【代码分析】
- drawSquare():该函数用于绘制一个以随机颜色填充的正方形
uint16_t squareColor = tft.color565(random(0, 255), random(0, 255), random(0, 255));
生成一个随机的 RGB565 颜色,确保每次绘制的正方形颜色不同- 通过计算正方形的对角线长度(等于圆形的直径)和中心坐标,确定正方形的左上角坐标和尺寸
tft.fillRect(squareTopLeftX, squareTopLeftY, squareSize, squareSize, squareColor);
使用随机颜色填充正方形
- drawTriangle():此函数绘制一个以随机颜色填充的等边三角形
- 生成随机颜色
- 根据圆形的半径计算等边三角形的高度和边长
- 计算三角形的三个顶点坐标,并存储在
triangleX
和triangleY
数组中 tft.fillTriangle(triangleX[0], triangleY[0], triangleX[1], triangleY[1], triangleX[2], triangleY[2], triangleColor);
使用随机颜色填充三角形
- drawCircleInCenter():这个函数绘制一个以随机颜色填充的圆形,圆心位于屏幕中心
- 生成随机颜色
tft.fillCircle(centerX, centerY, 30, circleColor);
以屏幕中心坐标和固定半径绘制圆形并使用随机颜色填充
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
03_Animated_Eye1
【程序说明】
- 此示例利用 TFT_eSPI 库在不同处理器上驱动 TFT 显示屏展示动画眼睛效果,可配置参数且支持 DMA 提高性能,在主循环中持续更新眼睛状态。适用于学习 TFT_eSPI 库显示眼睛动画,可配置参数,利用状态机控制眨眼,测试性能
【硬件连接】
- 将开发板接入电脑
【代码分析】
- updateEye():根据不同的条件(是否有光感引脚)更新眼睛的虹膜大小,以实现眼睛对光线或自动变化的响应
- 函数开始根据是否定义了
LIGHT_PIN
来决定虹膜大小的更新方式。 - 若定义了光感引脚:
- 通过
int16_t v = analogRead(LIGHT_PIN);
读取光感引脚的模拟值。 - 根据
LIGHT_PIN_FLIP
等配置进行必要的反转操作(#ifdef LIGHT_PIN_FLIP
部分)。 - 对读取的值进行范围限制(
if (v < LIGHT_MIN) v = LIGHT_MIN; else if (v > LIGHT_MAX) v = LIGHT_MAX;
),确保光感值在合理范围内。 - 进行光感值到虹膜大小范围的映射(
v = map(v, 0, (LIGHT_MAX - LIGHT_MIN), IRIS_MAX, IRIS_MIN);
)。 - 根据是否定义了
LIGHT_CURVE
应用伽马曲线调整光感值(#ifdef LIGHT_CURVE
部分)。 - 最后,根据是否定义了
IRIS_SMOOTH
,选择平滑处理(滤波方式逐渐调整虹膜大小)或直接设置虹膜大小。
- 通过
- 若未定义光感引脚:
- 使用
newIris = random(IRIS_MIN, IRIS_MAX);
生成随机的新虹膜大小。 - 调用
split(oldIris, newIris, micros(), 10000000L, IRIS_MAX - IRIS_MIN);
函数,通过递归方式实现虹膜大小从旧值到新值的逐渐变化,并更新oldIris
为新值
- 使用
- 函数开始根据是否定义了
- Demo_2():通过循环展示一系列预先定义的图像,为用户呈现一个简单的动画序列
- 首先,使用
digitalWrite(device_A_CS, LOW);
将设备 A 的片选引脚置低,选择对应的设备或显示屏。 - 接着,调用
tft.pushImage(0, 0, 160, 160, gImage_Ax);
来将特定的图像(如gImage_A1
到gImage_A12
)推送到显示区域。这里的参数(0, 0, 160, 160)
可能指定了图像在显示屏上的起始坐标和大小。 - 然后,使用
digitalWrite(device_A_CS, HIGH);
将片选引脚置高,取消对当前设备或显示屏的选择。 - 最后,通过
delay(frameTime);
引入一定的延迟,控制每幅图像的显示时间,从而实现动画的连贯效果
- 首先,使用
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
04_Animated_Eye2
【程序说明】
- 此示例使用 LVGL 和 TFT_eSPI 库创建一个图形用户界面,显示一个 GIF 图像。适用于学习 ESP32 与 LVGL 和 TFT 屏交互,可显示 LVGL 图像,测试稳定性与可靠性
【硬件连接】
- 将开发板接入电脑
【代码分析】
- my_disp_flush(): LVGL的显示刷新回调函数,负责将 LVGL 中的图形数据刷新到 TFT 显示屏上
tft.startWrite();
:开始向 TFT 显示屏写入数据tft.setAddrWindow(area->x1, area->y1, area->x2 - area->x1 + 1, area->y2 - area->y1 + 1);
:根据传入的显示区域参数(area
)设置 TFT 显示屏的写地址窗口,明确即将写入数据的屏幕区域范围tft.pushColors(&color_p->full, (area->x2 - area->x1 + 1) * (area->y2 - area->y1 + 1), true);
:将 LVGL 提供的颜色数据(color_p
)按照指定区域大小(通过计算区域宽度和高度的乘积得到像素数量)推送到 TFT 显示屏上,其中true
表示推送数据后自动递增颜色指针,以便下次推送从下一个像素位置开始tft.endWrite();
:结束 TFT 显示屏的写操作,完成数据传输lv_disp_flush_ready(disp);
:通知 LVGL 当前的刷新操作已完成,LVGL 可以继续进行后续的图形处理操作,如准备下一帧数据等printf("LVGL_disp_flush\n");
:打印输出调试信息
- setup():依次初始化 LVGL、TFT 屏,初始化显示缓冲区,配置并注册显示驱动,创建并设置 GIF 对象位置与源图像
lv_init();
和tft.begin();
:初始化 LVGL 库,初始化 TFT 显示屏lv_disp_draw_buf_init(&draw_buf, buf, NULL, screenHeight * screenWidth / 15);
初始化 LVGL 的显示缓冲区,其中buf是用于存储显示数据的缓冲区数组,NULL表示不使用双缓冲(这里可以根据需要进行调整),screenHeight * screenWidth / 15
计算了缓冲区的大小,合理的缓冲区设置有助于提高显示性能lv_disp_drv_init(&disp_drv);
初始化 LVGL 的显示驱动结构体disp_drv
- 配置显示驱动参数
- 设置显示屏的水平和垂直分辨率
disp_drv.flush_cb = my_disp_flush;
将前面定义的my_disp_flush
函数设置为显示驱动的刷新回调函数,使得 LVGL 在需要刷新显示时能够调用该函数来更新屏幕内容disp_drv.draw_buf = &draw_buf;
将之前初始化的显示缓冲区draw_buf
与显示驱动关联起来,确保图形数据能够正确地存储和传输到显示屏
lv_disp_drv_register(&disp_drv);
注册显示驱动,使 LVGL 能够使用配置好的显示驱动来进行图形显示操作,至此 LVGL 与 TFT 显示屏的连接和配置完成- 创建并初始化图形对象
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
05_Animated_Eye12
【程序说明】
- 仿真眼睛样式1和样式2,交替显示
【硬件连接】
- 将开发板接入电脑
【代码分析】
- loop():不断地执行动画和更新显示内容
- 使用一个循环来执行不同的动画操作:
- 如果
a == 1
,则先将屏幕填充为黑色(tft.fillScreen(BLACK);
),然后调用Demo_1
函数,最后通过delay(2000);
延迟 2 秒钟。 - 如果
a == 2
,则使用一个内层循环执行Demo_2
函数多次,这里的循环次数由变量i
控制,循环次数为 7。Demo_2
函数会依次显示一系列图像,实现动画效果。通过这种方式,可以在程序运行过程中不断地循环执行这两个不同的动画序列
- 如果
- 使用一个循环来执行不同的动画操作:
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
06_Image_Display
【程序说明】
- 此示例初始化 TFT 显示屏和 LVGL 库,创建图像对象,主循环处理定时器任务。适用于学习 ESP32 与 LVGL 和 TFT 屏交互,初始化后可显示 LVGL 图像,测试稳定性与可靠性
【硬件连接】
- 将开发板接入电脑
【代码分析】
- lv_disp_flush():负责将 LVGL 的图形数据刷新到 TFT 显示屏
- 首先计算要刷新区域的宽度
w
和高度h
,确保准确确定数据范围 - 接着通过
tft.setAddrWindow
设置 TFT 显示屏的写地址窗口,为数据写入指定正确位置 - 然后使用
tft.pushColors
将颜色数据推送到显示屏,这一步决定了显示的图形颜色和内容 - 最后通知 LVGL 刷新完成,以便 LVGL 继续后续图形处理操作
- 首先计算要刷新区域的宽度
- setup():串口、LVGL、TFT 显示屏、显示驱动以及创建并设置图形对象
- 串口初始化:
Serial.begin(115200)
准备串口通信用于可能的调试 - LVGL 初始化:
lv_init()
启动 LVGL 库的核心组件 - 若
LV_USE_LOG
不为 0,注册串口打印函数用于调试:lv_log_register_print_cb(my_print)
。 - TFT 显示屏初始化:
tft.begin()
初始化 TFT 硬件tft.setRotation(0)
设置显示屏为横向翻转方向
- 显示缓冲区初始化:
lv_disp_draw_buf_init(&draw_buf, buf, NULL, screenWidth * screenHeight / 10)
,为存储图形数据做准备。 - 显示驱动初始化和注册:
lv_disp_drv_init(&disp_drv)
初始化显示驱动结构体- 设置驱动参数,如分辨率、刷新回调函数和显示缓冲区等,并注册显示驱动
- 创建并设置图形对象:
- 通过
LV_IMG_DECLARE(A3)
声明图像资源,然后创建图像对象logo_img并设置其源为声明的图像,最后通过lv_obj_center
和lv_obj_align
设置图像对象在屏幕上的位置
- 通过
- 串口初始化:
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
07_Clock
【程序说明】
- 此示例利用 TFT_eSPI 库和 LVGL 图形库对 TFT 显示屏进行初始化设置,搭建图形界面框架以实现显示和交互功能。适用于学习 ESP32 与 LVGL 和 TFT 屏交互,初始化后可显示图形界面,测试稳定性与可靠性
【硬件连接】
- 将开发板接入电脑
【代码分析】
- lv_disp_flush(): LVGL 的显示刷新回调函数,负责将 LVGL 的图形数据推送到 TFT 显示屏,确保显示内容准确更新
- 计算刷新区域的宽度和高度,准确确定要推送的数据范围
- 设置 TFT 显示屏的写地址窗口,确保数据写入正确位置
- 推送颜色数据到显示屏,颜色数据的正确传输决定了显示图形的颜色和内容
- 通知 LVGL 刷新完成,使 LVGL 能继续后续的图形处理操作
- setup():串口、LVGL、TFT 显示屏、显示驱动和用户界面的初始化
- 串口初始化用于可能的调试输出
- LVGL 初始化启动库的核心组件
- 若
LV_USE_LOG
不为 0,注册串口打印函数以便查看 LVGL 日志信息 - TFT 显示屏初始化包括硬件连接和参数设置,如设置旋转方向
- 初始化显示缓冲区并配置显示驱动,确保 LVGL 能正确与显示屏交互
- 调用
ui_init
初始化用户界面元素 - 输出调试信息表示初始化完成
【代码烧录】
- 选择开发板型号ESP32C3 Dev Module与端口
- 配置参数
- 烧录代码
资料
文档
程序
FAQ
售后
联系人:常工
EMAIL:2355861364@qq.com
QQ:2355861364
微信:扫下方二维码添加