ESP8266_19MQTT协议接入ONENET平台_订阅主题

上一节讲了MQTT协议的工作原理,简单来说,就跟关注微信公众号是一个道理,你关注了“单片机爱好者”这个公众号,你就能直接收到它的信息。同理,你订阅了这个服务里的某个主题A,那么当A发布消息时,你就能收到A的信息。反之,如果你没订阅,即便服务器发布了这个主题的信息,那么你也收不到。

这一节说一下主题订阅。其实内容是比较简单的,SDK里面已经提供了相关的代码,但演示起来需要几个工具配合一下。

我们需要某个设备来发送8266订阅的某个主题的信息,然后让8266接收到;这还不够,还要发布一个8266没有订阅的主题信息,确定8266收不到,这样才算工作正常。因此,我们需要一个工具来模拟成一个设备,可以向服务器发布主题信息。这里用到的是:MQTT.fx。我稍后会跟代码一起放出来。

首先要登陆ONENET网站,在上一节的产品中,再添加一个设备,如图所示:

device_B是上一节使用的设备,device_A是这一节要一起使用的。

然后是MQTT工具,这个工具需要安装一下,很简单,一路NEXT点下去就行。安装好之后打开,如下所示:

点击上图所示,齿轮的那个位置。打开如下所示:

如上图所示,打开的是某个MQTT连接的参数页面。我们需要建立一个新的参数页面,把device_A的相关参数填进去。然后运行软件,使软件模拟device_A在工作。点击上图中的“+”号,创建一个新的页面,如下所示:

参数设置如上所示,Profile Name是这个参数页面的名字,我这里把device ID放在后缀,方便识别。下面Profile Type默认选MQTT Broker。再下面是IP和端口号,和上一节一样,不解释。

然后是client_id,这里填入device_A的设备ID:532710540

下面点击:User Credentials,填入产品ID和Master-APIkey,最后点击右下角的 Apply。然后关掉当前页面,在主页面选择刚刚创建的参数页,然后点击连接,如下图所示:

如果没有问题,Connect右侧的黑色圆点,会变成绿色,表明连接成功,同时ONENET网站上,设备device_A显示在线。

然后在上一节的程序基础上,做一些简单的修改。找到user_main.c文件中的mqttConnectedCb函数,注释掉一部分内容,让它只订阅主题”/mqtt/topic/0″,如下所示:

函数MQTT_Subscribe表示订阅主题,函数MQTT_Publish表示发布某个主题的消息。咱们这里只订阅一个主题,其它内容不动。

程序修改完成,保存、清理、编译、下载一条龙,然后重新上电。这时,device_A和device_B都会在线。这时先看串口助手,输出信息如下所示:

如图所示,ESP8266在接入服务器的时候,打印出了这样的信息:MQTT: queue subscribe, topic”/mqtt/topic/0″, id: 1

说明它已经订阅了”/mqtt/topic/0″这个主题。这时,使用MQTT工具,在该主题下发送信息:

如图所示,位置1输入主题名称”/mqtt/topic/0″,位置2输入要发送的信息,位置3为发送按钮,按下后,可以看到串口助手打印了如下信息:

如图所示,显示8266收到了软件工具发来的信息。在软件中修改主题名称为“/mqtt/topic/1”,发送消息:new topic!

你会发现,无论如何发送,8266都不会收到。如此,说明ESP8266使用MQTT协议工作正常。

至此,基于MQTT协议的基础通信已经完成了。内容相对来说还是比较简单的,只要有一定基础的人,按照文章操作,基本都没问题。后面,会聊聊TCP连接下的POST操作,说白了就是如何把ESP8266采集到的数据上传到物联网平台。

注意事项,工程代码下载之后,可以直接使用,但是要改成你的设备信息,不要用我的。

完整工程源码,请关注公众号:单片机爱好者,回复关键字:ESP8266,即可获取。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据