一、什么是MQTT
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议
上图就是MQTT
的一个通信方式
MQTT
协议中的角色有三种:发布者(Publish
)、代理(Broker
)(服务器)、订阅者(Subscribe
)
其中发布者和订阅者都是客户端,代理是服务器,发布者也可以是订阅者MQTT
的通信消息分为两部分:主题(Topic
)和负载(payload
)两部分Topic
:可以理解为消息的类型,订阅者订阅(Subscribe
)后,就会收到该主题的消息内容(payload
)payload
:可以理解为消息的内容,是指订阅者具体要使用的内容
MQTT
提供三种的通信质量,也是订阅的等级:
QoS0
:就是推送之后就完事了,至于对方有没有收到,收到是什么,数据有没有丢失,都不管QoS1
:就是你收到推送后,你还得返回一个Puback
给对方,告诉对方收到了,不然对方会以为你没收到,隔一段时间后重新给你推送,直到你给对方返回一个Puback
为止QoS2
:与QoS1
相同,但是不同的是QoS1
可能收到相同的推送,但是QoS2
只能收到一次
其实三者的关系可以理解为,至多一次,至少一次,有且仅有一次
其他的关于具体的协议数据需要了解,参考下面的文章
实验采用的一种方式是,自己订阅主题,自己发布该主题,自己接收该主题的信息,也就是发布者和订阅者都是自己(ESP8266
)
二、创建MQTT服务器
发布者和订阅者都是需要知道MQTT
服务器的端口和地址,因为创建的服务器是本地的,所以需要在同一个局域网内
根据自己的电脑来下载,然后解压到一个没有中文的路径下
当前目录右键打开cmd
窗口,输入
apollo.cmd create <名字> 例如:apollo.cmd create mymqtt
然后就在当前目录生成一个mymqtt文件夹,进入..\mymqtt\bin\
路径下,右击打开cmd
窗口,输入apollo-broker.cmd run
命令,出现下面的这一坨东西就是创建成功了
然后查看自己电脑的ip
地址
三、修改代码
打开工程的example
文件夹,找到里面的esp_mqtt_proj
,复制到工程根目录下,可以重命名为app
,打开include
里面的mqtt_config.h
文件
修改以下部分:
#define CFG_HOLDER 0x00FF55A4 // 这个是用来检验ESP8266flash里面的数据是否更新的,当前值和上一次烧写的软件值一定要不一样
#define MQTT_HOST "192.168.xxx.xxx" // 是你做为MQTT服务器的电脑的地址
#define MQTT_PORT 61613 // MQTT服务器的端口号,由apollo软件设置好了
#define MQTT_USER "admin" // MQTT服务器控制台用户名
#define MQTT_PASS "password" // MQTT服务器控制台登录密码
#define STA_SSID "TP-LINK-8266" // wifi名字
#define STA_PASS "123456789" // wifi密码
//#define PROTOCOL_NAMEv31 // 注释掉
#define PROTOCOL_NAMEv311 // 宏定义PROTOCOL_NAMEv311
修改完之后重新编译没有问题就可以烧录了
四、实验结果
串口输出的信息如下,可以看到,ESP8266
订阅了三个主题,且分别在这三个主题上发布了三个推送
这里面可以看到ESP8266收到了三个推送,分别是hello0
、hello1
和hello2
浏览器打开MQTT服务器的控制台http://127.0.0.1:61680/,然后输入登录名字admin
,登录密码password
,点击主题,可以看到有三个主题使用了,具体详情可以点击进去看到是谁发布的和推送的
上述就是本地MQTT服务器的通信了
2020.6.23