本文为搭建带来基于物联网方面的应用实例,基于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] = ' ';
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中,安装巴法云。
点击
配置
同步实体。
接下来,在米家
-其他平台
同步巴法云。
更多精彩文章 欢迎关注我们
原文始发于微信公众号(kali笔记):基于MQTT+小爱同学 控制双开继电器
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论