ESP32-S3-ETH-8DI-8RO 使用教程

产品介绍

产品简介

ESP32-S3-ETH-8DI-8RO 是一款基于 ESP32-S3 主控,支持 WiFi、蓝牙、RS485、网口 等外设接口的工业级 8 路 WiFi 网络继电器。内置电源隔离、光耦隔离等保护电路,安全稳定更可靠,适用于AIoT领域。

产品特性

  • 基于 ESP32-S3 单片机,其上搭载 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
  • 集成 2.4GHz WiFi 和低功耗蓝牙 (Bluetooth LE) 双模无线通信,具有优越的射频性能
  • 采用优质继电器,允许接入负载:≤10A 250V AC 或 ≤10A 30V DC
  • 板载隔离型 RS485 接口,方便外扩接入各种 RS485 Modbus 工业扩展模块或传感器
  • 板载 GPIO 排针接口,可用于扩展其他设备,例 RS232 / 传感器等功能
  • 板载 USB Type-C 接口,可用于供电和下载调试,方便开发使用
  • 板载有接线端子供电接口,支持 7~36V 宽电压范围供电,方便工业供电使用
  • 板载光耦隔离,避免继电器外接高压电路干扰控制芯片
  • 板载数字隔离,避免外部信号干扰控制芯片
  • 板载一体式电源隔离,可提供稳定的隔离电压,隔离端无须额外供电
  • 板载蜂鸣器,RGB 彩灯,以及电源和 RS485 收发指示灯,方便感知设备的运行工作状态
  • 导轨式 ABS 保护外壳,方便安装使用,带外壳更安全

产品参数

参数名称参数
供电电压7~36V (或 5V/1A Type-C接口)
继电器路数8路
数字输入路数8路
触点类型一常开一常闭
接线端口Type-C
通信协议USB协议
产品尺寸90(H)x 175(V) mm

资源简介


1、ESP32-S3
   主频高达 240MHz,搭载 2.4GHz WiFi 和低功耗蓝牙

2、优质继电器
   单路继电器允许接入负载:≤10A 250V AC 或 ≤10A 30V DC

3、光耦隔离
   避免继电器外接高压电路干扰控制芯片

4、复位按键

5、PoE 接口
   可以接入 PoE 模块 (仅 PoE 网口版)

6、BOOT 按键

7、电源芯片

8、数字隔离
   避免外部信号干扰控制芯片

9、电源隔离
   提供稳定隔离电压,隔离端无须额外供电

10、双向光耦隔离

11、RTC 电池接口

12、蜂鸣器

13、开关量输入接口

14、排针接口
   可接入其他设备

15、工作指示灯
   PWR:电源指示灯
   RXD:RS485 接收指示灯
   TXD:RS485 发送指示灯

16、USB Type-C 接口
   可用于设备供电,固件下载和 USB 通信

17、WS2812 RGB 彩灯
   可通过 GPIO38 引脚控制

18、网口

19、外部天线连接座
   SMA 母孔天线座,用于 WiFi 和蓝牙无线通信

20、电源接线端子
   支持 DC 7~36V 宽电压范围供电

21、RS485 通信接口
   支持连接外部 RS485 设备

22、RS485 匹配电阻
   预留 120R 匹配电阻,可跳线帽使能

23、继电器接线端子
   方便用户连接设备


24、板载 TVS (瞬态电压抑制管)
   可有效抑制电路中的浪涌电压和瞬态尖峰电压

25、RS485 转换芯片

26、MP1605GTF-Z
   DC-DC 电源模块

27、PCF85063ATL
   RTC 芯片,可实现一些定时任务

28、TCA9554PWR
   扩展 IO,用于控制继电器

29、W5500
   通过 SPI 接口扩展 10/100Mbps 网络连接

30、Micro SD 卡槽
   支持外接 SD 卡存储图片和文件

接口介绍


  • 继电器
控制 EXIO功能
EXIO11号继电器的控制引脚
EXIO22号继电器的控制引脚
EXIO33号继电器的控制引脚
EXIO44号继电器的控制引脚
EXIO55号继电器的控制引脚
EXIO66号继电器的控制引脚
EXIO77号继电器的控制引脚
EXIO88号继电器的控制引脚
  • 数字输入
控制 EXIO功能
GPIO41号数字输入检测引脚
GPIO52号数字输入检测引脚
GPIO63号数字输入检测引脚
GPIO74号数字输入检测引脚
GPIO85号数字输入检测引脚
GPIO96号数字输入检测引脚
GPIO107号数字输入检测引脚
GPIO118号数字输入检测引脚
  • W5500 网口芯片
控制 GPIO功能
GPIO12ETH_INT
GPIO13ETH_MOSI
GPIO14ETH_MISO
GPIO15ETH_SCLK
GPIO16ETH_CS
  • SD Card
控制 GPIO功能
GPIO45SD_D0
GPIO47SD_CMD
GPIO48SD_SCK
NCSD_D3
NCSD_D1
NCSD_D2
  • RS485
控制GPIO功能
GPIO17RS485对应UART的TX引脚
GPIO18RS485对应UART的RX引脚
  • RTC
控制GPIO功能
GPIO41RTC_SCL,I2C 时钟线
GPIO42RTC_SDA,I2C 数据线
  • RGB 灯珠
控制GPIO功能
GPIO38RGB 控制引脚
  • 蜂鸣器
控制GPIO功能
GPIO46蜂鸣器的控制引脚
  • BOOT 按键
控制GPIO功能
GPIO0BOOT按键控制引脚

产品尺寸



用电安全注意事项

  • 本产品须由专业的电工或技术人员作业使用,使用过程中请做好用电安全,防漏电和绝缘等保护措施。
  • 在安装、维护或更换继电器设备之前,请务必关闭电源并拔下插头。
  • 请勿试图拆卸继电器设备,以免损坏设备或导致电击危险。
  • 请妥善安装放置继电器设备产品,请勿在潮湿、过热、易燃坏境中使用,避免因安装或使用不慎,引发安全事故。

实现逻辑


使用说明

ESP32-S3-ETH-8DI-8RO 目前提供 Arduino IDE 开发工具和框架。

开发工具介绍


Arduino IDE

Arduino IDE是一款便捷灵活、方便上手的开源电子原型平台。不需要太多基础,简单学习后,你也可以快速地进行开发。同时,Arduino 拥有庞大的全球用户社区,提供了海量的开源代码、项目示例和教程,还有丰富的库资源,封装了复杂功能,让开发者能快速实现各种功能。


这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 和 MicroPython 适合初学者和非专业人士,因其简单易学、上手快。

器件准备

在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

Arduino开发

本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。

  • 运行安装程序,全部默认安装即可。

安装 ESP32 开发板

  • ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”库。
  • 根据板安装要求进行安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装”。
  • 安装教程,详见:Arduino 板管理教程
  • ESP32-S3-ETH-8DI-8RO 所需开发板安装说明
板名称板安装要求版本号要求
esp32 by Espressif Systems“离线”安装/“在线”安装3.0.0及以上

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
  • ESP32-S3-ETH-8DI-8RO 库文件存放于示例程序中,点击此处跳转:ESP32-S3-ETH-8DI-8RO 示例程序
  • ESP32-S3-ETH-8DI-8RO 库文件安装说明
库名称说明版本库安装要求
ArduinoJson轻量 JSON 库v6.21.4“在线”或“离线”安装
PubSubClientMQTT 消息订阅发布库v2.8.0“在线”或“离线”安装
NTPClient网络时间同步客户端库v3.2.1“在线”或“离线”安装
LVGL更多学习及使用可参考LVGL官方文档

运行第一个 Arduino 程序


如果你刚入门学习ESP32和Arduino,还不知道如何创建、编译、烧录和运行Arduino ESP32程序,那么请展开看看,希望可以帮助到你!

新建工程

  • 运行Arduino IDE,选择 File -> New Sketch

  • 输入代码:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, World!");
  delay(2000);
}
  • 保存代码工程,选择 File -> Save As...;在弹出的菜单选择保存工程路径,并输入工程名,如 Hello_World,点击保存

编译和烧录程序

  • 选择对应的开发板,以ESP32S3主板为例:

①. 点击选择下拉框选项“Select Other Board and Port”;
②. 搜索需要的开发板型号“esp32s3 dev module”并选择;
③. 选择COM口
④. 保存选择。

  • 若ESP32S3主板只有USB口,须打开(Enable)USB CDC,如下图所示:


  • 编译并上传程序:

①. 编译程序;②. 编译并下载程序;③. 下载成功。

  • 打开串口监视窗口,程序每隔2秒会打印“Hello World!”,运行情况如下所示:


示例程序


  • ESP32-S3-ETH-8DI-8RO 示例程序
示例程序基础例程说明依赖库
01_MAIN_WIFI_APRS485 接口控制,蓝牙控制,蓝牙发送IP,Web页面控制(近距离)可直接烧录
Web 页仅连接到设备 WIFI 才可使用
02_MAIN_WIFI_STARS485 接口控制,蓝牙控制,蓝牙发送IP,Web页面控制(近距离)需 修改 要连接的 WIFI
Web页仅内网使用
03_MAIN_WIFI_MQTTRS485 接口控制,蓝牙控制,蓝牙发送IP,Waveshare云控制(远距离)需 修改 要连接的 WIFI
须在Waveshare云中 创建 设备
04_MAIN_ALLRS485 接口控制,蓝牙控制,蓝牙发送IP,Web页面控制(近距离),Waveshare云控制(远距离)需 修改 要连接的 WIFI
须在Waveshare云中 创建 设备
Web页仅内网使用

Arduino 工程参数设置


01_MAIN_WIFI_AP

【程序说明】


  • 本示例实现了通过 WiFi、蓝牙、网口 和 RS485 去控制 8 个继电器的开关,此示例开启的是WiFi的AP模式

【注意事项】


  • 可直接烧录
  • Web 页仅连接到设备 WIFI 才可使用,或连接了网线的情况下,在内网访问网口IP

【代码分析】


  • Relay_Analysis():该函数主要用于分析接收到的数据,并根据数据内容执行相应的继电器控制操作以及输出相应的状态提示信息
    • 参数分析
      • uint8_t *buf:指向一个无符号 8 位整数数组的指针,这个数组应该是存储接收到的数据,函数会根据数组第一个元素(buf[0])的值来判断具体的指令内容。
      • uint8_t Mode_Flag:用于表示数据来源的模式标志,通过判断这个标志来输出对应的数据来源提示信息(如蓝牙数据、Wi-Fi 数据还是 RS485 数据),并根据不同的指令进行不同的继电器操作
    • 逻辑流程
      • 首先根据Mode_Flag的值输出对应的数据源提示信息。
      • 然后通过switch语句根据buf[0]的值来执行不同的操作:
        • 对于CH1CH8的情况,分别通过digitalToggle函数来切换对应的 EXIO 引脚(如GPIO_PIN_CH1等)的电平状态,同时更新对应的Relay_Flag数组元素来记录继电器状态的改变,调用Buzzer_PWM函数控制蜂鸣器,并且根据继电器的最终状态输出相应的开启或关闭提示信息。
        • 对于ALL_ON指令,将所有的 GPIO 引脚(对应 8 个通道继电器)设置为高电平(开启状态),通过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,若失败会循环提示并重试,直至成功
    • 参数配置与提示
      • 成功创建 AP 后,用 RGB 灯给出提示(亮绿灯 1 秒)
    • IP 地址显示
      • 获取并格式化软 AP 的 IP 地址,存储到ipStr后输出显示,方便知晓网络地址
    • Web 服务器设置
      • 通过server.on为多个路径(如 “/”“/getData” 等)分别设置对应的请求处理函数(如 handleRoothandleGetData等),各函数应在别处定义,用于不同功能操作,像返回页面、获取数据、控制开关等。
      • 最后调用server.begin()启动 Web 服务器,并输出启动提示信息

【RS485控制】


【蓝牙控制】


【Web页面控制】


02_MAIN_WIFI_STA

【程序说明】


  • 本示例实现了通过 WiFi、蓝牙、和 RS485 去控制 8 个继电器的开关,此示例开启的是WiFi的STA模式

【注意事项】


  • 需修改要连接的 WIFI
  • Web页仅支持控制设备和本产品在同一网络下使用,若使用手机端控制,需关掉移动网络

【代码分析】


  • WIFI_Init ():让设备以站点(STA)模式连接指定 Wi-Fi 网络,若连接成功则进行后续网络相关配置(如获取 IP 地址、启动 Web 服务器并注册回调函数等),若连接失败则给出相应提示并设置连接状态标志,过程中还通过 RGB 灯提供连接状态的可视化提示
    • 连接 Wi-Fi 网络尝试:
      • 先将 Wi-Fi 设为 WIFI_STA 模式并开启睡眠模式,然后开始连接指定网络。在未连接成功的循环等待中,每半秒输出一个点作为提示,每偶数次(除首次外)尝试时通过 RGB 灯短暂亮红灯提示,每 10 次尝试失败则断开重连。若尝试次数超 22 次则认定连接失败并跳出循环。
    • 连接成功后的操作:
      • 若连接尝试次数小于 23(即连接成功),设置 WIFI_Connection 为 1,亮绿灯 1 秒提示成功,然后获取并显示本地 IP 地址。接着为 Web 服务器注册多个路径对应的回调函数(如根路径、获取数据、控制不同开关等路径),最后启动服务器并输出启动提示信息,使设备能通过网页接受相应控制。
    • 连接失败后的操作:
      • 若尝试次数大于等于 23(连接失败),设置 WIFI_Connection 为 0,输出提示告知可通过蓝牙调试助手控制设备,并亮红灯提示连接失败状

【RS485控制】


【蓝牙控制】


【Web页面控制】


03_MAIN_WIFI_MQTT

【程序说明】


  • 本示例通过 MQTT、蓝牙 和 RS485 通信方式控制 8 个继电器。它使用 ESP32 作为主控制单元,支持连接 Wi-Fi 和蓝牙,并提供了基于 MQTT 协议的远程控制

【注意事项】


  • 需修改要连接的 WIFI
  • 须在Waveshare云中创建设备

【代码分析】


  • Relay_Analysis ():接收来自不同通信源的数据并执行相应的继电器控制操作
    • 数据下发:指令(如CH1ALL_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 或蓝牙时,可以通过 MQTT 上传设备的状态信息或传感器数据(例如:温度、湿度)。这些数据会定期发送至 MQTT 服务器,供其他系统或用户查看
      • 下发:设备接收来自 MQTT 服务器的控制命令,并执行相应操作,如开关继电器或更改配置

【RS485控制】


【蓝牙控制】


【Waveshare云控制】


04_MAIN_ALL

【程序说明】


  • 本示例为RS485 接口控制、蓝牙控制、Web页面控制(近距离)、Waveshare云控制(远距离)全部功能集合

【注意事项】


  • 需修改要连接的 WIFI
  • Web页仅支持控制设备和本产品在同一网络下使用,若使用手机端控制,需关掉移动网络
  • 须在Waveshare云中创建设备

【RS485控制】


【蓝牙控制】


【Web页面控制】


【Waveshare云控制】


外部扩展

折叠

RS485 扩展继电器路数

  • 使用 Modbus RTU Relay 扩展 8 路继电器
  • 4个主示例文件已兼容该操作,需将WS_imformation.h 中的 Extension_Enable 设置为 1(默认为1)
  • 可通过蓝牙控制外部扩展的继电器
操作指令指令功能
06 01切换 Modbus RTU Relay 的 CH1 继电器的状态
06 02切换 Modbus RTU Relay 的 CH2 继电器的状态
06 03切换 Modbus RTU Relay 的 CH3 继电器的状态
06 04切换 Modbus RTU Relay 的 CH4 继电器的状态
06 05切换 Modbus RTU Relay 的 CH5 继电器的状态
06 06切换 Modbus RTU Relay 的 CH6 继电器的状态
06 07切换 Modbus RTU Relay 的 CH7 继电器的状态
06 08切换 Modbus RTU Relay 的 CH8 继电器的状态
06 09开启 Modbus RTU Relay 的所有继电器
06 0A关闭 Modbus RTU Relay 的所有继电器
  • 蓝牙控制继电器的指令为字符1~8,即十六进制的 0x06 0x01 ~ 0x38 0x0A
  • 点击发送按钮,填写需要发送的数据(当前为十六进制发送),如下输入 0x06 0x01


  • 发送 0x06 0x01 可控制继电器 CH1 进行状态翻转


  • 发送 0x06 0x0A 可控制关闭所有继电器


Flash固件的烧录与擦除

  • 当前示例程序有提供测试固件,可通过直接烧录测试固件来测试板载设备功能正常与否
  • bin文件路径:
    ..\ESP32-S3-POE-ETH-8DI-8RO-Demo\Firmware\Factory bin

与 Home assistant 配合使用

产品可以在通过树莓派上搭建的 Homeassistant ,进行线上控制,实现相关操作请查看参考链接

资料

示例程序

数据手册

ESP32-S3

软件工具

Arduino

VScode

Thonny

调试工具

其他资料链接

FAQ

问题:模块下载程序后,重新下载,有时会出现无法连接串口,或者烧录失败的情况?

  • 可长按BOOT按键,同时按下RESET,然后松开RESET,再松开BOOT按键,此时模块可进入下载模式,可解决大部分无法下载的问题。


问题:模块出现一直复位的情况,从设备管理器查看识别状况会一闪一闪的?

  • 这种情况可能是由于 Flash 空白导致 USB 口不稳定,可长按BOOT按键,同时按下RESET,然后松开RESET,再松开BOOT按键,此时模块可进入下载模式烧录固件(程序)即可解决该情况。


问题: 程序首次编译超级慢怎么处理?

  • 首次编译很慢属于正常情况,耐心等待即可


问题: ESP-IDF烧录成功串口显示“waiting for download...”怎么处理?

  • 若开发板有复位键则按下复位键;若没有复位键,请重新上电


问题: 找不到AppData文件夹怎么处理?

  • 部分AppData文件夹是默认隐藏的,可以设置为显示。
  • 英文系统:资源管理器->View->勾选“Hidden items”
  • 中文系统:文件资源管理器->查看->显示->勾选“隐藏的项目”


问题: 怎么查看自己使用的COM口?

  • Windows系统:

①通过设备管理器查看: 按下Windows + R键打开“运行”对话框; 输入devmgmt.msc并按回车键打开设备管理器; 展开“端口(COM和LPT)”部分,这里会列出所有的COM端口及其当前状态。
②使用命令提示符查看: 打开命令提示符(CMD); 输入mode命令,这将显示所有COM端口的状态信息。
③查看硬件连接: 如果你已经连接了外部设备到COM口,通常设备会占用一个端口号,可以通过查看连接的硬件来确定使用的是哪个端口。

  • Linux系统:

①使用dmesg命令查看: 打开终端。
②使用ls命令查看: 输入ls /dev/ttyS*或ls /dev/ttyUSB*来列出所有的串口设备。
③使用setserial命令查看: 输入setserial -g /dev/ttyS*来查看所有串口设备的配置信息。


问题:在使用 MAC 设备时,程序烧录失败?


问题:为什么代码没问题且成功烧录,运行后没有输出?

  • 查看原理图,针对不同开发板的Type-C接口,对应代码处理输出不同:
    • USB直出的开发板,支持printf函数打印输出,若想支持Serial函数打印输出则需要使能USB CDC On Boot功能或者HWCDC声明
    • UART转USB的开发板,支持printf函数和Serial函数打印输出,无需使能USB CDC On Boot


问题:扩展IO(TCA9554PWR)的 I2C 设备地址是 ?

  • 设备地址为0x20。


问题:请注意!

  • 出厂程序仅供学习,若用于实际应用请自行优化程序逻辑。


问题:使用RS485控制其他设备时不灵敏、或通信不上?

  • 请将跳线帽移至 120R 再次尝试,部分 RS485 设备需要串入 120R 电阻


技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841