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 开发板库支持。
2. 选择开发板和端口
- 在 Arduino IDE 中,安装好 ESP32 开发板库后,在开发板类型中选择:
Waveshare ESP32S3 XIP。 - 连接 ESP32-S3-Touch-LCD-7B 到电脑后,在“工具”菜单中选择对应的串口号。
3. 示例程序包与库
- ESP32-S3-Touch-LCD-7B 的 Arduino 示例程序与所需库文件包含在示例程序包中。
- 可从以下地址下载示例程序包:
ESP32-S3-Touch-LCD-7B-BOX-Demo.zip(路径与 ESP-IDF 示例包相同)
- 解压后,Arduino 示例位于
Arduino/examples目录,库文件位于Arduino/libraries目录,可按照通用 Arduino 教程将库添加到 Arduino IDE 中。
示例程序
Arduino 示例程序位于示例程序包的 Arduino/examples 目录中,下面给出每个示例的功能说明与运行效果。
| 示例程序 | 基础例程说明 |
|---|---|
| 01_GPIO | 测试 GPIO 输出控制 LED |
| 02_UART | 测试 UART 串口回环 |
| 03_I2C | 测试 I2C 与 IO 扩展控制背光 |
| 04_CAN | 测试 CAN 接口收发及告警 |
| 05_RS485 | 测试 RS485 数据回环 |
| 06_LCD | 测试 RGB LCD 显示与旋转 |
| 07_SD | 测试 SD 卡挂载与信息显示 |
| 08_TOUCH | 测试电容触摸屏多点触控 |
| 09_DISPLAY_BMP | 从 SD 卡读取并切换 BMP 图片 |
| 10_WIFI_SCAN | 扫描附近 WiFi 并显示列表 |
| 11_WIFI_STA | 作为 STA 连接指定 WiFi 并显示 IP |
| 12_WIFI_AP | 建立 AP 热点并显示连接设备 |
| 13_LVGL_TRANSPLANT | 运行 LVGL Demo,展示图形界面 |
| 14_LVGL_BTN | 使用 LVGL 按钮控制 LED 亮灭 |
| 15_LVGL_SLIDER | 使用滑动条调节亮度并显示电压 |
代码烧录通用步骤(适用于所有示例):
使用 USB 线将开发板 USB TO UART Type-C 接口连接电脑,完成供电与串口下载。
- 在 Arduino IDE 中选择开发板类型为
Waveshare ESP32S3 XIP。 - 选择正确的串口号。
- 根据需要调整示例中的参数(如 WiFi SSID/密码 等)。
- 点击“上传”按钮,等待编译和烧录完成。
下面分别介绍每个示例的硬件连接、代码结构和运行效果。
01_GPIO
硬件连接
-
使用 USB 线将开发板接入电脑。
-
将 LED 模块连接到指定 GPIO 引脚(示例使用 GPIO6)。

代码分析
setup():- 初始化 GPIO6,设置为输出模式。
loop():- 在循环中交替输出高低电平,控制 GPIO 引脚,进而控制 LED 的亮灭,实现约 1 Hz 的闪烁效果。
代码烧录
- 按“代码烧录通用步骤”选择
Waveshare ESP32S3 XIP与对应串口后,点击上传即可。
运行效果
- 屏幕无显示。
- 外接 LED 以约 1 Hz 的频率亮灭。
02_UART
硬件连接
- 使用 USB 线连接板子的 UART 口,接入电脑。
代码分析
setup():- 使用
Serial.begin()初始化串口,设置波特率、数据格式以及接收/发送引脚。 - 通过循环检查确保串口初始化成功。
- 使用
loop():- 在主循环中检查串口是否有数据可读。
- 若有数据,则读取一个字节并立即发送回去,实现 UART 数据回环。
代码烧录
- 步骤与 01_GPIO 相同,选择板卡和串口后上传示例。
运行效果
-
打开串口调试助手,向 ESP32-S3-Touch-LCD-7B 发送消息。
-
开发板会将收到的消息原封不动返回到串口调试助手。

03_I2C
硬件连接
- 使用 USB 线连接板子的 UART 口,将开发板接入电脑。
代码分析
setup():- 调用
DEV_I2C_Init()初始化 I2C 总线。 - 调用
IO_EXTENSION_Init()初始化 IO 扩展芯片。
- 调用
DEV_I2C_Init():负责初始化 I2C 设备。IO_EXTENSION_Init():负责初始化 IO 扩展芯片。IO_EXTENSION_Output(uint8_t pin, uint8_t value):控制 IO 扩展芯片指定引脚输出高/低电平。loop():- 在主循环中通过 IO 扩展芯片周期性地拉高或拉低 DISP 引脚,使屏幕背光周期性亮灭。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
- 屏幕背光以约 1 Hz 的频率亮灭。
04_CAN
硬件连接
-
使用 USB 线将开发板接入电脑。
-
使用 USB-CAN-A 工具板,将其与开发板的 CAN 接口连接。

代码分析
setup():- 初始化 I2C、IO 扩展以及 CAN 接口。
- 在初始化 CAN 前,将
IO_EXTENSION_IO_5设置为高电平,否则 CAN 接口无法工作。 - 调用
can_init(twai_timing_config_t, twai_filter_config_t, twai_general_config_t)完成 TWAI(CAN 控制器)初始化。
loop():- 调用
can_read_alerts()读取触发的 CAN 警报,并获取 TWAI 状态信息到alerts_triggered中。 - 根据不同警报类型(错误被动、总线错误、传输失败、传输成功等)打印对应的日志和状态信息,例如总线错误计数、待发送消息数量、传输错误计数器等。
- 当接收到有效数据帧时,将其原封不动地回发,实现 CAN 回环测试。
- 调用
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
屏幕不显示内容。
-
配置并启动 USB-CAN-A_TOOL 后,向 ESP32-S3-Touch-LCD-7B 发送 CAN 消息,可看到设备返回相同的 CAN 消息(配图:ESP32-S3-Touch-LCD-7B-Arduino-01.png、ESP32-S3-Touch-LCD-7B-Arduino-02.png)。


05_RS485
硬件连接
-
使用 USB 线将开发板接入电脑。
-
使用 USB 转 RS485 转换器连接开发板的 RS485 接口。

代码分析
setup():- 使用
RS485.begin()初始化Serial1串口,设置波特率、数据格式以及收发引脚。 - 通过循环检查确保串口初始化成功。
- 使用
loop():- 在主循环中检查 RS485 是否有数据可用。
- 若有数据,则读取一个字节并立即回传,实现 RS485 数据回环。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
- 打开串口调试助手(RS485 模式),向 ESP32-S3-Touch-LCD-7B 发送带换行的数据。
- 设备会将收到的数据原封不动返回到串口调试助手。

06_LCD
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 依次初始化 I2C、IO 扩展和 RGB LCD,并打开背光。
- 创建缓存区用于存放图像数据。
- 初始化 GUI 图像数据,设置图像格式与旋转角度(可在示例中修改旋转角度)。
- 控制屏幕依次显示颜色条、图案、文本和图片,用于测试 LCD 显示。
waveshare_esp32_s3_rgb_lcd_init():对 RGB LCD 进行初始化。waveshare_rgb_lcd_bl_on():打开 LCD 背光。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
ESP32-S3-Touch-LCD-7B 会先显示 RGB565 颜色框,然后显示图案和文本,最后显示图片。
07_SD
硬件连接
- 使用 USB 线将开发板接入电脑。
- 将 Micro SD 卡插入 ESP32-S3-Touch-LCD-7B 的 SD 卡座。
代码分析
setup():- 完成一系列初始化操作并对 SD 卡进行测试,在屏幕上显示相关信息。
sd_mmc_init():- 初始化 SD 卡并挂载文件系统。
read_sd_capacity(uint64_t *total_capacity, uint64_t *available_capacity):- 读取 SD 卡的容量信息(总容量与可用容量)。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
运行后,ESP32-S3-Touch-LCD-7B 会显示 SD 卡信息;
-
若挂载失败或无卡,则显示 "SD Card Fail!"。
08_TOUCH
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 完成一系列初始化操作并对触摸屏进行测试,在屏幕上显示触摸点。
touch_gt911_init():- 对 GT911 触摸芯片进行初始化。
touch_gt911_read_point(uint8_t max_touch_cnt):- 读取当前触摸坐标点,最多可识别 5 点触摸。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
触摸屏幕时会在屏幕上显示触摸点;
-
同时触摸五个位置,将显示五个不同颜色的点。
09_DISPLAY_BMP
硬件连接
- 使用 USB 线将开发板接入电脑。
- 将示例目录下的图片拷贝到 Micro SD 卡,再插入 ESP32-S3-Touch-LCD-7B。
代码分析
setup():- 完成一系列初始化操作并读取 SD 卡中的 BMP 图像文件。
- 在屏幕上绘制左右箭头,通过触摸箭头实现图片切换显示。
list_files(const char *base_path):- 读取指定路径下的 BMP 图像文件名,并保存到
BmpPath中。
- 读取指定路径下的 BMP 图像文件名,并保存到
GUI_ReadBmp(UWORD Xstart, UWORD Ystart, const char *path):- 从 SD 卡中读取 BMP 图像数据写入缓冲区,
Xstart、Ystart决定显示位置。
- 从 SD 卡中读取 BMP 图像数据写入缓冲区,
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
如果挂载成功,会在屏幕上显示左右箭头;
-
点击箭头即可显示图片,再次点击可进行左右切换。
10_WIFI_SCAN
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 完成一系列初始化操作,并扫描附近 WiFi;
- 将扫描到的 WiFi 名称显示在屏幕上(目前字库不完全,可能无法显示中文 SSID)。
wifi_scan():- 执行实际的 WiFi 扫描,并将结果写入缓冲区。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
运行后开始扫描附近 WiFi;
-
扫描结束后,屏幕显示扫描到的 WiFi 名称列表。
11_WIFI_STA
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 完成一系列初始化操作,连接指定的 2.4 GHz WiFi;
- 连接成功后,在屏幕上显示 WiFi 分配的 IP 地址。
代码烧录
- 步骤与 01_GPIO 相同,需在代码中配置正确的 SSID 和密码。
运行效果
-
烧录运行后,开发板连接到设定的 WiFi;
-
连接成功后,在屏幕上打印 IP 地址。
12_WIFI_AP
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 完成一系列初始化操作,创建名为
ESP32-S3-Touch-LCD-7B的热点; - 在屏幕上显示当前连接到该热点的设备 MAC 地址。
- 完成一系列初始化操作,创建名为
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
烧录成功后,开发板作为 AP 热点工作;
-
屏幕显示连接设备的 MAC 地址列表。
13_LVGL_TRANSPLANT
硬件连接
- 使用 USB 线将开发板接入电脑。
代码分析
setup():- 完成一系列初始化操作,并运行 LVGL Demo;
- 使用 LVGL 8.4 版本的
lv_demo_widgets示例展示常用控件和基础交互。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
运行后自动进入
lv_demo_widgets界面,可通过触摸进行交互操作。
其他说明
- 使用过程中若出现屏幕“漂移”等现象,可参考 ESP 官方 FAQ 进行排查。
- 在使用自定义 UI 程序时,如出现内存不足,可在 Arduino IDE 的“工具 (Tools)”菜单中选择更大的分区表。
14_LVGL_BTN
硬件连接
- 使用 USB 线将开发板接入电脑。
- 连接 LED 模块到指定 GPIO 引脚(示例使用与 01_GPIO 相同的引脚)。

代码分析
setup():- 完成一系列初始化操作并初始化 LVGL。
- 创建一个按钮控件,并绑定点击回调函数。
- 在回调中切换目标 GPIO 的电平,从而控制 LED 亮灭。
代码烧录
- 步骤与 01_GPIO 相同,选择
Waveshare ESP32S3 XIP与正确串口后上传示例。
运行效果
-
屏幕上显示一个按钮。
-
点击按钮时,改变 GPIO 引脚状态,从而控制外接 LED 灯的亮灭。
15_LVGL_SLIDER
硬件连接
-
使用 USB 线将开发板接入电脑。
-
连接 LED 模块到指定 GPIO 引脚。

代码分析
setup():- 完成一系列初始化操作并初始化 LVGL。
- 创建一个滑动条控件和一个文本控件,用于显示电池电压等信息。
- 在滑动条事件回调中,根据滑动位置调节 LED 亮度与屏幕背光亮度,并更新文本显示。
代码烧录
- 步骤与 01_GPIO 相同。
运行效果
-
屏幕显示滑动条和当前电池电压。
-
拖动滑动条时,可同时调节 LED 和屏幕背光的亮度,文本区域动态更新电池电压等信息。