ESP8266通过MQTT接入Home Assistant实践

      此前我在《用树莓派构建家庭智能家居控制中心》一文中介绍了如何在Home Assistant中集成MQTT,以便下一步集成个人DIY设备。本文将用WIFI模块ESP8266来DIY一个智能插座以控制灯的开关,并通过MQTT集成到Home Assistant,实现与小米、华为等厂商的智能家居设备和传感器联动。同理,也可将DIY的传感器集成到Home Assistant,并与其他智能家居设备联动。

一、设计思路

      通过ESP8266模块接入WIFI网络,并与MQTT服务器建立连接,在Home Assistant构建MQTT灯光开关控制实例,通过发布灯光的开/关状态和命令主题,来控制继电器吸合/释放,实现对灯光的开/关控制。

二、器件准备

    1. ESP8266模块(ESP-01S)

      

     2. 继电器模块

   

         该模块集成了5V转3.3V为ESP8266供电,因此电源可直接使用5V直流电。

    3. USB转TTL-CH340模块

        

         一定要将CH340模块的电压跳线调整到3.3V,以免写入程序时烧坏ESP8266模块。

    4. 直流5V电源,利旧5V 1A USB充电器

      

      我实际是暴力拆解了一个旧的原装苹果5V 1A充电器,苹果充电器集成度高,占用空间小,发热量也小,适合后期集成到插座里。 

三、烧写ESP8266

1. 连接CH340模块和ESP8266模块

      按照下表连接CH340模块和ESP8266模块:

esp8266(ESP-01S)

CH340

RX

TX

TX

RX

GND

GND

3.3V

3.3V

IO0

GND

      注意:IO0管脚接地为烧录模式,代码烧录完成后需要断开IO0,重新上电程序才能运行 。

具体详见:

ch340非一键下载电路烧录esp8266程序_lynch21的博客-CSDN博客_esp8266使用ch340c烧录

2. ESP8266开发环境搭建

      本文基于Arduino安装ESP8266开发环境,首先安装Arduino IDE环境,然后在Arduino IDE上“开发板管理”里安装设置esp8266库,还需在“加载库管理”里面新安装MQTT消息组件“PubSubClient”库,再安装CH340驱动程序,将上面已连接ESP8266模块的CH340插入电脑USB接口,在Arduino IDE设置好COM口,就可以开始编程测试了。具体详见:

esp8266开发入门教程(基于Arduino)——环境安装_柒壹漆的博客-CSDN博客_esp8266开发教程

3. 编写ESP8266通讯程序

程序如下:

/*
ESP8266连接MQTT,并订阅发布信息
*/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "MyWIFI";               //设置Wi-Fi名
const char* password = "123***";           //设置Wi-Fi密码

const char* mqtt_server = "192.168.0.***"; //设置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_Switch");          //设置主题
      client.publish("LED_Switch", "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();
}

      完成程序编译上传后,打开Arduino IDE串口监视器,看程序是否能正常连接WIFI和MQTT服务器,并开始监听LED_Switch主题。如以上正常,在Home Assistant的MQTT集成中向LED_Switch主题发布测试数据,打开订阅监听,同时查看串口监视器,看ESP8266程序能否正常接收MQTT发布的主题信息(“0”关闭灯,“1”打开灯)。

4. 连接测试

      将ESP8266插入继电器模块,给继电器模块加5V直流电,在Home Assistant的MQTT集成中向LED_Switch主题发布测试数据,继电器将根据发布的LED_Switch主题“0/1”状态进行释放或吸合动作。

四、配置Home Assistan

      在configuration.yaml文件中添加以下配置,以添加MQTT实例: 

# add light
mqtt:
  light:
    # Device name
    - name: "Bookcase_Light"
    # State topic
      state_topic: "LED_Switch"
    # Command topic
      command_topic: "LED_Switch"
    # Command type
      payload_on: "1"
      payload_off: "0"
    # unique_ID
      unique_id: "LED1"
    # optimistic set
      optimistic: false

      保存后在Home Assistant重新加载MQTT集成,如没有报错信息,MQTT集成将增加一个“Bookcase_light”实例。如没有报错也没有出现实例,请检查configuration.yaml文件格式是否正确,或重启Home Assistant服务器。

五、组装集成和测试

      打开“Bookcase_light”实例,在“自动化”中设置自动化应用场景,触发条件、环境条件、动作等可在Home Assistant集成的所有设备、实例里选择,为简单起见,本次测试仅设置了晚上20点打开,23点关闭的场景:

       一切测试正常后,将ESP8266模块、继电器模块、利旧的USB充电器等,以及带开关的电源插座,安装到明装插座盒中,按下图完成线路连接。

 

       实物如下图:

  • 20
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ESP8266可以通过MQTT协议连接OneNet平台。具体步骤如下: 1. 注册OneNet账号并创建设备,获取设备ID和API Key。 2. 下载并安装Arduino IDE,安装ESP8266开发板支持。 3. 在Arduino IDE中安装PubSubClient库,该库可以实现ESP8266MQTT服务器的通信。 4. 编写ESP8266的程序,包括WiFi连接和MQTT连接部分。在MQTT连接部分,需要设置MQTT服务器地址、端口号、设备ID和API Key等参数。 5. 将程序上传到ESP8266开发板中,启动设备并连接到WiFi网络。 6. 在OneNet平台上创建数据流,并将数据流与设备关联。 7. 在ESP8266的程序中,通过PubSubClient库实现数据的发布和订阅,将设备采集的数据发送到OneNet平台。 以上是ESP8266通过MQTT连接OneNet平台的基本步骤,具体实现过程需要根据具体情况进行调整。 ### 回答2: ESP8266是一款资源占用较少、平台支持丰富的物联网芯片,而MQTT是一种轻量级的通信协议,被广泛应用于物联网领域。OneNet是中国移动物联网推出的云平台服务,提供物联网数据存储、应用管理等功能。在实际应用中,如何通过MQTT连接ESP8266和OneNet是非常重要的。 首先,需要在OneNet平台上创建设备和数据流。具体步骤如下: 1. 登录OneNet平台,点击“创建产品”; 2. 输入产品名称、编码、设备数量等信息,点击“下一步”; 3. 在设备信息页面,填写设备名称、描述信息、设备类型等,点击“下一步”; 4. 在数据流信息页面,填写数据流名称、数据类型、单位等,点击“创建产品”。 接下来,需要使用MQTT协议连接OneNet平台和ESP8266。具体步骤如下: 1. 安装MQTT客户端,例如Eclipse Paho MQTT客户端; 2. 在ESP8266编写程序,包括WIFI连接和MQTT连接两部分。WIFI连接可使用ESP8266 Wi-Fi库实现,MQTT连接可使用PubSubClient库实现(通过Arduino IDE添加库); 3. 在程序中,需要填写OneNet平台的设备CCID、MQTT地址、端口、设备Token等信息; 4. ESP8266通过MQTT协议与OneNet平台建立连接,可以发布数据流或订阅数据流等操作。 总体来说,ESP8266通过MQTT连接OneNet平台需要以下步骤:创建OneNet设备和数据流、使用MQTT客户端连接OneNet平台、在程序中填写必要信息、建立连接并实现数据传输。在实际应用中,需要根据需求不断优化代码并进行测试。 ### 回答3: ESP8266是一款极具性价比的物联网芯片,它的开发板价格低廉,拥有丰富的GPIO和ADC输入输出口,可以与各种传感器和执行器进行交互。而MQTT作为一种轻量级的物联网协议,其传输数据的效率高、占用的带宽少,在物联网应用中得到了广泛的应用。而OneNet云平台则提供了云端数据存储与管理、远程控制等服务,是物联网开发的重要工具之一。 将ESP8266与OneNet云平台结合起来,可以实现各种智能化的控制和响应,例如远程控制家中的灯光、监控室内温湿度等。 实现ESP8266通过MQTT连接OneNet云平台主要分为以下几个步骤: 1.注册OneNet账号、创建设备和数据流 在OneNet账号中创建设备,拥有特定的设备ID和API Key。同时,需要在设备中创建对应的数据流,例如温度、湿度等,将来ESP8266采集的数据会通过MQTT协议传输到这些数据流中。 2.配置ESP8266开发板 需要先将ESP8266与电脑连接,配置Wi-Fi和Arduino IDE环境,下载并导入MQTT库等工作。这些步骤可以参考ESP8266的官方文档或者开发者社区中的资料。 3.实现MQTT传输协议 在ESP8266中可以利用MQTT库实现数据的传输,该库提供了MQTT协议的相关接口函数,例如连接OneNet平台、订阅和发布数据流、解析回调函数等。需要在代码中填写OneNet平台分配的设备ID、API Key和数据流等信息。 4.测试与调试 在ESP8266和OneNet平台完成MQTT连接和数据传输后,可以通过OneNet控制台观察数据流的变化,验证ESP8266的数据采集和传输功能是否正常。如果有问题,需要检查代码中的配置信息、MQTT协议的回调函数等。 同时,为了节约电量和延长ESP8266的寿命,可以采用低功耗模式、深度睡眠模式等技术来优化ESP8266的电源管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值