小白第二篇,知识回顾。
云服务器我使用阿里云服务器,因为笔者还是位学生,白嫖了阿里云七个月的云服务器,非常不错。笔者也使用过腾讯云,感觉云服务器都是一样的配置过程。
我是先安装云服务器的ubuntu系统,然后安装宝塔-->docker-->homeasstant。就是图方便,不熟悉Linux的同学可以上网去看看这个教程,也是很方便很容易的,我就不一一讲解啦。还有需要安装MQTT在云服务器才能使用esp8266哦。
不懂的宝子或者懒得百度可以借鉴王铭东老师的教程配置好homeasstant和MQTT:https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/n02.buy.server
因为笔者是物联网工程专业的学生,对esp32、esp8266比较感兴趣,因为能用arduino上云实在太方便啦,所以一直折腾。最近在b站看到homeasstant做的智能家居系统交互控制平台,实在是太好看了,就打算入坑学习一下。homeasstant入门教程我实在找不到资源,有资源的高手可以评论留言一下我想学习!下面我看一下我学习的进程。
一、homeasstant配置
homeasstant有一个非常重要的文件那就是configuration.yaml,安装homeasstant会自带。我们看一下接入esp8266的配置。(有可以直接用esphome接入,感兴趣可以去看看,我主要总结简单的通过arduino代码编写去接入homeasstant)
这里我演示一个esp8266的按键控制配置。
在configuration.yaml配置加入以下内容:注意好空格和 “-”,如果没有按照格式是不会出现开关按键的!!!
mqtt:
# light(灯光)实体:注意格式,该空格要空格
light:
- name: "Bookcase_Light"
state_topic: "LED_light"
command_topic: "LED_light"
payload_on: "1"
payload_off: "0"
unique_id: "LED1"
optimistic: false
加入完成后保存,重启homeasstant就可以看到有一个开关按键:
二、arduino代码:
对于的配置和库函数可以自行百度下载好,都是非常简单的。需要注意修改WiFi还有自己的MQTT服务器地址,这就是前面说的要在云服务器安装好自己的MQTT,配置好了MQTT地址也是云服务器的公网IP。
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "xxx"; //连接自己的Wi-Fi
const char* password = "12345678"; //Wi-Fi密码
const char* mqtt_server = "192.168.xx.xxx"; //设置自己的MQTT服务器地址
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
int ledPin = 0; //设置ESP8266的GPIO0号脚为输出控制脚
//连接wifi
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
//等待WiFi连接
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//wifi连接成功后输出成功信息
Serial.println("");
Serial.println("WiFi Connected!"); //显示wifi连接成功
Serial.println(WiFi.localIP()); //返回wifi分配的IP
Serial.println(WiFi.macAddress()); //返回设备的MAC地址
Serial.println("");
randomSeed(micros());
}
//回调函数
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();
// 通过接收的信息 '1'或'0'来控制开或关
if ((char)payload[0] == '1') {
digitalWrite(ledPin, HIGH); //接收到'1'GPIO0输出高电平
Serial.println("HIGH");
} else {
digitalWrite(ledPin, LOW); //接收到'0'GPIO0输出低电平
Serial.println("LOW");
}
}
void reconnect() {
String clientId = "ESP-01A-711"; //设备名
if (client.connect(clientId.c_str())) { //尝试连接MQTT
Serial.println("MQTT connect success."); //显示MQTT连接成功
client.subscribe("LED_light"); //设置主题
client.publish("LED_light", "0"); //向主题发送消息
} else {
delay(5000); //等待5秒重试
}
}
void setup() {
pinMode(ledPin, OUTPUT); //设置GPIO0为输出脚
digitalWrite(ledPin, LOW); //GPIO0初始输出低电平
Serial.begin(115200);
setup_wifi(); //连接wifi
client.setServer(mqtt_server, 1883); //设置MQTT服务器
client.setCallback(callback); //设置回调函数
}
void loop() {
if (!client.connected()) {
reconnect(); //尝试连接MQTT服务器并接收信息
}
client.loop();
char temp[8];
char hum[8];
dtostrf(24.4, 4, 2, temp);
dtostrf(56.5, 4, 2, hum);
char temperatureTopic[] = "sensor/temperature";
char humidityTopic[] = "sensor/humidity";
}
编译下载应该没有问题,如何可以看看控制效果,笔者试过了没有问题。
还没我在更新传感器和多个设备接入的配置。