ITPub博客

首页 > 数据库 > 数据库开发技术 > 基于MQTT+小爱同学 控制双开继电器

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

原创 数据库开发技术 作者:逍遥子 时间:2024-10-17 08:00:00 0 删除 编辑

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

效果

设备清单

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

线路连接

继电器和ESP8266脚针说明

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

GND--GND

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

const int ledPin1 = D6;  
const int ledPin2 = D7;  

继电器和灯泡连接线路。

实例代码

#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] = '\0';  
  
  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。填写服务器相关信息。

添加实体

修改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"          #关灯的指令

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

同步小爱

在HA中,安装巴法云。

点击配置 同步实体。

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

BREAK AWAY
相关推荐
01
物联网入门之MQTT协议(一)
02
一文玩转MQTT(基于esp8266 DHT11 MQTT Mysql实现)
03
OLED+MQTT 实现土壤 温湿度 线上线下展示

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

原文作者:Kali笔记;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-01-22

  • 博文量
    760
  • 访问量
    443439