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-S3-LCD-1.28 所需开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| esp32 by Espressif Systems | “离线”安装/“在线”安装 | 2.0.12 |
2. 安装库
-
在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装 。若库安装要求离线安装,则必须使用提供的库文件
-
对于大多数库,可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
-
库安装教程,详见:安装和配置 Arduino IDE 教程 当中关于库安装的部分
-
ESP32-S3-LCD-1.28 库文件存放于示例程序中,点击此处跳转:ESP32-S3-LCD-1.28 示例程序
-
ESP32-S3-LCD-1.28 库文件安装说明
库名称 说明 版本 库安装要求 LVGL 图形库 v8.3.10 “离线”安装 TFT_eSPI LCD 库 v2.5.34 “离线”安装 TFT_eSPI_Setups 自定义库 -- “离线”安装
示例程序

- ESP32-S3-LCD-1.28 示例程序
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| ESP32-S3-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 |
Arduino 工程参数设置

ESP32-S3-LCD-1.28-Test
【程序说明】
- 该程序用于测试屏幕、六轴传感器、BAT 的使用
【硬件连接】
- 将开发板接入电脑

【代码分析】
- setup()
- 进行串口初始化,设置波特率为 115200
- 初始化外部 PSRAM(如果可用),并为图像分配内存空间
- 初始化 LCD 显示屏,包括设置为水平显示模式、清屏为白色、创建新的图像缓存并设置相关参数
- 进行一系列图形绘制操作,包括绘制点、线、矩形、圆形、数字和字符串等,并将图像显示在 LCD 上
- 读取 QMI8658 传感器的数据并显示在 LCD 上,每次先使用
Paint_Clear(WHITE)清除图像缓存,然后重新绘制图形并显示传感器数据和 ADC 转换后的电压值
【运行效果】
-
上电后,屏幕先间隔 2 秒显示白,红,绿,蓝四种颜色,检查屏幕有无漏光和黑点,若屏幕太快未看清,请按 RESET 按键重新复位开始
-
接着进入传感器测试环节,颜色显示完毕后,将会在屏幕上显示传感器数据,ACC_X、ACC_Y 和 ACC_Z 数值随着设备角度偏转会随之变化,GYR_X ,GYR_Y ,GYR_Z 数值会随着设备移动加速度的变化随之变化
-
此时接上 3.7V 锂电池,正常情况下,BAT(V)数值会降低
-
直接烧录代码即可,LCD 屏幕如图所示

-
若出现错误请确保 esp32 开发板版本号为 2.0.12

LVGL_Arduino
【程序说明】
- 该程序用于显示 LVGL benchmark,music 等
【硬件连接】
- 将开发板接入电脑
【代码分析】
-
void my_disp_flush() :将 LVGL 中的图像数据刷新到 TFT 显示屏上。它接收 LVGL 显示驱动结构体指针、显示区域和颜色数据指针作为参数
- 首先计算要刷新区域的宽度
w和高度h,通过获取传入的显示区域的坐标差值并加 1 得到 - 接着调用
tft.startWrite()开始向 TFT 显示屏写入数据,然后使用tft.setAddrWindow设置 TFT 显示屏的显示区域为传入的area指定的区域 - 之后调用
tft.pushColors将颜色数据(指向color_p的颜色数据转换为uint16_t类型)推送到 TFT 显示屏上进行显示,其中参数w * h表示要推送的像素数量,true表示在推送完成后进行数据传输的结束操作 - 最后调用
lv_disp_flush_ready(disp_drv)通知 LVGL 刷新完成,以便 LVGL 可以进行后续的操作
- 首先计算要刷新区域的宽度
-
setup() :负责初始化串口通信、LVGL 库、TFT 显示屏以及设置 LVGL 的显示驱动等
- 首先初始化串口通信,设置波特率为 115200,打印 LVGL 和 Arduino 的版本信息
- 初始化 LVGL 库,初始化 TFT 显示屏,并设置为横向显示、翻转,初始化 LVGL 的显示缓冲区和显示驱动,将
my_disp_flush函数注册为 LVGL 的刷新回调函数 - 创建一个 LVGL 的图像对象,并设置图像源为
test1_240_240_4 - 创建两个定时器,一个用于定时增加 LVGL 的时间滴答,另一个用于定时执行
example_increase_reboot函数 - 最后打印 “Setup done” 表示设置完成
【运行效果】
-
若出现错误请确保 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 刷新完成
【运行效果】

-
若出现错误请确保 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 资源
- 调用
【运行效果】

-
若出现错误请确保 esp32 开发板版本号为 2.0.12
