Arduino 开发
本章节包含以下部分,请按需阅读:
Arduino 入门教程
初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
- 第0节 认识 ESP32
- 第1节 安装和配置 Arduino IDE
- 第2节 Arduino 基础知识
- 第3节 数字输出/输入
- 第4节 模拟输入
- 第5节 脉冲宽度调制 (PWM)
- 第6节 串行通信 (UART)
- 第7节 I2C 通信
- 第8节 SPI 通信
- 第9节 Wi-Fi 基础用法
- 第10节 网页服务器
- 第11节 蓝牙 (Bluetooth)
- 第12节 LVGL 图形界面开发
- 第13节 综合项目
请注意:该教程使用 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_eSPI | LCD 库 | v2.5.34 | “离线”安装 |
| TFT_eSPI_Setups | 自定义库 | -- | "离线安装" |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
3. Arduino 工程参数设置

示例程序
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 线把板子接入电脑

【代码分析】
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 开发板版本号为 2.0.12

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 开发板版本号为 2.0.12

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 开发板版本号为 2.0.12

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 开发板版本号为 2.0.12
