在现代生活中,能够远程控制家中的设备已经变得越来越便捷和普及。对于需要远程管理电脑的用户来说,能够通过智能设备实现远程开关机和重启电脑,不仅提高了工作效率,也增加了使用的便捷性。本文将详细介绍如何使用 ESP8266 模块配合双路继电器,并借助点灯科技的 Blinker 服务与小爱同学实现远程控制电脑的开关与重启功能。

所需材料

在开始之前,请准备以下材料:

  • ESP8266 模块
  • 高电平双路继电器模块
    • 需要确认购买的继电器的高/低电平触发规则 是否需要升压模块
  • 杜邦线若干
  • 电源适配器(为 ESP8266 和继电器提供稳定电源)
  • 电脑主板前面板跳线(用于开关机和重启控制)
  • 面包板或焊接工具(根据实际需求选择)
  • 外壳(用于固定和保护电子元件,可选)
  • 点灯科技 Blinker 账户(用于连接小爱同学)
  • 小爱同学智能设备(如小爱音箱、手机上的小爱同学 App)

原理介绍

电脑的开关机与重启功能通常通过主板上的前面板跳线实现。通过短接特定的引脚,模拟按下开关机或重启按钮。我们将利用 ESP8266 模块通过 WiFi 接收指令,结合点灯科技的 Blinker 服务与小爱同学,实现双路继电器分别控制电脑的开关和重启功能,从而实现远程控制。

工作原理简述:

  1. 开关机控制:继电器1连接到主板的开关机跳线。当继电器1闭合时,相当于按下开关机按钮,实现开机或关机。
  2. 重启控制:继电器2连接到主板的重启跳线。当继电器2闭合时,相当于按下重启按钮,实现远程重启。

硬件连接

1. 继电器模块连接

双路继电器模块通常具有以下引脚:

  • DC+(VCC):连接到 ESP8266 的 3.3V 供电引脚。
  • DC-(GND):连接到 ESP8266 的 GND引脚
  • IN1IN2:控制继电器1和继电器2的信号端,分别连接到 ESP8266 的 GPIO5(D1)GPIO4(D2)

2. ESP8266 与电脑主板连接

找到电脑主板上的前面板跳线,包括电源按钮(PWR SW)和重启按钮(RESET SW)。

连接步骤:

  1. 开关机控制
    • 将继电器1的常开(NO)端子和公共(COM)端子分别连接到主板的 PWR SW 两个引脚。
  2. 重启控制
    • 将继电器2的常开(NO)端子和公共(COM)端子分别连接到主板的 RESET SW 两个引脚。

camera1.jpg

camera2.jpg

3. 电源供电

ESP8266 模块使用Micro USB 5V供电,继电器模块使用 3.3V 供电。由于继电器模块标注为5V,但本文使用的高电平触发继电器在实际使用中可以通过3.3V驱动,因此选择使用3.3V供电。

Q1:为什么3.3V可以驱动5V的高电平继电器?

A:虽然继电器模块标注为5V,但在实际应用中,3.3V信号也能驱动高电平继电器。这主要是因为:

  • 继电器的触发阈值通常低于其额定电压。例如,一个5V的高电平继电器可能在3.5V或更低时就能触发。
  • 3.3V虽然低于5V,但对于许多5V高电平继电器来说,仍然足以超过其触发阈值。
  • 继电器内部的线圈只需要足够的电压来产生足够的磁场,而不一定需要完全达到额定电压。
  • 一些5V继电器的设计具有一定的容差,可以接受较低的触发电压。

Q2:为什么3.3V无法驱动5V低电平继电器?

A:低电平继电器在接收到低电平信号时激活。在这种情况下:

  • 低电平继电器通常需要将输入端拉低到接近地电平(0V)才能激活。
  • 3.3V信号对于5V系统来说是一个中间电平,既不是高电平也不是低电平。
  • 5V低电平继电器可能将任何高于1-2V的信号视为高电平,因此3.3V信号不会被识别为有效的低电平触发。
  • 低电平继电器通常依赖于将输入端拉到足够低的电压来切断内部晶体管或其他开关元件的导通,3.3V无法实现这一点。

总结:

  • 高电平继电器主要关注信号是否超过某个阈值,3.3V常常足以达到这个要求。
  • 低电平继电器需要信号接近0V,3.3V远高于这个要求,因此无法正确触发。

软件配置与编程

1. 准备开发环境

使用 Arduino IDE(推荐使用Arduino IDE 1.8.19版本)进行 ESP8266 的编程。确保已安装 ESP8266 开发板支持包。

安装步骤:

  1. 打开 Arduino IDE,进入 文件——首选项,在 附加开发板管理器网址 中添加(2选1):
  • https://arduino.esp8266.com/stable/package_esp8266com_index.json

  • https://arduino.me/packages/esp8266.json

    1.png

  1. 进入 工具——开发板——开发板管理器,搜索并安装 ESP8266 支持包。

    注:以下安装方法可能会遇到 下载速度较慢&网络无法连接,如安装失败 可参考 此文档 安装。

    2.png

    3.png

  2. 进入工具——开发板选择正确的 ESP8266 开发板型号,本文使用的是:Generic ESP8266 Module。

    4.png

2. 安装 Blinker Arduino库

安装步骤:

  1. 官网下载点此下载(该链接可能不是最新,建议官网下载)Blinker Arduino库

  2. 选择Arduino IDE 菜单——项目——加载库——添加.ZIP库——选择刚刚下载的文件。

    5.png

  3. 以下是另一种安装方法:在 Arduino IDE 中,进入 工具——管理库——搜索 Blinker,找到由点灯科技发布的 Blinker 库并安装。

    6.png

    7.png

4. 获取点灯·Blinker的Secret Key

  1. 下载并安装 点灯·Blinker App(支持 iOS 和 Android)。
  2. 注册账户并登录。
  3. 在 点灯·Blinker App 中右上角选择创建一个新的设备——独立设备——网络接入——复制KEY——返回我的设备。

8.png

3. 使用Arduino IDE编写控制代码

以下代码由GPT编写,使用 点灯·Blinker 服务接入小爱同学,实现通过小爱同学或 Blinker 提供的其他方式控制继电器,从而实现远程控制电脑的开关与重启功能。

代码中的以下三个字段需要自行填写

  • char auth[] = "you Secret key"; // 在App中获取的 Secret Key
  • char ssid[] = "you wifi ssid"; // WiFi 名称
  • char pswd[] = "you wifi password"; // WiFi 密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET

#include <Blinker.h>

char auth[] = "you Secret key"; // 在App中获取的 Secret Key
char ssid[] = "you wifi ssid"; // WiFi 名称
char pswd[] = "you wifi password"; // WiFi 密码

// 定义高电平触发继电器的GPIO引脚
const int relayPin1 = 5; // 第一个继电器对应 GPIO 5
const int relayPin2 = 4; // 第二个继电器对应 GPIO 4(可以选择不同的引脚)

// 新建按钮组件
BlinkerButton Button1("power");
BlinkerButton Button2("power_long");
BlinkerButton Button3("reset"); // 为第二个继电器添加一个按钮

// 定义全局变量以使用 millis() 来代替 delay() 阻塞延时
unsigned long relay1StartTime = 0;
unsigned long relay2StartTime = 0;
unsigned long relay1Duration = 0; // 用来存储第一个继电器的通电时长
unsigned long relay2Duration = 0; // 用来存储第二个继电器的通电时长
bool relay1Active = false;
bool relay2Active = false;

// 按钮回调函数,按下时第一个继电器通电500ms
void button1_callback(const String & state) {
BLINKER_LOG("Button 1 pressed, relay 1 ON for 500ms");
digitalWrite(relayPin1, HIGH); // 第一个继电器通电
relay1StartTime = millis();
relay1Duration = 500; // 持续500ms
relay1Active = true;
}

// 按钮回调函数,按下时第一个继电器通电10秒
void button2_callback(const String & state) {
BLINKER_LOG("Button 2 pressed, relay 1 ON for 10 seconds");
digitalWrite(relayPin1, HIGH); // 第一个继电器通电
relay1StartTime = millis();
relay1Duration = 10000; // 持续10秒
relay1Active = true;
}

// 按钮回调函数,按下时第二个继电器通电500ms
void button3_callback(const String & state) {
BLINKER_LOG("Button 3 pressed, relay 2 ON for 500ms");
digitalWrite(relayPin2, HIGH); // 第二个继电器通电
relay2StartTime = millis();
relay2Duration = 500; // 持续500ms
relay2Active = true;
}

// 小爱同学电源状态控制
void miotPowerState(const String & state) {
BLINKER_LOG("Need set power state: ", state);
if (state == BLINKER_CMD_ON) {
BLINKER_LOG("Relay 1 ON for 500ms (via Xiao Ai)");
digitalWrite(relayPin1, HIGH); // 第一个继电器通电
relay1StartTime = millis();
relay1Duration = 500; // Xiao Ai 控制继电器持续 500ms
relay1Active = true;
BlinkerMIOT.powerState("on"); // 更新小爱状态为开
} else if (state == BLINKER_CMD_OFF) {
BLINKER_LOG("Relay 2 ON for 500ms (via Xiao Ai)");
digitalWrite(relayPin2, HIGH); // 第二个继电器通电
relay2StartTime = millis();
relay2Duration = 500; // Xiao Ai 控制继电器持续 500ms
relay2Active = true;
BlinkerMIOT.powerState("off"); // 更新小爱状态为关
}
BlinkerMIOT.print();
}

void setup() {
// 初始化串口
Serial.begin(115200);

// 初始化继电器引脚
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
digitalWrite(relayPin1, LOW); // 初始状态第一个继电器断电
digitalWrite(relayPin2, LOW); // 初始状态第二个继电器断电

// 初始化 Blinker
Blinker.begin(auth, ssid, pswd);

// 设置按钮回调
Button1.attach(button1_callback);
Button2.attach(button2_callback);
Button3.attach(button3_callback); // 添加 Button3 的回调
BlinkerMIOT.attachPowerState(miotPowerState); // 绑定小爱同学的电源状态控制
}

void loop() {
// 检查第一个继电器是否需要关闭(基于继电器的持续时长 relay1Duration)
if (relay1Active && millis() - relay1StartTime >= relay1Duration) {
digitalWrite(relayPin1, LOW); // 第一个继电器断电
BLINKER_LOG("Relay 1 OFF after ", relay1Duration, "ms");
relay1Active = false;
}

// 检查第二个继电器是否需要关闭(基于继电器的持续时长 relay2Duration)
if (relay2Active && millis() - relay2StartTime >= relay2Duration) {
digitalWrite(relayPin2, LOW); // 第二个继电器断电
BLINKER_LOG("Relay 2 OFF after ", relay2Duration, "ms");
relay2Active = false;
}

// 处理 Blinker 事件
Blinker.run();
}

代码说明:

  • 点灯·Blinker 配置:通过 Blinker.begin(auth, ssid, pswd) 方法连接到 WiFi 和 点灯·Blinker服务。auth 是在 点灯·Blinker App 中获取的 Secret Key。
  • 继电器控制:定义了两个继电器引脚(GPIO5 和 GPIO4),并通过按下按钮或小爱同学指令控制继电器的通断,实现电脑的开关机和重启。
  • 按钮回调:定义了三个按钮回调函数,分别用于短时开关机(500ms)、长时开关机(10秒,适用于需要长时间保持信号的情况)、以及重启(500ms)。
  • 小爱同学集成:通过 BlinkerMIOT.attachPowerState(miotPowerState) 方法,将小爱同学的电源控制绑定到继电器控制函数,实现语音控制。

4. 上传代码

  1. 使用 USB 线将 ESP8266 开发板连接到电脑。

  2. 在 Arduino IDE 中选择正确的 开发板型号 和 端口

  3. 点击上传按钮,将代码烧录到 ESP8266 模块。

    9.png

配置 点灯·Blinker APP 远程控制界面

通过 点灯·Blinker 应用提供的界面,用户可以在手机上直接控制电脑的开关和重启。具体步骤如下:

  1. 打开 点灯·Blinker App,进入已创建的设备页面。
  2. 添加按钮组件(如“开关机”、“强制关机””、“重启”),并绑定到对应的按钮名称(powerpower_longreset)。

此外,如果需要通过网页界面访问,可以结合 Blinker 的 Webhook 功能,进一步扩展控制方式。

10.png

配置小爱同学

点灯·Blinker 是一个物联网平台,支持多种智能设备的连接与控制,能够与小爱同学无缝集成,实现语音控制功能。

1. 在 米家 APP 添加设备

  1. 在 米家 App 中,进入 我的 页面,选择 添加其他平台——点灯科技——绑定账号——登录 点灯·Blinker 账号——同步设备

11.png

2. 小爱同学配置自定义训练

  1. 配置开关机命令:在小爱同学 App中,进入 发现 页面,选择训练计划——添加——添加一种说法(自定义控制指令)——添加操作——选择上一步在米家APP添加的设备——打开插座——完成。
  2. 配置重启命令:在小爱同学 App中,进入 发现 页面,选择训练计划——添加——添加一种说法(自定义控制指令)——添加操作——选择上一步在米家APP添加的设备——关闭插座——完成。

12.jpg

测试与调试

在完成硬件连接和软件配置后,进行以下测试与调试:

  1. 连接测试:确保 ESP8266 成功连接到 WiFi,并成功连接到 点灯·Blinker 服务。在光猫&路由器中查看连接状态和分配的 IP 地址。
  2. 点灯·Blinker App 控制
    • 打开 点灯·Blinker App,进入设备控制页面,点击“开关机”按钮,观察第1个继电器是否正确工作。
    • 点击“强制关机”按钮,观察第1个继电器是否正确工作。
    • 点击“重启”按钮,观察第2个继电器是否正确工作。
  3. 小爱同学语音控制
    • 通过小爱同学进行语音命令,比如“打开电脑”,验证继电器是否正确工作。
  4. 长时间测试:连续多次使用不同控制方式,确保系统稳定性和响应速度。

常见问题排查:

  • 继电器不工作:检查继电器模块电源是否正常,信号引脚连接是否正确,确认代码中的引脚定义是否匹配实际连接。
  • 电脑不响应:确认继电器是否正确连接到主板的跳线,查看主板说明书确认引脚位置,确保跳线连接牢固。
  • 点灯·Blinker 连接失败:检查 WiFi 配置是否正确,确认 ESP8266 是否接收到正确的 auth 密钥,查看 点灯·Blinker App 中设备状态。
  • 小爱同学无法识别命令:检查与 点灯·Blinker 的绑定是否正确,确保语音命令配置无误,确认小爱同学设备的网络连接正常。
  • 继电器响应迟缓或不稳定:可能是由于使用 3.3V 驱动 5V 继电器引起,考虑使用升压模块或更换适合 3.3V 驱动的继电器模块。

示例视频

  • 操作演示
  • 使用 点灯·Blinker App 操作开机
  • 使用 点灯·Blinker App 操作重启

成品图片

camera3.jpg

camera4.jpg

camera5.jpg

camera6.jpg

camera7.jpg