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
- ESP32 相关主板在 Arduino IDE 使用,须先安装“esp32 by Espressif Systems ”库。
- 国内部分区域安装,一般推荐“在线安装 ”,若在线安装失败,则使用“离线安装 ”。
- 安装 Arduino-ESP32 教程,详见:Arduino 板管理教程
ESP32-S3-Touch-LCD-4 开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| ESP32-S3-Touch-LCD-4 | “离线”安装/“在线”安装 | 3.0.7 |
2. 安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装 。若库安装要求离线安装,则必须使用提供的库文件
对于大多数库,可以通过 Arduino 软件的在线库管理器搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,只能通过离线方式手动安装这些库。 - 库安装教程,详见:Arduino 库管理教程
- ESP32-S3-Touch-LCD-4 库文件存放于示例程序中,点击此处跳转:ESP32-S3-Touch-LCD-4 示例程序
ESP32-S3-Touch-LCD-4 库文件安装说明
| 库名称 | 说明 | 版本 | 库安装要求 |
|---|---|---|---|
| ESP32_Display_Panel | ST7701、GT911 驱动库 | v0.1.8 | 可“在线”或“离线”安装 |
| ESP32_IO_Expander | TCA9554 IO 拓展芯片驱动库 | v0.0.4 | “离线”安装(更改了 IOExpander_Library 的返回值) |
| lvgl | LVGL 图形化库 | v8.4.0 | “在线”安装后需复制 demos 文件夹至 src,建议使用“离线”安装 |
| lv_conf.h | LVGL 配置文件 | —— | “离线”安装 |
示例程序

ESP32-S3-Touch-LCD-4 示例程序
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_PanelTest | 测试 RGB 屏幕 | GFX_Library_for_Arduino |
| 02_LVGL_Porting | 测试 RGB 触摸屏幕 | GFX_Library_for_Arduino,Arduino DriveBus |
| 03_Rotation | 测试屏幕旋转 | GFX_Library_for_Arduino |
| 04_RS485_Test | 测试 RS-485 座子 | GFX_Library_for_Arduino |
| 05_TWAIreceive | 测试 CAN 卡座 | GFX_Library_for_Arduino |
| 06_TWAItransmit | 测试 CAN 卡座 | SensorLib,GFX_Library_for_Arduino |
| 07_SD_Test | 测试 SD 卡座 | LVGL |
-
ESP32-S3-Touch-LCD-4 支持直接选择型号
- 以 ESP32-S3-LCD-1.69 为例

Arduino 工程参数配置
-
需要使用屏幕的示例程序需要配置如下
**PSRAM**使能,部分版本设置为 OPI PSRAM

- 接入电脑后,按下 BAT_PWR 进行开机,开机状态下双击 BAT_PWR 可以关机
01_PanelTest
【硬件连接】
- 使用 USB 线把板子接入电脑

【代码分析】
-
setup():- 初始化串口并打印开始信息;
- 创建
ESP_Panel对象并初始化面板; - 获取面板的各个组件指针(LCD、触摸、背光);
- 根据组件是否存在进行相应操作,如关闭和打开背光、设置 LCD 的刷新完成回调函数并进行颜色条测试。
-
loop():- 如果触摸组件存在,读取触摸点信息;
- 根据读取结果进行不同处理,成功则打印触摸点信息,失败则打印错误消息;
- 若触摸中断未启用,延迟一段时间避免频繁读取;
- 如果触摸组件不存在,则延迟 1000 毫秒并打印“IDLE loop”。
【运行效果】
- 烧录代码后,可观察屏幕显示蓝色、绿色、红色的色带(若烧录代码后,屏幕无反应,可查看是否有在 Arduino IDE -> Tools 正确配置:使能 PSRAM(8MB OPI))
02_LVGL_Porting
【硬件连接】
- 使用 USB 线把板子接入电脑
【代码分析】
setup():- 扩展器初始化:
- 使用特定参数创建一个扩展器对象,初始化并尝试启动扩展器。如果初始化失败,使用备用参数再次尝试。如果成功,通过串口输出成功信息
- 串口及引脚设置:
- 设置引脚 16 为输出并初始化为低电平,初始化串口并设置波特率为 115200,打印标题和“start”信息
- 面板设备初始化:
- 创建
ESP_Panel对象并初始化面板设备,开始面板设备,如果启用避免撕裂功能,根据 LVGL 配置设置 RGB 总线参数
- 创建
- LVGL 初始化及用户界面创建:
- 初始化 LVGL,传入面板的 LCD 和触摸对象,打印信息并锁定 LVGL 的互斥锁(因为 LVGL 的 API 不是线程安全的);创建一个简单的标签并设置文本为标题,将其居中显示在屏幕上,调用函数展示 LVGL 的小部件示例,解锁互斥锁
- 扩展器初始化:
【运行效果】
- 烧录代码后,可进行一系列触屏操作,提供 LVGL 移植的例程(若烧录代码后,屏幕无反应,可查看是否有在 Arduino IDE -> Tools 正确配置:使能 PSRAM(8MB OPI))。

03_Rotation
【硬件连接】
- 使用 USB 线把板子接入电脑
【代码分析】
setup():- 负责初始化 IO 扩展器、配置硬件和串口通信、初始化面板设备和 LVGL,以及创建用户界面,是整个程序的初始化入口
rotateDisplay():- 这个函数用于旋转显示界面。它接收一个
lv_disp_t类型的指针和一个旋转角度参数 - 锁定 LVGL 的互斥锁,以确保在修改显示设置时的线程安全
- 使用
lv_disp_set_rotation函数设置 LVGL 显示的旋转角度 - 使用
lv_label_set_text_fmt函数更新显示旋转角度的标签文本,以显示当前的旋转角度 - 解锁互斥锁,允许其他部分的程序继续访问 LVGL API
- 这个函数用于旋转显示界面。它接收一个
onRightBtnClickCallback():- 按钮的点击回调函数,用于响应对左右按钮的点击操作,以实现显示的旋转控制
- 当右按钮被点击时,这个函数会检查当前的旋转状态。如果当前旋转角度为
LV_DISP_ROT_270,则将旋转角度设置为LV_DISP_ROT_NONE(无旋转);否则,将旋转角度增加一个单位 - 调用 rotateDisplay 函数来实际执行显示的旋转操作
onLeftBtnClickCallback():- 当左按钮被点击时,这个函数同样检查当前的旋转状态。如果当前旋转角度为
LV_DISP_ROT_NONE,则将旋转角度设置为LV_DISP_ROT_270;否则,将旋转角度减少一个单位 - 也会调用 **
rotateDisplay**函数来更新显示的旋转角度
- 当左按钮被点击时,这个函数同样检查当前的旋转状态。如果当前旋转角度为
【运行效果】

04_RS485_Test
【硬件连接】
- 使用 USB 线把板子接入电脑
- 开发板连接 USB 转 RS485 转换器,如图

【代码分析】
setup():Serial2.begin(115200, SERIAL_8N1, 43, 44);:初始化 UART2,设置波特率为 115200,数据格式为 8 位数据位、无校验位、1 位停止位,并指定使用 GPIO43(RXD)和 GPIO44(TXD)作为收发引脚
loop():- 通过**
Serial2.available()** 检查 UART2 是否有数据可读,使用**Serial2.read()** 读取数据,当满足特定条件时,通过**Serial2.println(buffer)** 将缓冲区中的数据发送出去,实现对 UART2 数据的接收和发送处理
- 通过**
【运行效果】
- 打开串口调试助手向 ESP32-S3-Touch-LCD-4 发送消息,该设备会将收到的消息返回给串口调试助手

不同硬件版本的 CAN 引脚
本页的 05_TWAIreceive 和 06_TWAItransmit 示例对应 V1 示例程序。V2/V3 示例程序使用 TX(GPIO48)和 RX(GPIO47);V4.0 原理图使用 TX(GPIO6)和 RX(GPIO0)。请按照对应版本的示例程序和原理图配置。
05_TWAIreceive
【硬件连接】
- 使用 USB 线把板子接入电脑
- 开发板连接 USB-CAN-A,如图

【代码分析】
- 功能概述:
- 初始化串口通信用于输出信息
- 通过 TWAI 驱动配置 CAN 通信
- 安装和启动 CAN(Controller Area Network)总线驱动(TWAI),连接到指定的 RX_PIN(0)和 TX_PIN(6)引脚,并设置为监听模式
- 在主循环中,如果 CAN 驱动已安装,检查是否有警报触发,处理各种警报情况,如错误被动状态、总线错误、接收队列满等。如果有接收数据警报,处理接收到的 CAN 消息
- 重要接口和引脚说明:
- RX_PIN(0)和 TX_PIN(6):用于连接到 CAN 总线收发器的引脚
05_TWAIreceive示例未定义或使用GPIO_OUTPUT_PIN_SEL;实际 CAN 引脚由twai.h定义为 TX GPIO6、RX GPIO0
【运行效果】
- ESP32-S3-Touch-LCD-4 等待 USB-CAN-A_TOOL 发送消息,如果接收成功,会将其打印到串口上。

06_TWAItransmit
【硬件连接】
- 使用 USB 线把板子接入电脑
- 开发板连接 USB-CAN-A,如图

【代码分析】
- 功能概述:
- 初始化串口通信用于输出信息
- 配置特定的 GPIO 引脚(RX_PIN 和 TX_PIN)为输出模式
- 安装和启动 CAN(Controller Area Network)总线驱动(TWAI),连接到指定的 RX_PIN(0)和 TX_PIN(6)引脚,并设置为无应答模式
- 重新配置 CAN 警报以检测特定状态,包括发送相关警报和总线错误警报
- 在主循环中,如果 CAN 驱动已安装,检查是否有警报触发并处理各种警报情况,同时按照一定时间间隔发送 CAN 消息
- 重要接口和引脚说明:
- RX_PIN(0)和 TX_PIN(6):用于连接到 CAN 总线收发器的引脚
GPIO_OUTPUT_PIN_SEL由RX_PIN和TX_PIN组成,即 GPIO0 和 GPIO6;示例使用它将这两个引脚配置为输出模式
【运行效果】
- 串口打印 CAN 消息发送成功,配置 USB-CAN-A_TOOL 后启动可看到 ESP32-S3-Touch-LCD-4 发送的 CAN 消息。

- 再观察 USB-CAN-A_TOOL,即可看到 ESP32-S3-Touch-LCD-4 发送的 CAN 消息

07_SD_Test
【硬件连接】
- 使用 USB 线把开发板接入电脑
- 将 SD 卡插入开发板

【代码分析】
- SD 卡初始化与检测
- 初始化 SD 卡
- 通过设置 SDMMC 引脚(
SDMMC_CLK、SDMMC_CMD、SDMMC_DATA)来初始化 SD 卡。如果初始化失败,程序会进入死循环,确保在没有成功挂载 SD 卡的情况下不继续执行其他操作。
- 通过设置 SDMMC 引脚(
- 检测 SD 卡类型和大小
- 检测 SD 卡的类型(如 MMC、SDSC、SDHC 等)并打印信息,了解所连接的 SD 卡的具体规格。同时获取 SD 卡的大小并以 MB 为单位打印,方便了解存储容量
- 列出 SD 卡目录内容
- 通过调用
listDir函数,列出 SD 卡根目录下的文件和目录,提供对 SD 卡存储内容的了解,方便进行后续的文件操作和管理
- 通过调用
- 初始化 SD 卡
【运行效果】
- ESP32-S3-Touch-LCD-4 会识别 SD 卡的类型和大小,再对进行文件的增删改查
