基于MQTT+小爱同学 控制双开继电器

admin 2024年10月17日23:06:42评论61 views字数 3712阅读12分22秒阅读模式

本文为搭建带来基于物联网方面的应用实例,基于MQTT+Home Assistant+小爱同学。

效果

设备清单

  • esp8266
  • 双开继电器(主要讲解两个以上的继电器)
  • 小灯泡

线路连接

继电器和ESP8266脚针说明

vcc--vim(这个脚针为5V)

GND--GND

两个控制端接口分别为D6 D7 可在代码中修改。

const int ledPin1 = D6;  
const int ledPin2 = D7;  
基于MQTT+小爱同学 控制双开继电器

继电器和灯泡连接线路。

基于MQTT+小爱同学 控制双开继电器
根据实际,选择闭合状态
基于MQTT+小爱同学 控制双开继电器
实物连接

实例代码

#include <ESP8266WiFi.h>  
#include <PubSubClient.h>  
  
// WiFi 配置
const char* ssid = "你的WiFi名";  
const char* password = "你的WiFi密码";  
  
// MQTT 服务配置
const char* mqtt_server = "192.168.123.4";  //mqtt服务器地址
const int mqtt_port = 1883;  //mqtt端口
const char* client_id = "ESP8266_LED_Controller";  //设备Id
const char* mqtt_username = "admin"//mqtt账号
const char* mqtt_password = "admin";  //mqtt密码
// MQTT topic  
const char* topic = "home/leds";   //订阅的主题
  
WiFiClient espClient;  
PubSubClient client(espClient);  
  
// 定义Led的脚针
const int ledPin1 = D6;  
const int ledPin2 = D7;  
  
// 定义脚针的初始状态 -关闭
bool led1State = false;  
bool led2State = false;  
  
void setup_wifi() {  
  //开始连接WiFi
  delay(10);  
  Serial.println();  
  Serial.print("Connecting to ");  
  Serial.println(ssid);  
  
  WiFi.begin(ssid, password);  
  
  while (WiFi.status() != WL_CONNECTED) {  
    delay(500);  
    Serial.print(".");  
  }  
  
  Serial.println("");  
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");  
  Serial.println(WiFi.localIP());  
}  
  /*
  下面是控制灯的核心代码,我这里只订阅了一个主题。在同一个主题中,发送不同的命令开启不同的灯。
  on-off 开启1号灯。 
  0-1 开启2号灯。
  */

void callback(char* topic, byte* payload, unsigned int length) {  
  Serial.print("Message arrived [");  
  Serial.print(topic);  
  Serial.print("] ");  
  for (int i = 0; i < length; i++) {  
    Serial.print((char)payload[i]);  
  }  
  Serial.println();  
  
  // Check the payload content  
  char payloadStr[length + 1];  
  memcpy(payloadStr, payload, length);  
  payloadStr[length] = '';  
  
  if (strcmp(topic, topic) == 0) { 
    if (strcmp(payloadStr, "on") == 0) {  
      digitalWrite(ledPin1, HIGH);  
      led1State = true;  
    } else if (strcmp(payloadStr, "off") == 0) {  
      digitalWrite(ledPin1, LOW);  
      led1State = false;  
    } else if (strcmp(payloadStr, "0") == 0) {  
      digitalWrite(ledPin2, LOW);  
      led2State = false;  
    } else if (strcmp(payloadStr, "1") == 0) {  
      digitalWrite(ledPin2, HIGH);  
      led2State = true;  
    } else {  
      Serial.println("Unknown command");  
    }  
  }  
}  
  
void reconnect() {  
  //mqtt
  while (!client.connected()) {  
    Serial.print("Attempting MQTT connection...");  
    if (client.connect(client_id, mqtt_username, mqtt_password)) {  
      Serial.println("connected");  
      client.subscribe(topic);  
    } else {  
      Serial.print("failed, rc=");  
      Serial.print(client.state());  
      Serial.println(" try again in 5 seconds");  
      delay(5000);  
    }  
  }  
}  
  
void setup() {  
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT);  
  Serial.begin(115200);  
  setup_wifi();  
  client.setServer(mqtt_server, mqtt_port);  
  client.setCallback(callback);  
}  
  
void loop() {  
  if (!client.connected()) {  
    reconnect();  
  }  
  client.loop();  
}

接入Home Assistant

在集成中,添加MQTT。填写服务器相关信息。

基于MQTT+小爱同学 控制双开继电器

添加实体

修改HomeAssistant配置文件configuration.yaml。添加代码如下:

mqtt:
 light:
    - unique_id: led_1          #设备ID
      name: "led_1"             #设备名称
      state_topic: "home/leds"   #订阅端口
      command_topic: "home/leds" #同上
      payload_on: "1"           #开灯的指令
      payload_off: "0"          #关灯的指令

    - unique_id: led_2          
      name: "led_2"             
      state_topic: "home/leds"   
      command_topic: "home/leds" 
      payload_on: "on"           #开灯的指令
      payload_off: "off"          #关灯的指令
基于MQTT+小爱同学 控制双开继电器
注意空格 书写很严格

完成后,重启HA。便可以添加实体了!

基于MQTT+小爱同学 控制双开继电器

同步小爱

在HA中,安装巴法云。

基于MQTT+小爱同学 控制双开继电器点击配置 同步实体。

基于MQTT+小爱同学 控制双开继电器

接下来,在米家-其他平台同步巴法云。

基于MQTT+小爱同学 控制双开继电器
同步设备
基于MQTT+小爱同学 控制双开继电器
效果
BREAK AWAY
相关推荐
01
物联网入门之MQTT协议(一)
02
一文玩转MQTT(基于esp8266 DHT11 MQTT Mysql实现)
03
OLED+MQTT 实现土壤 温湿度 线上线下展示

更多精彩文章 欢迎关注我们

原文始发于微信公众号(kali笔记):基于MQTT+小爱同学 控制双开继电器

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月17日23:06:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于MQTT+小爱同学 控制双开继电器https://cn-sec.com/archives/3279413.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息