手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(问题处理篇)
背景
前两篇文章收到大量粉丝的欢迎,但是同时也有不少粉丝遇到了很多奇怪的问题,博主太长时间没有复现之前的项目了,导致最近有些遗忘,今日再细化下碰到的问题和解决办法。
问题一:链接点灯科技的服务器总是会一连接上就掉线
原因:设备只能发布和订阅属于自身的topic,如果操作其他的topic将被broker断开连接!
在点灯科技的官网有说明:
如图:
我们发布和订阅的device只能是自己的ClientID,若订阅了不符合标准的topic,则会被服务器强制下线,而删除订阅的topic又需要连接上服务器才能删除,所以就导致我们永远无法再次在线,因此只能删除该链接重新配置才行。
官网的发布和订阅标准如下:
问题二:硬件设备无法收到来自MQTTX客户端的消息
原因:
发布
设备向Topic发布信息后,broker会获取其中的toDevice信息,并将该信息转发到指定设备
{"toDevice":"xxxxxxxx","data":"abcdefg"}
上述转发格式中的toDevice字段的值,非目标设备的DeviceName,而是目标设备的uuid,在下篇的说明中未注意到uuid的标准因此后续实现转发的过程中有不少小伙伴都发现发送不成功的问题,在此进行解释说明,以表歉意,浪费和误导了大家。
报文示例:
假设
设备①:
deviceName:FDE97499KO7NNLCP53AUCAH8
uuid:abcdefg1234567
设备②:
deviceName:3CCE9041LIHUPMOGX9E1PVLF
uuid:gfedcba7654321
这两设备要想相互通信就得这么发
设备①发送的Topic和报文内容
设备②发送的Topic和报文内容
问题三:MQTTX客户端在线了为什么收不到硬件设备的消息
原因:在建立链接的时候,服务器地址可能未选择正确导致,由于新建链接的时候服务器地址会默认生成一个,导致我们忘了填写点灯科技的服务器地址,最后导致虽然看上去设备和MQTTX客户端都在线了,但是就是收不到来自设备转发的消息,原因是2个都在线了,但是不在同一个服务器上,点灯服务器的地址为:broker.diandeng.tech(该地址可通过URL中的host获取)。
问题四:MQTTX客户端建立链接时总会显示错误
原因:MQTTX客户端默认建立链接时采用的是5.0版本协议,但是点灯科技服务器不支持该协议导致报错。
进行编辑,在高级选项中选择MQTT版本为3.1.1
最后的话
若还有其他小伙伴碰到问题,可参考此篇,若仍存在其他问题,可留言或私信博主,博主上线看到就会回,有问题可免费帮忙解答,共同进步!