跳到主要内容

Arduino 开发

本章节包含以下部分,请按需阅读:

Arduino 入门教程

初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程

请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。

配置开发环境

1. 安装和配置 Arduino IDE

请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。

板名称板安装要求版本号要求
esp32 by Espressif Systems“离线”安装/“在线”安装3.1.0

2. 安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件。
  • 对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 可从 该处 下载 ESP32-S3-Touch-LCD-1.28 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。
库或文件名称说明版本安装方式
LVGL图形库v8.3.10"离线安装"
TFT_eSPILCD 库v2.5.34“离线”安装
TFT_eSPI_Setups自定义库--"离线安装"
版本兼容性说明

LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

3. Arduino 工程参数设置

ESP32-S3-Touch-LCD-1.28_Arduino_tools_set

示例程序

Arduino 示例程序位于 示例程序包Arduino/examples 目录中。

示例程序基础例程说明依赖库
ESP32-S3-Touch-LCD-1.28-Test测试板载设备功能---
LVGL_Arduino显示 LVGL benchmark,music 等LVGL,TFT_eSPI ,TFT_eSPI_Setups
LVGL_Chinese_Font显示 LVGL 内置的 1000 个常用中文字体LVGL,TFT_eSPI ,TFT_eSPI_Setups
LVGL_Chinese_7500_Char显示 LVGL 内置的 7500 个中文字体LVGL,TFT_eSPI ,TFT_eSPI_Setups

ESP32-S3-Touch-LCD-1.28-Test

【程序说明】

  • 该程序用于测试屏幕、六轴传感器、BAT、触摸屏的使用

【硬件连接】

  • 使用 USB 线把板子接入电脑

    ESP32-S3-Touch-LCD-1.28_Arduino_demo_1

【代码分析】

  • setup()
    • 进行串口初始化,设置波特率为 115200
    • 初始化触摸传感器 touch
    • 初始化外部 PSRAM(如果可用),并为图像分配内存空间
    • 初始化 LCD 显示屏,包括设置为水平显示模式、清屏为白色、创建新的图像缓存并设置相关参数
    • 进行一系列图形绘制操作,包括绘制点、线、矩形、圆形、数字和字符串等,并将图像显示在 LCD 上
    • 读取 QMI8658 传感器的数据并显示在 LCD 上,同时检测触摸事件
    • 最后进行触摸测试,当有触摸事件发生时,在触摸位置绘制一个点并更新显示 tln("Hello World!");

【运行效果】

  • 上电后,屏幕先间隔 2 秒显示白,红,绿,蓝四种颜色,检查屏幕有无漏光和黑点,若屏幕太快未看清,请按 RESET 按键 重新复位开始

  • 接着进入传感器测试环节,颜色显示完毕后,将会在屏幕上显示传感器数据,ACC_X、ACC_Y 和 ACC_Z 数值随着设备角度偏转会随之变化,GYR_X ,GYR_Y ,GYR_Z 数值会随着设备移动加速度的变化随之变化

  • 此时接上 3.7V 锂电池,正常情况下,BAT(V)数值会降低

  • 检查传感器后,长按红色区域“LongPress Quit”进入触摸测试环节,在 Touch test 的白色区域触摸打点程序

  • 直接烧录代码即可,LCD 屏幕如图所示

    ESP32-S3-Touch-AMOLED-1.75_Ard_1_1
    ESP32-S3-Touch-AMOLED-1.75_Ard_1_2
    ESP32-S3-Touch-AMOLED-1.75_Ard_1_3
    ESP32-S3-Touch-AMOLED-1.75_Ard_1_4
  • 若出现出错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-Touch-AMOLED-1.75_Ard_1_1

LVGL_Arduino

【程序说明】

  • 该程序用于显示 LVGL benchmark,music 等

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • void my_disp_flush() :LVGL 库中用于显示刷新的回调函数,负责将 LVGL 的绘图缓冲区的内容刷新到 TFT LCD 上
    • lv_disp_drv_t *disp_drv :提供的显示驱动结构体指针,包含了与显示相关的信息和函数指针。在这个函数中,用于向 LVGL 通知刷新完成
    • const lv_area_t *area :定义的区域结构体指针,表示需要刷新的区域。这个区域是相对于整个显示屏幕的一个矩形区域
    • lv_color_t *color_p :定义的颜色结构体指针,表示要在刷新区域内显示的颜色数据。在这个函数中,通过将这些颜色数据写入 TFT 缓冲区,完成绘制
  • void example_increase_reboot() :定时器的回调函数,其中计数器 count,每次调用就将计数器加一,在计数达到一定值时触发一个操作,这里是模拟在 30 次定时器触发后执行重启操作,具体的行为可以根据需要进行调整
  • void my_touchpad_read() :LVGL 库中的输入设备读取回调函数,用于处理触摸屏的输入事件
    • lv_indev_drv_t *indev_drv :LVGL 中的输入设备驱动结构体指针。该结构体包含了有关输入设备的信息和回调函数
    • lv_indev_data_t *data :LVGL 中的输入设备数据结构体指针。该结构体用于存储输入设备的状态和数据,包括当前的触摸状态(按下或释放)以及触摸点的坐标

【运行效果】

  • LCD 屏幕显示:

    ESP32-S3-Touch-AMOLED-1.75_Ard_2_1
    ESP32-S3-Touch-AMOLED-1.75_Ard_2_2
  • 若出现出错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-Touch-AMOLED-1.75_Ard_1_1

LVGL_Chinese_Font

【程序说明】

  • 该程序用于显示 LVGL 内置的 1000 个常用中文字体

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • my_disp_flush()
    • 这个函数是 LVGL 显示驱动的刷新回调函数
    • 根据传入的显示区域参数 area 计算出要刷新的宽度 w 和高度 h
    • 调用 TFT 显示屏的相关函数 tft.startWrite()tft.setAddrWindow()tft.pushColors() 来将 LVGL 中的颜色数据 color_p 写入到 TFT 显示屏的特定区域
    • 最后调用 lv_disp_flush_ready() 通知 LVGL 刷新完成

【运行效果】

  • LCD 屏幕显示:
    ESP32-S3-Touch-AMOLED-1.75_Ard_2_1
  • 若出现出错误请确保 esp32 开发板版本号为 2.0.12
    ESP32-S3-Touch-AMOLED-1.75_Ard_1_1

LVGL_Chinese_7500_Char

【程序说明】

  • 该程序用于显示 LVGL 的 7500 个中文字体,字体文件较大,下载固件时间比较长

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • setup()
    • 首先开启串口通信,设置波特率为 115200,为可能的串口调试做准备
    • 初始化 LVGL(Light and Versatile Graphics Library) ,包括设置版本信息输出、注册日志打印回调函数(如果启用了日志功能)
    • 初始化 TFT 显示屏 tft 和触摸传感器 touch,包括设置显示屏的旋转方向和可能的触摸校准数据
    • 初始化 LVGL 的显示缓冲区 draw_buf 和显示驱动 disp_drv ,设置显示分辨率、刷新回调函数等,并将显示驱动注册到 LVGL
    • 初始化输入设备驱动 indev_drv ,设置为指针类型并指定触摸读取回调函数,然后注册输入设备驱动
    • 创建一个标签 label ,设置文本字体、文本内容(支持颜色重绘),并将其居中显示在屏幕上
    • 可以选择性地调用 LVGL 的示例或演示函数,展示不同的功能效果
  • loop()
    • 调用 lv_timer_handler() 函数,让 LVGL 图形库处理其内部的定时任务和事件
    • 使用 delay(5) 函数引入一个小的延迟,避免程序过度占用 CPU 资源

【运行效果】

  • LCD 屏幕显示:
    ESP32-S3-Touch-AMOLED-1.75_Ard_4_1
  • 若出现出错误请确保 esp32 开发板版本号为 2.0.12
    ESP32-S3-Touch-AMOLED-1.75_Ard_4_2