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-Relay-6CH 所需开发板安装说明
| 板名称 | 板安装要求 | 版本号要求 |
|---|---|---|
| esp32 by Espressif Systems | “离线”安装/“在线”安装 | 2.0.12 |
2. 安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装 。若库安装要求离线安装,则必须使用提供的库文件
对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。 - 库安装教程,详见:安装和配置 Arduino IDE 教程 当中关于库安装的部分
- ESP32-S3-Relay-6CH 库文件存放于示例程序中,点击此处跳转:ESP32-S3-Relay-6CH 示例程序
- ESP32-S3-Relay-6CH 库文件安装说明
| 库名称 | 说明 | 版本 | 库安装要求 |
|---|---|---|---|
| ArduinoJson | 轻量 JSON 库 | v6.21.4 | “在线”或“离线”安装 |
| PubSubClient | MQTT 消息订阅发布库 | v2.8.0 | “在线”或“离线”安装 |
| NTPClient | 网络时间同步客户端库 | v3.2.1 | “在线”或“离线”安装 |
LVGL 更多学习及使用可参考 LVGL 官方文档
示例程序

ESP32-S3-Relay-6CH 示例程序
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_MAIN_WIFI_AP | RS485 接口控制,蓝牙控制,蓝牙发送 IP,Web 页面控制(近距离) | 可直接烧录 Web 页仅连接到设备 WIFI 才可使用 |
| 02_MAIN_WIFI_STA | RS485 接口控制,蓝牙控制,蓝牙发送 IP,Web 页面控制(近距离) | 需 修改 要连接的 WIFI Web 页仅内网使用 |
| 03_MAIN_WIFI_MQTT | RS485 接口控制,蓝牙控制,蓝牙发送 IP,Waveshare 云控制(远距离) | 需 修改 要连接的 WIFI 须在 Waveshare 云中 创建 设备 (注:Waveshare 云已停止维护,请选择其他云服务) |
| 04_MAIN_ALL | RS485 接口控制,蓝牙控制,蓝牙发送 IP,Web 页面控制(近距离),Waveshare 云控制(远距离) | 需 修改 要连接的 WIFI 须在 Waveshare 云中 创建 设备 Web 页仅内网使用 (注:Waveshare 云已停止维护,请选择其他云服务) |
Arduino 工程参数设置

01_MAIN_WIFI_AP
【程序说明】
- 本示例实现了通过 WiFi、蓝牙和 RS485 去控制 6 个继电器的开关,此示例开启的是 WiFi 的 AP 模式
【注意事项】
- 可直接烧录
- Web 页仅连接到设备 WIFI 才可使用
【代码分析】
-
Relay_Analysis() :该函数主要用于分析接收到的数据,并根据数据内容执行相应的继电器控制操作以及输出相应的状态提示信息
- 参数分析
uint8_t *buf:指向一个无符号 8 位整数数组的指针,这个数组应该是存储接收到的数据,函数会根据数组第一个元素(buf[0])的值来判断具体的指令内容。uint8_t Mode_Flag:用于表示数据来源的模式标志,通过判断这个标志来输出对应的数据来源提示信息(如蓝牙数据、Wi-Fi 数据还是 RS485 数据),并根据不同的指令进行不同的继电器操作
- 逻辑流程
- 首先根据
Mode_Flag的值输出对应的数据源提示信息。 - 然后通过
switch语句根据buf[0]的值来执行不同的操作:- 对于
CH1到CH6的情况,分别通过digitalToggle函数来切换对应的 GPIO 引脚(如GPIO_PIN_CH1等)的电平状态,同时更新对应的Relay_Flag数组元素来记录继电器状态的改变,调用Buzzer_PWM函数控制蜂鸣器,并且根据继电器的最终状态输出相应的开启或关闭提示信息。 - 对于
ALL_ON指令,将所有的 GPIO 引脚(对应 6 个通道继电器)设置为高电平(开启状态),通过memset函数将Relay_Flag数组所有元素设置为 1,表示全部继电器开启,输出全部继电器开启提示信息并控制蜂鸣器。 - 对于
ALL_OFF指令,类似地将所有相关 GPIO 引脚设置为低电平(关闭状态),更新Relay_Flag数组元素为 0,输出全部继电器关闭提示信息并控制蜂鸣器,还额外进行了两次蜂鸣器控制操作(中间有延迟)。 - 如果
buf[0]的值不属于上述指令情况,则输出接收到非指令数据的提示信息
- 对于
- 首先根据
- 参数分析
-
WIFI_Init () :将设备配置成 Wi-Fi 接入点(AP),搭建 Web 服务器,并设置不同路径对应的请求处理函数,实现相关网络功能及设备控制功能,同时给出相应状态提示
- AP 创建
- 先设置 Wi-Fi 模式为
WIFI_AP,然后通过WiFi.softAP(ssid, password)尝试创建软 AP,若失败会循环提示并重试,直至成功
- 先设置 Wi-Fi 模式为
- 参数配置与提示
- 成功创建 AP 后,用 RGB 灯给出提示(亮绿灯 1 秒)
- IP 地址显示
- 获取并格式化软 AP 的 IP 地址,存储到
ipStr后输出显示,方便知晓网络地址
- 获取并格式化软 AP 的 IP 地址,存储到
- Web 服务器设置
- 通过
server.on为多个路径(如 “/”“/getData” 等)分别设置对应的请求处理函数(如handleRoot、handleGetData等),各函数应在别处定义,用于不同功能操作,像返回页面、获取数据、控制开关等。 - 最后调用
server.begin()启动 Web 服务器,并输出启动提示信息
- 通过
- AP 创建
【RS485 控制】
使用 RS485 设备连接 ESP32-S3-Relay-6CH 设备,向 ESP32-S3-Relay-6CH 发送数据可控制各个继电器的开合,默认以 9600 波特率进行通信。
| 操作指令 | 指令功能 |
|---|---|
| 06 05 00 01 55 00 A2 ED | 切换 CH1 继电器的状态 |
| 06 05 00 02 55 00 52 ED | 切换 CH2 继电器的状态 |
| 06 05 00 03 55 00 03 2D | 切换 CH3 继电器的状态 |
| 06 05 00 04 55 00 B2 EC | 切换 CH4 继电器的状态 |
| 06 05 00 05 55 00 E3 2C | 切换 CH5 继电器的状态 |
| 06 05 00 06 55 00 13 2C | 切换 CH6 继电器的状态 |
| 06 05 00 FF FF 00 BD BD | 开启所有继电器 |
| 06 05 00 FF 00 00 FC 4D | 关闭所有继电器 |
- 硬件连接
示例使用 USB TO RS232/485 转换器 进行演示
| ESP32-S3-Relay-6CH | USB-TO-RS232-485 |
|---|---|
| RS485 - A+ | Tx B - A+ |
| RS485 - B- | Rx B - B- |
-
软件操作
-
使用 SSCOM 进行数据发送
-
开启 SSCOM 软件,选择上方连接的 Port B 口对应的 COM 口
-
打开串口,使用多条发送功能快捷发送指令

-
-
通过以下指令即可进行继电器控制

【蓝牙控制】
使用 手机端 蓝牙调试助手 连接 ESP32-S3-Relay-6CH 设备,向 ESP32-S3-Relay-6CH 发送数据可控制各个继电器的开合。请注意:部分蓝牙调试助手默认以 ASCII 形式发送数据,在控制设备前需先根据蓝牙调试助手输入正确的控制指令。
| ASCII | Hex | 指令功能 |
|---|---|---|
| 1 | 0x31 | 切换 CH1 继电器的状态 |
| 2 | 0x32 | 切换 CH2 继电器的状态 |
| 3 | 0x33 | 切换 CH3 继电器的状态 |
| 4 | 0x34 | 切换 CH4 继电器的状态 |
| 5 | 0x35 | 切换 CH5 继电器的状态 |
| 6 | 0x36 | 切换 CH6 继电器的状态 |
| 7 | 0x37 | 开启所有继电器 |
| 8 | 0x38 | 关闭所有继电器 |
- 软件操作(查看 IP)
- 使用手机端蓝牙调试助手 nRF Connect 进行继电器控制(也可使用其他蓝牙调试助手)
- 以下使用 nRF Connect 进行功能演示
- 连接名为 ESP32 S3 Relay 6CH 的蓝牙设备

- 连接成功,选择 Unknown Service , 点击读取数据,WIFI 长时间连接失败 RGB 将常亮红灯,此操作无任何反应
- 在 WIFI 连接成功的情况下将接收到设备 IP,如下,设备 IP 为 192.168.6.133

- 蓝牙控制继电器的指令为字符 1~8,即十六进制的 0x31 ~ 0x38
- 点击发送按钮,填写需要发送的数据(当前为十六进制发送), 如下输入 0x31

- 发送 0x31 可控制继电器 CH1 进行状态翻转

- 发送 0x38 可控制关闭所有继电器

【Web 页面控制】
使用 手机端 蓝牙调试助手 连接 ESP32-S3-Relay-6CH 设备,获取连接 WIFI 后的 IP,通过 IP 开启 Web 页面
-
AP 模式
- 连接 ESP32-S3-Relay-6CH 设备的 WIFI,WIFI 名称为 ESP32-S3-Relay-6CH ,密码为 waveshare

- 通过蓝牙调试助手获取当前 IP
- 打开 Web 页面即可控制继电器(设备上电后需要一小段时间配置,每次上电后首次开启 Web 页面可能比较缓慢)

-
STA 模式
- 设备上电后将自动连接设置的 WIFI(烧录程序前需修改要连接的 WIFI')
- 通过蓝牙调试助手获取当前 IP
- 打开 Web 页面即可控制继电器(设备上电后需要一小段时间配置,每次上电后首次开启 Web 页面可能比较缓慢)

02_MAIN_WIFI_STA
【程序说明】
- 本示例实现了通过 WiFi、蓝牙和 RS485 去控制 6 个继电器的开关,此示例开启的是 WiFi 的 STA 模式
【注意事项】
- 需修改要连接的 WIFI
- Web 页仅支持控制设备和本产品在同一网络下使用,若使用手机端控制,需关闭移动网络
【代码分析】
- WIFI_Init () : 让设备以站点(STA)模式连接指定 Wi-Fi 网络,若连接成功则进行后续网络相关配置(如获取 IP 地址、启动 Web 服务器并注册回调函数等),若连接失败则给出相应提示并设置连接状态标志,过程中还通过 RGB 灯提供连接状态的可视化提示
- 连接 Wi-Fi 网络尝试:
- 先将 Wi-Fi 设为
WIFI_STA模式并开启睡眠模式,然后开始连接指定网络。在未连接成功的循环等待中,每半秒输出一个点作为提示,每偶数次(除首次外)尝试时通过 RGB 灯短暂亮红灯提示,每 10 次尝试失败则断开重连。若尝试次数超 22 次则认定连接失败并跳出循环。
- 先将 Wi-Fi 设为
- 连接成功后的操作:
- 若连接尝试次数小于 23(即连接成功),设置
WIFI_Connection为 1,亮绿灯 1 秒提示成功,然后获取并显示本地 IP 地址。接着为 Web 服务器注册多个路径对应的回调函数(如根路径、获取数据、控制不同开关等路径),最后启动服务器并输出启动提示信息,使设备能通过网页接受相应控制。
- 若连接尝试次数小于 23(即连接成功),设置
- 连接失败后的操作:
- 若尝试次数大于等于 23(连接失败),设置
WIFI_Connection为 0,输出提示告知可通过蓝牙调试助手控制设备,并亮红灯提示连接失败状
- 若尝试次数大于等于 23(连接失败),设置
- 连接 Wi-Fi 网络尝试:
【RS485 控制】
- 跳转 RS485 控制教程
【蓝牙控制】
【Web 页面控制】
- 跳转 Web 控制教程,此示例为 STA 模式
03_MAIN_WIFI_MQTT
注:Waveshare 云已停止维护,请选择其他云服务
【程序说明】
- 本示例通过 MQTT、蓝牙 和 RS485 通信方式控制 6 个继电器。它使用 ESP32 作为主控制单元,支持连接 Wi-Fi 和蓝牙,并提供了基于 MQTT 协议的远程控制
【注意事项】
- 需修改要连接的 WIFI
- 须在 Waveshare 云中创建设备
【代码分析】
-
Relay_Analysis () :接收来自不同通信源的数据并执行相应的继电器控制操作
- 数据下发 :指令(如
CH1、ALL_ON等)通过蓝牙、Wi-Fi 或 RS485 发送至设备。设备接收到指令后,解析并执行对应的操作。举例来说,当接收到CH1指令时,函数会切换继电器 1 的状态 - 数据反馈 :控制命令的执行会通过
printf打印到串口监视器(例如:继电器状态更新:"Relay CH1 on")并通过蜂鸣器反馈(Buzzer_PWM)。这允许用户看到实时的状态更新 - 通信协议
- 蓝牙:通过蓝牙模块与手机或其他设备进行无线通信,设备接收指令后控制继电器
- MQTT:使用 Wi-Fi 连接至 MQTT 服务器,设备订阅特定主题(如继电器控制命令)。当有新的命令发布时,设备通过 MQTT 接收到消息并执行继电器控制
- RS485:设备通过串口接收 RS485 指令,并根据命令切换继电器状态
- 数据下发 :指令(如
-
setup ()
- 初始化系统所需的各个模块,包括串口、GPIO、RTC、蓝牙和 Wi-Fi(MQTT)
- 调用
Bluetooth_Init(),设备可以与其他蓝牙设备建立连接,并接收控制指令 - 通过
MQTT_Init(),设备会连接到 Wi-Fi 网络,并能够通过 MQTT 协议与远程服务器通信
- 调用
- 时间同步
- 如果系统已连接 Wi-Fi,且启用了 RTC,
Acquisition_time()函数会通过网络同步当前时间到 RTC 中,确保设备有准确的系统时间
- 如果系统已连接 Wi-Fi,且启用了 RTC,
- 数据上传与下发
- 上传:当设备成功连接到 Wi-Fi 或蓝牙时,可以通过 MQTT 上传设备的状态信息或传感器数据(例如:温度、湿度)。这些数据会定期发送至 MQTT 服务器,供其他系统或用户查看
- 下发:设备接收来自 MQTT 服务器的控制命令,并执行相应操作,如开关继电器或更改配置
- 初始化系统所需的各个模块,包括串口、GPIO、RTC、蓝牙和 Wi-Fi(MQTT)
【RS485 控制】
- 跳转 RS485 控制教程
【蓝牙控制】
04_MAIN_ALL
注:Waveshare 云已停止维护,请选择其他云服务
【程序说明】
- 本示例为 RS485 接口控制、蓝牙控制、Web 页面控制(近距离)、Waveshare 云控制(远距离)全部功能集合
【注意事项】
- 需修改要连接的 WIFI
- Web 页仅支持控制设备和本产品在同一网络下使用,若使用手机端控制,需关掉移动网络
- 须在 Waveshare 云中创建设备
【RS485 控制】
- 跳转 RS485 控制教程
【蓝牙控制】
【Web 页面控制】
- 跳转 Web 控制教程,此示例为 AP 模式