0.71inch-Dual-Eye-LCD-Moudle 使用教程

产品介绍

产品简介

0.71 英寸双目 LCD 模块,采用两块 0.71 英寸圆形IPS屏,160 x 160 像素,内置 GC9D01 驱动芯片,SPI 接口通信,适合集成到ESP32/树莓派Pico/Arduino等主控上,做一些创意仿真电子眼睛或可穿戴设备等应用。

产品参数

工作电压通信接口显示面板控制芯片
3.3V/5V4-wire SPIIPSGC9D01
分辨率显示尺寸像素间距外形尺寸
160 × 160 pixels18 × 18 (mm)37.5 × 112.5 (μm)20.00 × 51.00 (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,按位传输,高位在前,低位在后。

产品尺寸


折叠

使用说明

ESP32S3和ESP32C3 下使用

硬件连接


接入ESP32-C3-Zero
  • 11PIN 杜邦线接口
LCD引脚ESP32C3/ESP32S3
VCC3V3
GNDGND
DINGPIO4
CLKGPIO7
CS1GPIO6
CS2GPIO2
DCGPIO9
RST1GPIO8
RST2GPIO5
BL1GPIO1
BL2GPIO3
折叠

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。

  • 运行安装程序,全部默认安装即可。

安装ESP32开发板

安装库

  • 使用本产品,所需的库文件见Demo路径:0.71inch-LCD-Module-Demo\ESP32-C3\libraries\,库说明详见下表
库名称说明库安装要求
TFT_eSPILCD驱动库“离线”安装
LVGLLVGL库“离线”安装


示例程序

  • 下载示例程序,并解压
  • 打开示例,烧录程序。
示例程序
示例程序说明依赖库
1.Text_and_Number_Display文字和数字显示TFT_eSPI
2.Shapes_on_Circular_Display画图TFT_eSPI
3.Animated_Eye1仿真眼睛样式1TFT_eSPI
4.Animated_Eye2仿真眼睛样式2TFT_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);设置文本颜色,确保文本在背景下清晰可见


  • loop()loop函数在程序运行过程中不断循环,实现核心的数字显示功能置
    • tft.drawString("Hello, Waveshare!", 30, 40, 2);显示欢迎消息,增强用户体验
    • 数字格式化:将整数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():此函数绘制一个以随机颜色填充的等边三角形
    • 生成随机颜色
    • 根据圆形的半径计算等边三角形的高度和边长
    • 计算三角形的三个顶点坐标,并存储在triangleXtriangleY数组中
    • 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为新值

【代码烧录】


  • 选择开发板型号ESP32C3 Dev Module与端口
  • 配置参数
  • 烧录代码

【运行效果】



04_Animated_Eye2

折叠

【程序说明】


  • 该程序通过控制两个 TFT 显示屏,实现了同步眼部动画效果,可用于机器人面部表情、仿生眼等场景的视觉展示。

【硬件连接】


  • 将开发板接入电脑

【代码分析】


  • loop():不断地执行动画和更新显示内容
    • 使用一个内层循环执行Demo_1函数多次,这里的循环次数由变量i控制,循环次数为 7。图像显示通过pushImage函数实现,每次显示前通过片选信号选中对应设备。

【代码烧录】


  • 选择开发板型号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_centerlv_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与端口
  • 配置参数
  • 烧录代码

【运行效果】



树莓派Pico下使用

硬件连接

  • 11PIN 杜邦线接口
LCD引脚Raspberry Pi Pico
VCC3.3V
GNDGND
DINGPIO11
CLKGPIO10
CS1GPIO9
CS2GPIO13
DCGPIO8
RST1GPIO12
RST2GPIO15
BL1GPIO20
BL2GPIO21

Python 环境

前置操作

1.安装Thonny(Thonny安装包
2.按住Raspberry Pi Pico的“BOOTSEL”键,然后上电,上电后松开
3.电脑会出现一个新的盘符,将固件(Raspberry Pi Pico固件)解压,并将固件(后缀为uf2)拷贝至该磁盘(拷贝成功磁盘会自动消失)
4.开启Thonny,点击右下方的“Python x.x.x”,选择“Configure interpreter”
5.在弹出窗口中选择“解释器”->解释器选择“MicroPython(Raspbeery Pi Pico)”->端口选择“自动探测端口”
6.点击暂停,Shell窗口出现“MicroPython v1.20.0-50-g786013d46 on 2023-05-04; Raspberry Pi Pico with RP2040 Type "help()" for more information.”即为连接成功

  • 以下为第4点与第5点操作流程:

  • 连接成功效果如下:

示例程序

  • 打开示例文件,路径为:* 打开示例文件,路径为:0.71inch-DualEye-LCD-Module-Demo\Raspberry Pi Pico\Eye.py


  • 运行程序即可在屏幕上实现眨眼的效果



Arduino UNO下使用

硬件连接

  • 15PIN 杜邦线接口
  • 11PIN 杜邦线接口
LCD引脚Arduino
VCC5V
GNDGND
DIND11
CLKD13
CS1D6
CS2D10
DCD7
RST1D5
RST2D8
BL1NC
BL2NC


折叠

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
库名称说明库安装要求
TFT_eSPILCD驱动库“离线”安装

示例程序

  • 下载示例程序,并解压
  • 进入示例文件0.71inch-DualEye-LCD-Module-Demo/uno_r4 中,双击 main.ino 打开示例
  • 选择设备与端口,编译并烧录程序


  • 烧录成功,显示效果


Flash固件的烧录与擦除


  • 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
  • bin文件路径:
    ..\xxx.bin

资料

文档

程序

固件烧录工具

应用案例

FAQ

问题:如何使用SquareLine Studio设计界面


问题:版本区分

模块上有这颗芯片的是v2版本,若无则是v1版本 


售后

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841