ESP8266_01搭建开发环境

ESP8266_02程序的编译与下载

ESP8266_03SDK与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平台

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

ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作

ESP8266_21基于ESP8266的一键配网

ESP8266_22基于自身ADC的电压采样

ESP8266_23基于硬件定时器的红外遥控器解码

不好意思,隔的时间有点久~~~

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

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

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

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_esp8266向云端发送温度湿度数据

 

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

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

 

esp8266向云端发送温度湿度数据 esp8266接入云平台_数据_02

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_esp8266向云端发送温度湿度数据_03

 

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

 

esp8266向云端发送温度湿度数据 esp8266接入云平台_数据_04

 

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

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

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_TCP_05

 

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

 

esp8266向云端发送温度湿度数据 esp8266接入云平台_esp8266向云端发送温度湿度数据_06

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_esp8266向云端发送温度湿度数据_07

 

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

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_MQTT_08

 

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

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_TCP_09

 

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_esp8266向云端发送温度湿度数据_10

 

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

esp8266向云端发送温度湿度数据 esp8266接入云平台_订阅主题_11

 

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

 

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

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