云服务器配置homeasstant、esp8266使用arduino编程接入homeasstant

        小白第二篇,知识回顾。

        云服务器我使用阿里云服务器,因为笔者还是位学生,白嫖了阿里云七个月的云服务器,非常不错。笔者也使用过腾讯云,感觉云服务器都是一样的配置过程。

        我是先安装云服务器的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";
}

        编译下载应该没有问题,如何可以看看控制效果,笔者试过了没有问题。

        还没我在更新传感器和多个设备接入的配置。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值