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. 安装库
要运行示例,需要安装对应的库。
可从 此链接 下载 ESP32-S3-Touch-LCD-4.3B 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。
| 库或文件名称 | 说明 | 版本 | 安装方式 |
|---|---|---|---|
| ESP32_Display_Panel | ESP32 微控制器的特定显示面板控制库 | v0.1.4 以上 | 可“在线”或“离线”安装 |
| ESP32_IO_Expander | ESP32 的 I/O 扩展库 | v0.0.4 以上 | 可“在线”或“离线”安装 |
| lvgl | LVGL 图形库 | v8.4.0 | 通过库管理器或手动安装 |
| lv_conf.h | LVGL 配置文件 | —— | 手动安装 |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
安装步骤:
-
解压已下载的 示例程序包。
-
将其
Arduino\libraries目录下的所有文件夹复制到 Arduino 的库文件夹中。信息Arduino 库文件夹的路径通常是:
c:\Users\<用户名>\Documents\Arduino\libraries。也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的
libraries文件夹。 -
其他安装方式请参考:Arduino 库管理教程。
3. Arduino 工程参数设置

示例程序
Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_I2C_Test | 测试 I2C 座子 | - |
| 02_RS485_Test | 测试 RS485 座子 | - |
| 03_SD_Test | 测试 SD 卡座 | - |
| 04_RTC_Test | 测试 RTC 时钟 | - |
| 05_IO_Test | 测试 IO 扩展/隔离 | - |
| 06_TWAItransmit | 测试 CAN 卡座 | - |
| 07_TWAIreceive | 测试 CAN 卡座 | - |
| 08_DrawColorBar | 测试 RGB 屏幕 | ESP32_Display_Panel |
| 09_lvgl_Porting | 测试 LVGL 移植 | LVGL,ESP32_Display_Panel |
01_I2C_Test
本示例用于测试 I2C 座子是否工作正常:扫描 I2C 总线上的设备地址并输出扫描结果。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
-
setup():- 初始化串口(115200)用于输出日志。
- 初始化 I2C(SDA=8,SCL=9)。
-
loop():- 从
0x01扫描到0x7E,对每个地址执行Wire.beginTransmission()+Wire.endTransmission()。 error == 0表示该地址有设备响应,输出地址并计数。- 扫描完成后输出本次发现的设备数量,间隔 5 秒后再次扫描。
- 从
运行效果
-
屏幕无显示,连接的LED灯会以1Hz的频率亮灭

02_RS485_Test
本示例演示如何使用 RS485 进行串口回环测试(发送什么回什么)。
硬件连接
-
使用 USB 线把板子接入电脑

代码分析
-
setup():- 使用
Serial1初始化 RS485 串口,波特率 115200,8N1。 - 指定 RS485 的 RX/TX 引脚为
GPIO43/GPIO44。
- 使用
-
loop():- 轮询
RS485.available():收到数据后,读取 1 字节并立即write()回去,实现回环测试。
- 轮询
运行效果
-
通过 RS485 接口向开发板发送数据,开发板会原样回传。

03_SD_Test
本示例演示如何挂载 SD 卡并进行基础读写与遍历测试。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
setup():- 初始化 CH422G IO 扩展器并配置相关控制引脚(触摸复位、LCD 复位、背光、USB_SEL、SD_CS)。
- 初始化 SPI 并调用
SD.begin()挂载 SD 卡。 - 读取并打印 SD 卡类型与容量。
- 调用
listDir/createDir/removeDir/writeFile/appendFile/readFile/deleteFile/renameFile/testFileIO做一轮文件系统读写测试。
运行效果
-
串口输出 SD 卡类型、容量与文件系统读写测试日志;未插卡时提示挂载失败。

04_RTC_Test
本示例演示如何使用 PCF85063A 实时时钟模块进行时间设置与闹钟功能测试。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
-
setup():- 初始化串口(115200)。
- 调用
PCF85063A_Init()初始化 RTC,并设置当前时间与闹钟时间。 - 配置 RTC 中断引脚为上拉输入,并通过
attachInterrupt()注册中断回调。
-
loop():- 周期性读取当前时间并转换为字符串输出到串口。
- 检测
Alarm_flag,在闹钟触发时打印提示并重新开启闹钟。
运行效果
-
串口周期性输出当前时间,并在闹钟触发时打印提醒信息。

05_IO_Test
本示例用于测试 IO 扩展/隔离功能:通过 CH422G 扩展芯片驱动隔离 DO/DI,并进行简单自检。
硬件连接
-
使用 USB 线把板子接入电脑

代码分析
-
setup():- 初始化串口(115200)。
- 调用
waveshare_io_test()完成隔离 IO 自检。 - 调用
waveshare_lcd_init()初始化 LCD,用于显示测试界面或状态。
-
loop():- 每秒打印一次日志;在启用
EXAMPLE_ENABLE_PRINT_LCD_FPS时输出 LCD 刷新帧率。
- 每秒打印一次日志;在启用
运行效果
-
程序启动后自动完成 IO 测试,并在串口/屏幕上输出相应状态信息。

06_TWAItransmit
本示例用于测试 CAN 卡座:初始化 TWAI 驱动并周期性发送 CAN 帧。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
-
setup():- 初始化串口(115200)。
- 初始化 CH422G IO 扩展器并配置相关控制引脚状态。
- 调用
waveshare_twai_init()初始化 TWAI(CAN)驱动,并用driver_installed保存初始化结果。
-
loop():- 若驱动初始化失败,延时 1 秒后继续尝试。
- 若驱动已就绪,调用
waveshare_twai_transmit()发送 CAN 帧。
运行效果
-
串口输出发送日志;接入 CAN 总线与对端设备后可在对端收到发送的 CAN 数据。


07_TWAIreceive
本示例用于测试 CAN 卡座:初始化 TWAI 驱动并接收 CAN 帧。
硬件连接
-
使用 USB 线把板子接入电脑
-
将 CAN 接口(CANH, CANL)连接到 CAN 总线

代码分析
-
setup():- 初始化串口(115200)。
- 初始化 CH422G IO 扩展器并配置相关控制引脚状态。
- 调用
waveshare_twai_init()初始化 TWAI(CAN)驱动,并用driver_installed保存初始化结果。
-
loop():- 若驱动初始化失败,延时 1 秒后继续。
- 若驱动已就绪,调用
waveshare_twai_receive()读取并打印接收到的 CAN 帧。
运行效果
-
串口输出接收到的 CAN 数据;接入 CAN 总线与对端设备后可观察到接收帧。



08_DrawColorBar
本示例用于测试 RGB 屏幕:初始化 LCD 并显示颜色条/测试画面。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
-
setup():- 初始化串口并输出日志。
- 调用
waveshare_lcd_init()完成 RGB LCD 初始化并显示测试画面。
-
loop():- 每秒输出一次日志,便于确认程序在运行。
运行效果
-
烧录后 LCD 显示颜色条/测试画面。


09_lvgl_Porting
本示例用于测试 LVGL 移植:初始化 ESP32_Display_Panel + LVGL,并运行 LVGL Demo。
硬件连接
- 使用 USB 线把板子接入电脑
代码分析
-
setup():- 初始化串口并创建
Board,完成板级外设(LCD/Touch/总线)的初始化。 - 初始化 LVGL 端口(
lvgl_port_init()),并用lvgl_port_lock()/lvgl_port_unlock()保护 LVGL API 调用。 - 创建 3 个 Label 显示基本信息,并调用
lv_demo_widgets()运行 LVGL 内置 Demo。
- 初始化串口并创建
-
loop():- 每秒打印一次日志,用于确认主循环在运行(UI 刷新由 LVGL 端口内部任务维护)。
运行效果
-
烧录后显示 LVGL Demo 界面(Widgets Demo)。