前文提到,物联网设备在阿里云物联网平台登记了“身份证”之后,阿里云物联网平台上的设备就处于“未激活”“离线”或者“在线”状态。
怎么样让设备在线呢?
需要在设备内写入物联网“身份证”,然后通过MQTT协议连接阿里云物联网平台,当然,还有最重要的事情,就是数据要加密传输。本实验设备的”身份证“信息如下图所示:
所以在D1模块编程写入“身份证”信息真正连接阿里云物联网平台之前,需要先了解一下通信是怎么实现的,此时用一个模拟软件来模拟调试是最好的,因为这样可以让我们集中精力于通信协议的分析。假如上来就编程,万一程序有瑕疵,到时候通信不成功就不能确定是硬件问题,还是程序问题,还是MQTT通信问题了。
如果用MQTT客户端,那么就可以专注于MQTT通信了。下面逐步分析。
目录
一、MQTT简介
二、MQTT.fx简介
三、使用MQTT.fx模拟设备连接阿里云物联网平台
四、用户密码怎么获得?
五、MQTT.fx连接阿里云物联网平台
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
要详细了解MQTT的使用,可以在CSDN搜索“MQTT”,有讲的深入的,有讲的简单的。大家根据自己是基础自行选择。我在这里谈一些我自己的理解。
我的一些理解:
1.MQTT=Message Queuing Telemetry Transport;
2.MQTT的消息都很短,所以数据量很小,也可以工作在低带宽、不可靠的网络环境下,开销很小,节省网络流量;
3.工作方式是订阅/发布方式,也就是说,多个设备订阅一个主题,当主题变动时,每个设备都能收到。
关于订阅/发布的理解,可以参考文章
https://blog.csdn.net/youxiazzz12/article/details/82760538
MQTT.fx是一个非常流行的MQTT通信客户端。关于它的介绍是下图所示,它是一个MQTT客户端,用java语言写的,基于Eclipse Paho.这个软件在MQTT通信开发中应用非常广,有很多文章将其作为当前最流行的客户端来描述。
它的下载连接是:
http://mqttfx.jensd.de/index.php/download
作者已经将资源放在CSDN了,也可以从这里下载。提供的版本是1.7.1.
https://download.csdn.net/download/youngwah292/12127278
阿里云
https://www.alibabacloud.com/help/zh/doc-detail/86706.htm
下图是软件打开的界面。“aliyun”是作者自定义的一个设置,这个设置可以保存若干个参数,软件可以有若干个不同的设置。方便调试不同的设备。齿轮形状的图标是设置快捷按钮,connect按钮是蓝色的,Disconnect按钮是灰色的,蓝色表示可用,灰色表示不可用。下面几个选项卡中,最重要的是Publish(发布)和Subscribe(订阅)。
下面演示如何设置。
首先Profile Name设置为aliyun,其实可以是任意字符串,这里只是为了好记。
其次Profile Type下拉设置为MQTT Broker,broker的意思是经纪人;掮客,英文意思是a businessman who buys or sells for another in exchange for a commission.
broker的主要职责是接受发布者发布的所有消息,并将其过滤后分发给不同的消息订阅者。
broker address需要手工填写:XXXXXX.iot-as-mqtt.cn-shanghai.aliyuncs.com,其中XXXXX为前文在阿里云物联网平台上定义的设备ProductKey(产品标识码).后面的不展开说了,我用的上海的服务,所以填写的cn-shanghai ,这都是有固定格式的,可以查看阿里云帮助文档做详细了解。https://www.alibabacloud.com/help/zh/doc-detail/89298.html?spm=a2c5t.11065259.1996646101.searchclickresult.7d263e6fEiDqRd
broker port填写1883,这个端口号就填写这个,不用修改。
Client ID,我这里填写的是12345|securemode=3,signmethod=hmacsha1|
感谢网友“AURVIS”的细心提醒,特此标注。写这个文章的目的,就是做成一篇实验报告,让新手模仿一遍也能做到,少走弯路。
数字“12345"其实就是Client ID,也就是客户端编号。这个可以随便写,但是正规厂商会用网卡的物理地址来代替,因为网卡物理地址具有唯一性,这么做更加正规,也具有可追溯性。
数字12345后面的字符串是什么意思呢?
securemode:表示目前安全模式,可选值有2(wss协议)和3(ws协议),不展开讲。
signmethod:表示签名算法类型。(阿里云平台的类型是hmacsha1),也不展开讲。暂时知道它是这种加密方式就行了。
Client ID填写完成后,不用点击后面的generate按钮,网络文章说的,不知道原因。
下一步,选择User Credentials选项卡,这里有两个参数需要填写,分别是User Name和Password。
这两个参数不能随便填写,有它的填写规则。
首先User Name,我这里填写的是light1&a1RXXXXX7YK,看过前面文章的读者应该知道,a1RXXXXX7YK是设备的Product Key,light1是Device Name。中间的字母”&“不能少。
最关键的是Password(密码),这个怎么获得?
网络上有很多文章,有自己算的,有专门的软件,还有在线计算的。
经过测试,这里建议使用在线计算,网址和界面如下:
https://www.nnhpiot.com/Onlinetools/
由于我们做的是一个单独设备的实验,所以使用第一种方式。
点击 工具详细---阿里云物联平台MQTT密码计算。
打开新的网页,填写设备的“身份证”信息。这里面有一个时间戳timestamp,我们不知道,所以暂时不填写。
点击Generate,计算结果如下:域名就是在MQTT.fx填写的broker address,如果不愿意手工填写,可以从此处复制。
客户端编号是12345|securemode=3,signmethod=hmacsha1,timestamp=|
注意,这里多了时间戳timestamp,在MQTT.fx填写Client ID时,需要将这个删除,经过实验,带这个时间戳时连接不上。
用户名不用再多说,前文已经讲过。
用户密码就是根据上面多个参数用hmacsha1算法计算出来的密码。复制粘贴到MQTT.fx软件即可。
MQTT.fx有关参数填写好之后,最后设置一项SSL/TLS,勾选Enable SSL/TLS。所有设置就完成了。
确认这些设置之后,回到主界面,点击connect,发现界面右侧的状态灯由灰色变为绿色,connect按钮也变灰色了。
这就证明已经连接好了阿里云物联网平台。
再看阿里云的控制台。light1确实在线了。
接下来需要做的是订阅一下我们所需要的主题了。我们回到阿里云控制台,看一下topic列表中的主题,最关键的是一个get主题。我们将这个“/a1RFyDPN7YK/light1/user/get”复制下来。
粘贴到MQTT.fx下面的订阅选项卡Subscribe下,然后点击订阅Subscribe按钮。发现这个主题已经被订阅了。
现在我们测试一下阿里云物联网平台和模拟设备的通信如何。
回到控制台,点击发布消息,在弹出的对话框中填写要发送的消息。
可以看到,消息通信成功。
本文简介了MQTT的基本原理和MQTT最流行的客户端--MQTT.fx,并给出了下载连接。详细介绍了使用该软件使用步骤,讲解步骤的同时,还用最简洁的语言对一些基本知识进行了普及,最后重点对用户密码的计算方法和在线计算过程进行了讲解。通过介绍,可以顺利模拟设备连接阿里云物联网平台,使设备在线,并且与阿里云通信成功。
讨论交流