首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手捏远程开机卡 接入HA和小爱

手捏远程开机卡 接入HA和小爱

作者头像
逍遥子大表哥
发布于 2025-07-28 19:40:34
发布于 2025-07-28 19:40:34
7620
举报
文章被收录于专栏:kali blogkali blog

在前面,我们利用ESP8266制作了远程开机卡。是基于点灯搞得。用了一段时间发现延迟比较高,而且容易掉线

本想直接入手开机卡。但是看看价格,作为一名合格的垃圾佬果断放弃。

WiFi基础款

实验准备

  • esp8266(十块左右)
  • 热熔胶(用于固定)
  • 杜邦线(没有就普通型代替)

自建MQTT服务

关于MQTT服务的搭建,可以参考文章《物联网入门之MQTT协议(一)》

实验代码

注意,开发板选择NodeMCU。烧录代码到设备。

代码语言:javascript
复制
#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] = '\0';

  // 处理开机命令
  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 添加信息如下:

代码语言:javascript
复制
- unique_id: led_3         #设备ID
      name: "led_3"             #设备名称
      state_topic: "computer/control"   #订阅端口
      command_topic: "computer/control" #同上
      payload_on: "on"           #开灯的指令
      payload_off: "off1"          #关灯的指令

更详细配置MQTT 请移步文章《物联网入门之安装Homeassistant(二)》

同步小爱

别人有的,我们也不能少。利用法巴云插件我们可以将设备同步到米家,进行小爱开机。

效果

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-02,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 实验准备
  • 自建MQTT服务
  • 实验代码
  • 线路
  • 接入HA
  • 同步小爱
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档