不好意思,隔的时间有点久~~~
上一节讲了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_前言
esp8266_01搭建开发环境
esp8266_02程序的编译与下载
esp8266_03 sdk与makefile的基本用法
esp8266_04管脚控制与软件定时器
esp8266_05 esp8266有几个串口
esp8266_06硬件定时器与io中断
esp8266_07基于pwm的呼吸灯
esp8266_08基于flash的数据掉电保护
esp8266_09基于iic控制的oled屏幕
esp8266_10 esp8266的station模式
esp8266_11 esp8266的udp广播
esp8266_12 esp8266客户端模式下的tcp通信
esp8266_13服务器端模式下的tcp通信
esp8266_14 softap模式下的服务器端和客户端
esp8266_15天气预报之tcp的get操作
esp8266_16天气预报之json数据的生成与解析
esp8266_17简单网络时间协议-sntp
esp8266_18 mqtt协议接入onenet平台