ESP8266通过MQTT接入Home Assistant实践

这篇具有很好参考价值的文章主要介绍了ESP8266通过MQTT接入Home Assistant实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、设计思路

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

ESP8266通过MQTT接入Home Assistant实践

二、器件准备

    1. ESP8266模块(ESP-01S)

      ESP8266通过MQTT接入Home Assistant实践ESP8266通过MQTT接入Home Assistant实践

     2. 继电器模块

   ESP8266通过MQTT接入Home Assistant实践ESP8266通过MQTT接入Home Assistant实践

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

    3. USB转TTL-CH340模块

        ESP8266通过MQTT接入Home Assistant实践ESP8266通过MQTT接入Home Assistant实践

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

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

      ESP8266通过MQTT接入Home Assistant实践

      我实际是暴力拆解了一个旧的原装苹果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,重新上电程序才能运行 。

ESP8266通过MQTT接入Home Assistant实践

具体详见:

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”打开灯)。

ESP8266通过MQTT接入Home Assistant实践ESP8266通过MQTT接入Home Assistant实践

4. 连接测试

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

ESP8266通过MQTT接入Home Assistant实践

四、配置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服务器。

ESP8266通过MQTT接入Home Assistant实践

五、组装集成和测试

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

ESP8266通过MQTT接入Home Assistant实践

ESP8266通过MQTT接入Home Assistant实践

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

 ESP8266通过MQTT接入Home Assistant实践

       实物如下图:

ESP8266通过MQTT接入Home Assistant实践文章来源地址https://www.toymoban.com/news/detail-422010.html

到了这里,关于ESP8266通过MQTT接入Home Assistant实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP8266连接阿里云通过MQTT上报状态属性

    1、新建一个产品 2、添加物模型,物模型用于显示上报的消息的 编辑草稿,也就是添加属性  可以选择标准的和自定义的,我这里选择自定义的 设置物模型功能 我这里添加了两个,完成后发布上线 3、到设备中添加设备,用于ESP8266连接  添加成功后,可以看到  我这里多添

    2023年04月09日
    浏览(31)
  • STM32通过ESP8266连接MQTT服务器

            ESP8266有多种连接MQTT方式,本文介绍使用的是AT MQTT版本固件的ESP01s,基于此固件版本进行说明。本文所需硬件:STM32F103RCT6、LED、ESP01s、DHT11,实现功能:温湿度上传和远程开关灯的基本功能。 B站视频教程:STM32+ESP8266+DHT11_哔哩哔哩_bilibili gitee: STM32_Share: STM32、DHT

    2024年02月09日
    浏览(35)
  • esp8266(MQTT固件)通过at指令连接阿里云平台

    实验: esp8266 连接阿里云。 准备工作: esp8266 wifi模组 固件烧录工具 串口调试助手 阿里云账号及物联网设备申请 某宝随便买个,多的是: usb连接到电脑上之后,可以识别到串口,说明有固件。 由于新买的模组,芯片内的固件可能并不是我们想要的,此时可自行官网下载固

    2024年01月19日
    浏览(46)
  • ESP32/ESP8266 WIFI接入通过HTTP响应远程控制(附可用源码)

    ESP共有三种工作模式,分别是无线接入点模式(AP)、无线终端模式STA(Wireless Station)以及混合模式(以上两种模式的混合)。 ESP的WiFi设置是储存在它的闪存系统中的。因此在启动ESP8266并连接WiFi时,它都会尝试使用闪存系统中储存的信息来进行WiFi连接 连接网络基本步骤

    2023年04月09日
    浏览(33)
  • STM32+ESP8266+DHT11通过MQTT协议连接新版ONENET云平台上传数据

    项目讲解视频 新版 云平台搭建视频演示 单片机代码修改演示视频 APP参数修改 实物演示 前段时间ONENET云平台进行了升级更新,此前平台的多协议接入(包含旧版MQTT、HTTP、EDP、Modbus、TCP透传等)接口已经隐藏,后续应该会下架,为了能够后续继续使用ONENET云平台,就需要学

    2024年02月09日
    浏览(30)
  • 设备通过MQTT与ESP8266注册上云成功后出现离线连接不上问题

    之前在学习实现类如基于STM32开发的温度传感与上云开发时遇到了一个蛮头疼的问题。项目综合来说就是基于STM32的多点测温依据MQTT协议链接腾讯云,配套实现温度在微信小程序的显示。 最初开发时设备正常上云,在线后可实现温度数据上下行,相关微信小程序也可获得温度

    2024年02月11日
    浏览(32)
  • 从零开始用Nodejs搭建一个MQTT服务器,并且用stm32通过esp8266进行消息订阅和发布

    最近在做一个物联网项目,需要用到服务器进行数据的存储和数据的请求和发送,之前我用过onenet平台上的http服务,虽然能通过get和post请求进行数据的提交和发送,但是平台上的数据发生改变却不能主动推送给esp8266,与我此次的项目不符合,所以pass。然后我了解了下mqtt协

    2024年02月04日
    浏览(40)
  • 【MQTT基础篇(四)】ESP8266连接MQTT服务端

    首先一起来学习如何使用电脑软件来实现客户端与服务端的连接。为电脑安装一款免费的MQTT客户端软件–MQTTfx。MQTT客户端软件有很多款,不过经过使用和比较,发现免费的MQTTfx软件在易用性和功能性都非常出色。 通过MQTTfx软件,我们的电脑将会成为一台MQTT客户端。您可以通

    2023年04月23日
    浏览(30)
  • stm32+esp8266+onenet (MQTT)

    使用stm32采集温湿度/MQ2的数值用过 esp8266 +mqtT协议把数据传输给onenet平台 并且能通过onenet下发指令控制led灯的亮灭 新增产品 为产品添加设备 修改程序中对应的信息如下 修改可以联网的路由器和密码 配置成功后,采集数据,上传到onenet 打开onenet数据可视化界面,新建空白项

    2023年04月27日
    浏览(34)
  • ESP8266如何接入TLINK

    关于如何使用esp8266接入TLINK,刚做完这个项目,这里分享一下,仅供参考 一.模块准备 准备一个esp8266模块和USB转TTL模块,手机热点(路由器) 二.如何接线 三.关于对ESP8266操作的一些指令连接上手机热点 ESP8266的默认波特率是115200 关于8266的三种模式有什么不一样,可以到网上搜

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包