用户讨论: Eng72

来自Waveshare Wiki
跳转至: 导航搜索

ESP32S3和ESP32C3 下使用

硬件连接

接入ESP32-C3-Zero
  • 11PIN 杜邦线接口
LCD引脚 ESP32C3
VCC 3V3
GND GND
DIN GPIO4
CLK GPIO7
CS1 GPIO6
CS2 GPIO2
DC GPIO9
RST1 GPIO8
RST2 GPIO5
BL1 GPIO1
BL2 GPIO3

示例程序

  • 下载示例程序,并解压
  • 打开示例,烧录程序。
示例程序
示例程序 说明 依赖库
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 示例工程设置:

0.71inch-LCD-Module-Arduino-Setting.jpg


01_Text_and_Number_Display

【程序说明】


  • 此示例在 TFT 显示屏上循环显示从 00 到 99 的两位数数字,并在程序启动时展示一系列颜色过渡效果。适用于学习 ESP32 与 TFT 屏交互,可显示循环递增的两位数数字,有颜色过渡和文本显示,测试稳定性与可靠性

【硬件连接】


  • 将开发板接入电脑

0.71inch-DualEye-LCD-Module.png

【代码分析】


  • 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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module-01Text and Number Display.png


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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module-02 Shapes on Circular Display.png


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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module 03 Animated Eye1.png


04_Animated_Eye2

【程序说明】


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

【硬件连接】


  • 将开发板接入电脑

【代码分析】


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

【代码烧录】


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

【运行效果】


0.71inch-DualEye-LCD-Module 04 Animated Eye2.png


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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module 05 Animated Eye12 01.png0.71inch-DualEye-LCD-Module 05 Animated Eye12 02.png


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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module 06 Image Display.png


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与端口
  • 配置参数
  • 烧录代码

【运行效果】


0.71inch-DualEye-LCD-Module 07Clock.png


树莓派Pico下使用

硬件连接

  • 11PIN 杜邦线接口
LCD引脚 Raspberry Pi Pico
VCC 3.3V
GND GND
DIN GPIO11
CLK GPIO10
CS1 GPIO9
CS2 GPIO13
DC GPIO8
RST1 GPIO12
RST2 GPIO15
BL1 GPIO20
BL2 GPIO21

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点操作流程:
软件调试前置操作.png
  • 连接成功效果如下:
软件调试前置操作5.png

示例程序

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

0.71inch-DualEye-LCD-Module-Raspberry Pi Pico 00.png

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

0.71inch-DualEye-LCD-Module-Raspberry Pi Pico 01.png

0.71inch-DualEye-LCD-Module-Raspberry Pi Pico 02.png

Arduino UNO下使用

硬件连接

  • 15PIN 杜邦线接口
LCD引脚 Arduino
VCC 5V
3V3 NC
GND GND
MISO NC
MOSI 11
SCLK 13
SD_CS NC
LCD_CS 9
LCD_DC 8
LCD_RST 7
LCD_BL 6
TP_SDA SDA
TP_SCL SCL
TP_INT 3
TP_RST 4


安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
  • ESP32-S3-Touch-LCD-1.47 库文件路径:
    ..\ESP32-S3-Touch-LCD-1.47-Demo\Arduino\libraries
库名称 说明 库安装要求
TFT_eSPI LCD驱动库 “离线”安装

示例程序

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

0.71inch-DualEye-LCD-UNO R4 01.png

  • 烧录成功,显示效果

0.71inch-DualEye-LCD-UNO R4 02.png