MQTT学习总结
1.什么是MQTT?
-
一种通信协议
-
用于传感器的设备间的通信和远程控制
2.自己的服务器
-
在部署搭建mqtt服务之前,我们需要先准备一台自己的云服务器
-
免费的云平台服务器的稳定性和可控性很低,我学习使用的是腾讯云平台,一个月35元,够了解MQTT的运用逻辑了
3.部署MQTT协议
-
使用emqx来实现MQTT协议。什么是emqx?emqx是一个开源的 MQTT 消息代理软件
-
在云服务器平台获取自己的公网IP
-
然后去B站搜索“安装emqx服务”关键词进行安装,过程不难,这里省略总结
-
emqx服务安装后,我们需要开启如下端口:
-
1883:TCP协议连接mqtt的端口 (单片机连接mqtt时使用)
-
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)是定义消息传递的可靠性和保证程度,其中分:
-
QoS0:最多一次传递(消息的发布者最大努力进行传递,缺点:不能保证是否收到消息,可靠性差)
-
QoS1:至少一次传递(缺点:消息可能会重复)
-
QoS2:仅一次传递(消息发布者发送消息后,会收到两个消息确认。缺点:性能耗费大)
-
会话清除(CleanSession):
-
标记true:如果客户端意外断开连接,服务器会清除所有关于这个客户端的状态信息,包括订阅、QoS等信息。
-
标记false:客户端可以接收之前会话的未接收消息,还会保留客户端的订阅、QoS等信息,即使客户端断开连接后再次连接,也可以恢复之前的会话状态。
-
保留消息(Retained Messages):
-
保留消息(Retained Messages)可以让发布者发送一条保留消息,当有新的订阅者订阅某个主题时,订阅者会立即收到最后一条保留消息。保留消息能够使订阅者接收到有关主题的最新信息,即使在它们订阅主题之前,这有助于确保订阅者在订阅后得到所需的信息。
-
遗嘱消息(Will Message):
-
MQTT协议中的遗嘱消息(Last Will and Testament)是一种机制,用于确保在客户端意外断开连接时,可以向其它订阅者发送一条预定义的消息。当客户端建立连接时,它可以指定一个遗嘱消息,包括主题、消息内容、QoS级别和retain标志。如果客户端意外断开连接,MQTT服务器会将遗嘱消息发布出去,作为通知其它订阅者客户端断开连接的方式。
6.ESP32与服务端的消息收发测试
- 上节课我们在mqttx中订阅了一个主题test,现在我们就测试从单片机和服务器之间通信
- 这里我的单片机使用的是esp32,写代码用的是vscode
安装PubSubClient库:
-
要在ESP32中连接mqtt并且进行消息的收发,我们可以使用已经封装好的库来进行操作



代码中的修改:


然后在mqttx中就可以收到发送的信息了。
7.什么是Home Assistant?
-
Home Assistant 是一个强大而灵活的智能家居自动化平台,可以帮助用户实现各种智能设备的集成和自动化控制,提供更便捷、智能和个性化的家居体验。
-
我们为什么用?答:将自己DIY的产品集成到Home Assistant,通过HA提供的PC管理端与APP来对设备进行控制;
8.部署Home Assistant
- 安装docker
- 设置docker
- 安装Home Assistant
- 放开Homeassistant端口,部署Homeassistant后,它监听的管理后台的默认端口是8123,该端口默认情况下是被腾讯云防火墙屏蔽的,我们无法访问,所以需要修改防火墙配置,放行该端口
-
在浏览器上输入地址: http://{你的服务器IP}:8123 ,即可打开Homeassistant管理后台。根据一个提示创建一个用户登录即可
上述操作可以在B站搜索部署Home Assistant,在这里写具体文档太多了!!!
9. Home Assistant集成mqtt
-
将我们之前部署好的emqx服务集成到HA中,因为后续无论是ESP32上报的消息,还是服务器给ESP32下发的指令,都是通过mqtt通道完成的


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

10.HA服务端配置物模型
- 将ESP32上采集到的传感器数据通过mqtt协议上传到HA

我们最常用的类型
- Binary sensor:二值传感器,上报只有两种状态的数据,比如报警状态(开/关)
- Sensor:普通传感器数据上报,比如温湿度数据,二氧化碳浓度数据灯


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

代码部分:
已经在ha上面配置好了硬件,在代码中主要干了哪些事?
-
上报设备在线状态(用代码形式)client.publish("home-assistant/security/fire/online/state", "online", true);
-
上报传感器与报警数据
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
- 其中新增探头和清空探头不能在自动化里面配置 因为没有状态改变,在概览里面点击配置


大学日常学习总结免费分享,无商业用途
学习参考:《微联编程》
更多推荐
所有评论(0)