在前面,我们利用ESP8266制作了远程开机卡。是基于点灯搞得。用了一段时间发现延迟比较高,而且容易掉线。
本想直接入手开机卡。但是看看价格,作为一名合格的垃圾佬果断放弃。
实验准备
-
esp8266(十块左右) -
热熔胶(用于固定) -
杜邦线(没有就普通型代替)
自建MQTT服务
关于MQTT服务的搭建,可以参考文章《物联网入门之MQTT协议(一)》
实验代码
注意,开发板选择NodeMCU
。烧录代码到设备。
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Wi-Fi 网络信息
const char* ssid = "PDCN";
const char* password = "1234567890";
// MQTT 服务器信息
const char* mqtt_server = "xx.xxx.xxx.xxx";
const int mqtt_port = 1883;
// 电脑电源控制的GPIO脚针
const int powerPin = D1; // 根据你的ESP8266模块,选择合适的脚针
WiFiClient espClient;
PubSubClient client(espClient);
// 当客户端连接到MQTT服务器时调用
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP8266Client")) {
Serial.println("connected");
// 订阅开机和关机主题
client.subscribe("computer/control");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (unsigned int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// 将payload转换为字符串
char message[length + 1];
strncpy(message, (char*)payload, length);
message[length] = '�';
// 处理开机命令
if (String(topic) == "computer/control" && String(message) == "on") {
digitalWrite(powerPin, HIGH); // 打开电脑电源
delay(200);//延时200ms模拟按下延迟
digitalWrite(powerPin,LOW);//模拟松开按钮
}
// 处理关机命令 不建议直接关机,可登录服务器用关机命令关机。这里关机相当于直接断电。
if (String(topic) == "computer/control" && String(message) == "off") {
digitalWrite(powerPin, HIGH); // 打开电脑电源
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
pinMode(powerPin, OUTPUT); // 设置GPIO脚针为输出模式
digitalWrite(powerPin, HIGH); // 初始状态为开启电脑电源 可根据实际情况进行调试。
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
线路
连接到主板开机跳线处,注意正负。
3v3
--连接正极
D1
--连接负极
关于Esp8266供电,我直接插到了光猫的USB口中。
接入HA
修改ha配置文件configuration.yaml
添加信息如下:
- unique_id: led_3 #设备ID
name: "led_3" #设备名称
state_topic: "computer/control" #订阅端口
command_topic: "computer/control" #同上
payload_on: "on" #开灯的指令
payload_off: "off1" #关灯的指令
更详细配置MQTT 请移步文章《物联网入门之安装Homeassistant(二)》
同步小爱
别人有的,我们也不能少。利用法巴云插件我们可以将设备同步到米家,进行小爱开机。
更多精彩文章 欢迎关注我们
原文始发于微信公众号(kali笔记):手捏远程开机卡 接入HA和小爱
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论