使用带有 ESP32 的继电器是远程控制交流家用电器的好方法。本教程介绍了如何使用 ESP32 控制继电器模块。我们将了解继电器模块的工作原理,如何将继电器连接到 ESP32 并构建 Web 服务器来远程控制继电器(或任意数量的继电器)。
目录
介绍继电器
继电器是一种电动开关,与任何其它开关一样,它可以打开或关闭,让电流通过或不通过。它可以用低压进行控制,例如 ESP32 GPIO 提供的 3.3V,并允许我们控制高压,例如 12V、24V 或电源电压(中国家用电为220V)。
1、2、4、8、16 通道继电器模块
不同的继电器模块具有不同的通道数。您可以找到具有 1 个、2 个、4 个、8 个甚至 16 个通道的继电器模块。通道的数量决定了我们能够控制的输出数量。
有继电器模块,其电磁铁可以由 5V 和 3.3V 供电。两者都可以与 ESP32 一起使用——您可以使用 VIN 引脚(提供 5V)或 3.3V 引脚。
此外,有些还带有内置光耦合器,增加了额外的“保护层”,将 ESP32 与继电器电路光学隔离。
继电器引脚
出于演示目的,让我们看一下 2 通道继电器模块的引脚排列。使用具有不同数量通道的继电器模块是类似的。
左侧有两组三个插座,用于连接高压,右侧(低压)的引脚连接到 ESP32 GPIO。
电源电压连接
上图所示的继电器模块有两个连接器,每个都有三个插座:普通 (通讯), 常闭 (数控) 和常开 (不)。
- COM: 连接您要控制的电流(市电电压)。
- NC(常闭): 当您希望继电器默认关闭时使用常闭配置。NC 是 COM 引脚已连接,这意味着电流正在流动,除非您从 ESP32 向继电器模块发送信号以打开电路并停止电流流动。
- NO(常开): 常开配置相反:NO 和 COM 引脚之间没有连接,因此除非您从 ESP32 发送信号关闭电路,否则电路会断开。
控制引脚
低压侧有一组四个引脚和一组三个引脚。第一组包括VCC和接地为模块加电,并输入 1 (IN1) 和输入 2 (IN2) 分别控制底部和顶部继电器。
如果您的继电器模块只有一个通道,那么您将只有一个 IN 引脚。如果您有四个通道,您将有四个 IN 引脚,依此类推。
您发送到 IN 引脚的信号决定了继电器是否处于活动状态。当输入低于约 2V 时触发继电器。这意味着您将遇到以下情况:
- 常闭配置(NC):
- 高信号 – 电流正在流动
- 低信号 – 电流不流动
- 常开配置(NO):
- 高信号 – 电流不流动
- 低信号 – 电流流动
当电流应该在大部分时间流动时,您应该使用常闭配置,并且您只想偶尔停止它。
如果您希望电流偶尔流动(例如,偶尔打开灯),请使用常开配置。
电源选择
第二组引脚包括GND,VCC, 和JD-VCC引脚。这JD-VCC引脚为继电器的电磁铁供电。请注意,该模块有一个连接 VCC 和 JD-VCC 引脚的连接线帽;这里显示的是黄色的,但你的可能是不同的颜色。
随着连接线帽,VCC和JD-VCC引脚连接。这意味着继电器电磁铁直接由 ESP32 电源引脚供电,因此继电器模块和 ESP32 电路之间没有物理隔离。
如果没有连接线帽,则需要提供一个独立的电源,通过连接线给继电器的电磁铁供电京东-VCC引脚。该配置使用模块的内置光耦合器将继电器与 ESP32 物理隔离,从而防止在出现电尖峰时损坏 ESP32。
将继电器模块连接到 ESP32
如下图所示将继电器模块连接到 ESP32。该图显示了 2 通道继电器模块的接线,不同通道数的接线类似。
警告:在这个例子中,我们正在处理电源电压。误用会导致严重伤害。如果您不熟悉电源电压,可以查一下相关资料。在对 ESP 进行编程或为电路接线时,请确保一切都与电源电压断开。
或者,您可以使用 12V 电源来控制 12V 电器。
在这个例子中,我们正在控制一盏灯。我们只是想偶尔点亮灯,所以最好使用常开配置。
我们将 IN1 引脚连接到通用输入输出接口 26,您可以使用任何其它合适的 GPIO。
使用 ESP32 控制继电器模块 – Arduino Sketch
使用 ESP32 控制继电器的代码就像控制 LED 或任何其它输出一样简单。在此示例中,由于我们使用的是常开配置,我们需要发送一个 LOW 信号让电流流动,并发送一个 HIGH 信号来停止电流流动。
以下代码将点亮您的灯 10 秒,然后再将其关闭 10 秒。
const int relay = 26; void setup() { Serial.begin(115200); pinMode(relay, OUTPUT); } void loop() { // Normally Open configuration, send LOW signal to let current flow // (if you're usong Normally Closed configuration send HIGH signal) digitalWrite(relay, LOW); Serial.println("Current Flowing"); delay(5000); // Normally Open configuration, send HIGH signal stop current flow // (if you're usong Normally Closed configuration send LOW signal) digitalWrite(relay, HIGH); Serial.println("Current not Flowing"); delay(5000); }
代码如何运作
定义继电器 IN 引脚连接的引脚。
const int relay = 26;
在 setup() 里面,将继电器定义为输出。
pinMode(relay, OUTPUT);
在 loop() 里面, 设置一个低的信号让电流流动并点亮灯。
digitalWrite(relay, LOW);
如果您使用的是常闭配置,请发送高的信号灯点亮。然后,等待 5 秒钟。
delay(5000);
通过发送一个停止当前流高的信号到继电器引脚。如果您使用的是常闭配置,请发送低的信号停止电流。
digitalWrite(relay, HIGH);
使用 ESP32 Web 服务器控制多个继电器
在本节中,我们创建了一个 Web 服务器示例,它允许您通过 Web 服务器控制任意数量的继电器,无论它们被配置为常开还是常闭。您只需更改几行代码即可定义要控制的继电器数量和引脚分配。
为了构建这个 Web 服务器,我们使用ESPAsyncWebServer 库。
安装 ESPAsyncWebServer 库
按照以下步骤安装 ESPAsyncWebServer 库:
或者,在您的 Arduino IDE 中,您可以转到Sketch > Include Library > Add .ZIP library…并选择您刚刚下载的库。
为 ESP32 安装异步 TCP 库
ESPAsyncWebServer 库需要 AsyncTCP库才能 工作。按照以下步骤安装该库:
或者,在您的 Arduino IDE 中,您可以转到Sketch > Include Library > Add .ZIP library…并选择您刚刚下载的库。
安装所需的库后,将以下代码复制到您的 Arduino IDE:
完整代码如下:
定义继电器配置
修改以下变量以指示您是在常开 (NO) 还是常闭 (NC) 配置中使用继电器。设置RELAY_NO可变为真的对于常开操作系统设置为错误的为常闭。
#define RELAY_NO true
定义继电器数量(通道)
您可以定义要控制的继电器数量NUM_RELAYSvariable。出于演示目的,我们将其设置为 5。
#define NUM_RELAYS 5
定义继电器引脚分配
在以下数组变量中,您可以定义将控制继电器的 ESP32 GPIO:
int relayGPIOs[NUM_RELAYS] = {2, 26, 27, 25, 33};
设置的继电器数量NUM_RELAYS变量需要与分配的 GPIO 数量相匹配中继GPIO数组。
网络凭证
在以下变量中插入您的网络凭据。
const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD";
将 8 通道继电器连接到 ESP32
出于演示目的,我们控制 5 个中继通道。将 ESP32 连接到继电器模块,如下图所示。
示范
进行必要的更改后,将代码上传到您的 ESP32。
以 115200 的波特率打开串行监视器,然后按 ESP32 EN 按钮以获取其 IP 地址。
然后,在本地网络中打开浏览器并输入 ESP32 IP 地址以访问 Web 服务器。
您可以看到如下所示的内容,其中的按钮数量与您在代码中定义的继电器数量一样多。
现在,您可以使用这些按钮通过智能手机远程控制继电器。
安全外壳
对于最终项目,请确保将继电器模块和 ESP 放置在外壳内,以避免任何交流引脚暴露在外。
总结
使用带有 ESP32 的继电器是远程控制交流家用电器的好方法。
使用 ESP32 控制继电器与控制任何其它输出一样容易,您只需发送 HIGH 和 LOW 信号,就像控制 LED 一样。
您可以使用我们控制输出的 Web 服务器示例来控制继电器。您只需要注意您正在使用的配置。如果您使用的是常开配置,则继电器使用反转逻辑。