1.什么是MQTT?

  • 一种通信协议

  • 用于传感器的设备间的通信和远程控制

2.自己的服务器

  • 在部署搭建mqtt服务之前,我们需要先准备一台自己的云服务器

  • 免费的云平台服务器的稳定性和可控性很低,我学习使用的是腾讯云平台,一个月35元,够了解MQTT的运用逻辑了

3.部署MQTT协议

  • 使用emqx来实现MQTT协议。什么是emqx?emqx是一个开源的 MQTT 消息代理软件

  • 在云服务器平台获取自己的公网IP

  • 然后去B站搜索“安装emqx服务”关键词进行安装,过程不难,这里省略总结

  • emqx服务安装后,我们需要开启如下端口:

  1. 1883:TCP协议连接mqtt的端口  (单片机连接mqtt时使用)

  2. 18083:网页端管理端口

  • 两个端口默认情况下都是被防火墙服务屏蔽的,我们需要在防火墙服务中放行这2个端口

  • 按照图片上的步骤来进行操作,开放端口

  • 然后在浏览器去访问emqx的管理后台:在浏览器输入地址:http://{你的服务器的公网IP}:18083,如果能正常访问管理后台就显示以下图片

    添加访问账号

    • 默认账号:admin

    • 默认密码:public

    • 添加用户名和密码即可,需要记住,下一个小节需要使用

    4.使用mqttx来链接自己的搭建的MQTT

    • 下载安装mqttx:https://mqttx.app/

    • 根据自己的电脑类型来下载

    • 然后打开mqttx,进行照片上的操作

    • 连接成功的画面

    • 然后让服务器订阅一个Topic:text(主题)

    • 后续介绍为什么设置2以及主题是什么

    5.MQTT相关元素理解

    • QoS是什么?答:QoS(Quality of Service)是定义消息传递的可靠性和保证程度,其中分:
    1. QoS0:最多一次传递(消息的发布者最大努力进行传递,缺点:不能保证是否收到消息,可靠性差)

    2. QoS1:至少一次传递(缺点:消息可能会重复)

    3. QoS2:仅一次传递(消息发布者发送消息后,会收到两个消息确认。缺点:性能耗费大)

    • 会话清除(CleanSession):
    1. 标记true:如果客户端意外断开连接,服务器会清除所有关于这个客户端的状态信息,包括订阅、QoS等信息。

    2. 标记false:客户端可以接收之前会话的未接收消息,还会保留客户端的订阅、QoS等信息,即使客户端断开连接后再次连接,也可以恢复之前的会话状态。

    • 保留消息(Retained Messages):
    1. 保留消息(Retained Messages)可以让发布者发送一条保留消息,当有新的订阅者订阅某个主题时,订阅者会立即收到最后一条保留消息。保留消息能够使订阅者接收到有关主题的最新信息,即使在它们订阅主题之前,这有助于确保订阅者在订阅后得到所需的信息。

    • 遗嘱消息(Will Message):
    1. MQTT协议中的遗嘱消息(Last Will and Testament)是一种机制,用于确保在客户端意外断开连接时,可以向其它订阅者发送一条预定义的消息。当客户端建立连接时,它可以指定一个遗嘱消息,包括主题、消息内容、QoS级别和retain标志。如果客户端意外断开连接,MQTT服务器会将遗嘱消息发布出去,作为通知其它订阅者客户端断开连接的方式。

    6.ESP32与服务端的消息收发测试

    • 上节课我们在mqttx中订阅了一个主题test,现在我们就测试从单片机和服务器之间通信
    • 这里我的单片机使用的是esp32,写代码用的是vscode

    安装PubSubClient库:

    1. 要在ESP32中连接mqtt并且进行消息的收发,我们可以使用已经封装好的库来进行操作

    代码中的修改:

    然后在mqttx中就可以收到发送的信息了。

    7.什么是Home Assistant?

    • Home Assistant 是一个强大而灵活的智能家居自动化平台,可以帮助用户实现各种智能设备的集成和自动化控制,提供更便捷、智能和个性化的家居体验。

    • 我们为什么用?答:将自己DIY的产品集成到Home Assistant,通过HA提供的PC管理端与APP来对设备进行控制;

    8.部署Home Assistant

    1. 安装docker
    2. 设置docker
    3. 安装Home Assistant
    4. 放开Homeassistant端口,部署Homeassistant后,它监听的管理后台的默认端口是8123,该端口默认情况下是被腾讯云防火墙屏蔽的,我们无法访问,所以需要修改防火墙配置,放行该端口
    5. 在浏览器上输入地址: http://{你的服务器IP}:8123 ,即可打开Homeassistant管理后台。根据一个提示创建一个用户登录即可

    上述操作可以在B站搜索部署Home Assistant,在这里写具体文档太多了!!!

    9. Home Assistant集成mqtt

    • 将我们之前部署好的emqx服务集成到HA中,因为后续无论是ESP32上报的消息,还是服务器给ESP32下发的指令,都是通过mqtt通道完成的

    • 点进去配置即可,建议在emqx中为homeassistant单独创建一个新用户

    10.HA服务端配置物模型

    • 将ESP32上采集到的传感器数据通过mqtt协议上传到HA

    我们最常用的类型

    1. Binary sensor:二值传感器,上报只有两种状态的数据,比如报警状态(开/关)
    2. Sensor:普通传感器数据上报,比如温湿度数据,二氧化碳浓度数据灯

    上述是json数据格式

    11.设备端上报数据

    1. 上报设备在线状态:我们在设备端往home-assistant/security/fire/online/state 这个topic上报数据,可以设置设备的在线状态,如果上报的数据内容为"online",则表示设备在线,如果上报的内容为"offline",则表示设备离线。
    2. 上报传感器与报警数据:我们在设备端往home-assistant/security/fire/state这个topic上报数据,可以上报温湿度、燃气浓度、安防报警状态、消防报警状态五种数据,一个完整的上报的json报文如下:

    代码部分:

    已经在ha上面配置好了硬件,在代码中主要干了哪些事?

    1. 上报设备在线状态(用代码形式)client.publish("home-assistant/security/fire/online/state", "online", true);

    2. 上报传感器与报警数据
      JsonDocument doc;
                      doc["securityState"] = "on";
                      doc["fireState"] = "off";
                      doc["temperature"] = 36.5;
                      doc["humidity"] = 45;
                      doc["gas"] = 350;
      client.publish("home-assistant/security/fire/state", output, true);

    12.如何在HomeAssistant中添加数据展示页面

    • 先辅助元素去创建相关内容的实体

    • 然后配置自动化场景让按下会产生相关的操作

    状态改变state里面会输出on或者off

    • 其中新增探头和清空探头不能在自动化里面配置 因为没有状态改变,在概览里面点击配置

    大学日常学习总结免费分享,无商业用途

    学习参考:《微联编程》

    Logo

    智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

    更多推荐