手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(下)

前言:

接上篇,我们已经完成了手机APP和ESP32硬件设备同时接入点灯科技的broker(MQTT服务器),通过手机来控制和接收ESP32的外设。这篇,我们将讲解如何通过MQTTX客户端模拟另一个硬件设备以同样的方式接入点灯科技的broker,然后订阅ESP32的消息来测试PC端是否能够成功接收来自硬件设备ESP32的消息。然后再通过启动本地的Node-red,使用MQTT组件以同样的方式模拟硬件设备接入点灯科技的broker同时也订阅来自ESP32的的消息,若PC端的Node-red能够成功订阅到指定消息,便能够通过其他组件或者代码逻辑进行JSON报文的解析,以此来处理和获取我们想要的数据,搭建PC端的物联网可视化平台。

此篇中仍有不够细致的地方,若在此篇中遇到问题可参考问题解决篇进行排查处理。
手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(问题处理)

MQTTX客户端部分

①首先按照上篇的步骤同样添加一个新设备,用于模拟另一个硬件设备接入点灯科技的broker(服务器)同时记录该模拟设备的密钥

②可以登陆网址查看点灯科技提供文档,来查看点灯科技的MQTT接口的文档

网址:https://diandeng.tech/doc

③打开一个新的网页,按照文档的意思在地址栏输入该URL,我们选择的请求连接的协议为mqtt协议。

但是要把authKey={authKey}替换成自己的设备密钥,protocol={protocol}替换为希望连接的协议方式,由于是博主的设备密钥是:81d3521795ac而且请求连接的协议方式为mqtt(若不指定protocol的方式,则会默认以mqtts的方式接入,mqtt协议的接入方式所占用的端口是1883,mqtts协议的接入方式所占用的端口是1884,这里博主推荐使用1883端口接入也就是mqtt协议接入,因为后期接入Node-red的时候,使用1884端口会有连接不上MQTT服务器的BUG,暂时博主也未找到解决办法,有思路的可以留言一起探讨一下)
因此博主在地址栏输入的IP为:

https://iot.diandeng.tech/api/v1/user/device/diy/auth?authKey=81d3521795ac&protocol=mqtt

④此时请求完毕后,界面会返回一串JSON报文

⑤此时我们打开MQTTX客户端,新建连接,将对应的键值填入,连接至点灯科技的broker服务器

⑥成功连接至点灯科技的broker服务器

⑦通过参考点灯科技的MQTT订阅发布文档

我们需要可以测试下MQTTX客户端能否成功通过点灯科技的broker服务器发布和订阅主题。
博主订阅的手机端的MQTTX发布的主题如下:


⑧通过手机APP触发按键检测MQTTX客户端是否能够成功接收到消息

MQTTX客户端:

手机APPblinker的状态:
设备显示离线的原因,是因为手机客户端发布{“get”:state}消息后,并没有接收到来自硬件设备的心跳回应,因此认为设备离线,若每当手机客户端发送一遍{“get”:state}消息后,立马用PC的MQTTX客户端按照一定格式回应该消息,手机客户端接收到回应就会认为设备在线。

⑨通过指定的发布消息格式给手机端的MQTTX客户端持续发送心跳消息的JSON报文

具体报文格式:

Topic   /device/3FD603DFNVFD5HSTQSL3HHDZ/s
{
  "toDevice": "be340655834d11ecaa0d5254",
  "data":
        {
        "state":"online",
        "timer":"000",
        "version":"0.1.0"
        }
}

⑩手机端APPMQTTX客户端设备接收到心跳消息后立马就会显示设备在线,即使并没有硬件设施烧录该程序

第二部分

接下来我们使用PC的MQTTX客户端订阅上一篇文章中烧录完毕的ESP32的消息,用于测试当手机端的点灯blinkerAPP向ESP32发送开关灯指令的时候,ESP32能否成功执行指令,同时PC上的MQTTX客户端能否成功接收到ESP32发布的消息

①使用PC端的MQTTX客户端订阅ESP32发布的消息主题

②在手机点灯科技上点击开关灯按钮界面显示

③与此同时,PC机上的MQTTX接收到来自ESP32的消息显示

④与此同时,ESP32硬件设备的状态

结论

可以看到此时手机端仍然能够控制ESP32硬件设备,同时PC端的MQTTX客户端也能够同时订阅接收到点灯科技broker服务器转发来自ESP32的消息。完成了PC机-手机端APP-硬件设备ESP32三者之间的通信~

最后步骤Node-red订阅接收来自ESP32的消息

我们仍然按照之前的步骤创建第三个设备,用于Node-red连接至点灯科技的broker服务器,用于接收订阅来自ESP32的消息,若能成功接收到消息则对后续信息的处理和可视化界面的显示编程,提供了只管重要的一步。


①我们再之前的教程中已经完成了Node-red环境的部署,可以点击链接查看博主的另一篇保姆级教学
Node-red环境搭建
然后安装成功后,在命令窗口启动node-red

②启动成功后,在界面找到MQTT组件,搭建一个简易的测试环境,用于测试能否成功连接至点灯科技的broker服务器,然后订阅来自ESP32发布的主题。

③我们需要对MQTT组件进行一些配置。
首先我们需要用之前新添加的设备密钥去通过mqtt协议去请求该URL,和之前的步骤一样,我们获取到一串JSON报文。

④我们再通过配置node-red上的MQTT来成功接入服务器
首先我们订阅来自ESP32的消息,将QoS等级设置为0:节省带宽,可靠性不高。其实设不设置这个级别对于我们这个小型项目的测试来说没有什么区别,而且消息在传递和转发的过程中遵循消息降级规则。

⑤然后我们按照之前返回的JSON报文设置一下服务器等参数

⑥再根据JSON报文设置一下,登录时用的用户名和密码

⑦对于遗嘱消息,连接时发送的消息,断开时发送的消息这些进阶内容,本次测试暂时不需要,这部分内容意义不是特别大对于小型项目,这能够提高通信的健壮性,所以我们这边都不填,然后点击更新。

⑧设置完成后再点击完成

⑨最后配置一下debug组件,完成后点击右上角部署按钮,完成配置和环境的搭建


⑩最后查看效果,可以看到node-red界面上的MQTT组件以及成功连接上了。

在点灯blinker手机APP端点击开关灯的按钮,同时观测手机APP的串口打印,MQTTX客户端的输出,Node-red的debug显示以及ESP32实际的制动效果。

Node-red端

PC机的MQTTX客户端所接收到的消息

点灯科技blinker手机APP端的串口打印

实际上硬件设施的在线状态

写在最后的话

写到这终于完成了手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信,经过博主潜心研究3天,水了各大群和官方群,请教了无数水友,系统的学习了一下MQTT,最终实现了PC端-移动端-设备端之间的通信,又爆肝近10小时写了这2篇保姆级教学,还有不懂得或者不明白的欢迎留言或者私信博主一起探讨!
对于热爱物联网的同学们,推荐几个学习物联网的平台,
①B站搜太极创客,讲的MQTT和物联网挺不错
②点灯科技,提供了很多组件和平台,开发者论坛也有大量学习资料
③然也物联网平台,不过该平台注册申请的时候需要回答3个基础问题并需要管理员审核,建议注册前先系统学习一下MQTT相关知识。

对于喜爱物联网,嵌入式开发的志同道合的同学们,有不懂的问题,或者对于博主写的不对的地方欢迎在评论区或者私信提问或者批评指正,人的成长都是在曲折的道路上磨砺出来的,愿你我未来可期!~

更多推荐

手机端(APP点灯blinker)-PC端(Node-red)-设备端(ESP32)-客户端(MQTTX客户端)四者之间的通信——通过MQTT通信(下)