【MQTT学习】MQTT连接阿里云教程

打开阿里云官网https://www.aliyun.com/,注册并登录

找到右上角的控制台点进去

点击左侧的栏目找到“产品与服务”,在里面继续找到“应用与服务下面的”“物联网平台”

依次找到《设备管理》《产品》,然后“创建产品”

这里面有些内容需要根据自己的情况填写

主要的注意结点类型和联网里面的选项,产品名称,分类等都没什么说的,完成创建后就可以继续创建设备了。

这里提示一下,阿里云里面设备是建立在产品下面的,也就是说有了产品才能有设备。开始的时候小白总会迷糊,这里就简单举个例子,最近华为很火,比如说一部华为P30手机,那么这个P30型号的手机就是华为公司的一款产品,而P30型号的手机有很多把,假如你手里有一部P30,那么你的这部P30就是这款产品下面的一个设备。就这么粗暴的理解把。

创建完就是这个样子

然后点击查看,因为只是简单测试,进去之后我们只要关心两个事情,

首先要定义这个产品的功能,产品嘛,肯定需要用来做什么,比如手机,打电话是个功能,发短信也是个功能,我们在这里简单的新建两个功能,一个是环境温度,一个是RGB灯,哈哈,每次测试都用这两个东西,太烂大街了。这里再次说明一下为什么要用这两个,第一是环境温度,温度是设备自身去采集的,所以这个温度可以通过设备上报给服务器,这也就是完成了设备端上报数据到服务器端的过程;另外一个是RGB灯,这里主要是通过服务器下发命令,来完成对下属设备的控制。这温度和灯两兄弟就刚好完成了设备端和服务器端之间的上报和下发的过程,没错也就是完整的双工通信的过程,另外这里RGB灯的颜色我也让它可以去上报。

接下来添加功能,在《功能定义》里面找到《添加功能》,

测试就标准功能就可以,怎么简单怎么好,进去之后选《其他类型》,然后搜索温度,这里随便选一个“当前温度”,OK

完成之后长这样

我们也可以去编辑修改它

这里就不做修改了

再有就是添加一个RGB灯的功能,这里就搜索颜色吧,

创建完了之后能看到取值范围是0-255,因为这个后期是是需要用板子测试的,板子上面使用的是WS25B12,是个24bit的,所以这里就直接改成32bit,32bit最大是0xffffffff,

但是把这个数据copy进去之后报错了,

原因就是int32他是个有符号的,不过只用到了24bit有效数据,这里就取它提示的正数最大值就完了。

定义好了两个功能如图,

接下来在设备里面创建一个刚才我们定义好的这个产品的一个设备,再多说一句,刚才的产品只是我们提出的一个概念,现在的设备才是这个产品的实现。

确认后会有个提示

其实这个是这个设备的三元素,这里我们一件复制,然后粘贴在一个txt里面先保存起来,这样比较简单快速,这个其实在设备信息里面也可以看到,不过那要一个个复制就显得麻烦。

关闭窗口后就可以看到这个设备了,这里我们主要关系两个板块

Topic列表里面有我们需要用到的上报和订阅的主题,运行状态就是这个设备的一些参数,比如温度,RGB的颜色,就是定义产品的时候添加的功能。然后其他的先可以忽略,这里提一下那个设备影子是阿里云对MQTT里面QS2的一个补充,因为阿里云的文档里面说的很清楚:

看到了把。至于框中的内容什么意思,在我之前的MQTT相关的博客有提到的。

然后我们进入到Topic列表里面去,复制一下两个关键的主题,

上面一个是设备发布的主题,下面一个是设备订阅的主题,把这个也复制到txt当中,看下摘录的信息:

 

然后云端就部署完成了,接下来我们用MQTT-FX工具来虚拟一个客户端,打开MQTT-FX,

点击配置填写上面四个栏目,名字没什么说的,服务器地址和端口号就是MQTT的连接域名,在产品文档里面可以找到的,

上面介绍的也很详细,首先是产品的密钥需要替换,然后是地域,地域国内只能用华东2的,这个可以在左上角看到自己使用的是哪个区,

所以我们就用对应的字符串替换就好了,我这里替换完后如下:

剩下一个Client ID,

这里介绍了三个内容,除了Client ID还有登录用户名和密码,先按照他那个规则得到Clien ID如下:

这里123456要注意,这个是阿里云规定的,是所属设备的唯一的标识。

然后继续得到用户名和密码,用户名比较好弄,得到如下:

密码的话需要借助网页的hash算法计算一下,网址:https://1024tools.com/hmac

注意:因为这里Client ID数字签名使用的是Hashshal,所以我们这里也要用对应的算法:

另外一定要细心根据文档里面的例子修改并填写自己对应产品的各种参数,时间戳也要对应,我这里修改完之后是这样的

第一个是密钥,第二个是消息,分别填写到网页上去计算:

好了,现在登录用的用户名和密码也得到了,在软件上进行填写:

完了之后应用,退出设置界面,连接,

这样就已经连接成功了。接下来就是数据的下发和上传,首先我们试下平台给设备下发,在下发之前我们需要在让设备去订阅,这就要用到上面复制好的Topic列表的内容了,具体操作如下:

然后我们在平台上进行调试,发送消息,

找到产品,查看,里面有一个在线调试,

点击发送指令后客户端软件就会受到对应的消息

接下来说下需要注意的地方,首先是数据格式,这个,,,没什么好说的,标准的josn,我也不大懂。这里面我们只关心一个地方,就是param里面的内容,现在能看到有一行“hue”:“12345”,这里面的12345正是我们使用平台下发的数据,至于前面的hue,其实是颜色功能所对应的关键字,不是定义了两个功能吗,另外一个是温度,现在我们来看看,在产品的功能定义里面:

看到看把,温度是CurrentTemperature,颜色是hue,刚好和上面说的一致。这里为了方便还是把它copy都txt里面。

好了现在其实已经完成了平台到设备的数据下发功能了,再来试试设备上报数据给服务器平台:

确定好要发送的主题,接下来就是数据了,数据里面我开始根据文档来做,估计是文档没有更新过来把,没成功,感觉被坑了,后来突发奇想用收到的数据格式发送过去,竟然成功了,这里举个例子,假设下载温度是25.6°,然后设备的颜色色值是9999,然后发送内容如下:

{

  "method" : "thing.service.property.set",

  "id" : "625067067",

  "params" : {

    "CurrentTemperature" : 25.6,

    "hue" : 9999

  },

  "version" : "1.0.0"

}

然后查看设备状态,成功!

这里的上报我们只需要关心param里面的键值对就可以了,可以一次传一个键值对,也可以一次传多个,多个需要用逗号隔开

至此,完毕!

By Urien 2019年6月3日 19:08:04