首页 > 数据库 > 数据库开发技术 > 基于MQTT+小爱同学 控制双开继电器
本文为搭建带来基于物联网方面的应用实例,基于MQTT+Home Assistant+小爱同学。
继电器和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();
}
在集成中,添加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笔记;如有侵权,请联系管理员删除。