使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云

前文提到,物联网设备在阿里云物联网平台登记了“身份证”之后,阿里云物联网平台上的设备就处于“未激活”“离线”或者“在线”状态。

怎么样让设备在线呢?

需要在设备内写入物联网“身份证”,然后通过MQTT协议连接阿里云物联网平台,当然,还有最重要的事情,就是数据要加密传输。本实验设备的”身份证“信息如下图所示:

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第1张图片

所以在D1模块编程写入“身份证”信息真正连接阿里云物联网平台之前,需要先了解一下通信是怎么实现的,此时用一个模拟软件来模拟调试是最好的,因为这样可以让我们集中精力于通信协议的分析。假如上来就编程,万一程序有瑕疵,到时候通信不成功就不能确定是硬件问题,还是程序问题,还是MQTT通信问题了。

如果用MQTT客户端,那么就可以专注于MQTT通信了。下面逐步分析。

目录

一、MQTT简介

二、MQTT.fx简介

三、使用MQTT.fx模拟设备连接阿里云物联网平台

四、用户密码怎么获得?

五、MQTT.fx连接阿里云物联网平台


一、MQTT简介

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。

要详细了解MQTT的使用,可以在CSDN搜索“MQTT”,有讲的深入的,有讲的简单的。大家根据自己是基础自行选择。我在这里谈一些我自己的理解。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第2张图片

我的一些理解:

1.MQTT=Message Queuing Telemetry Transport;

2.MQTT的消息都很短,所以数据量很小,也可以工作在低带宽、不可靠的网络环境下,开销很小,节省网络流量;

3.工作方式是订阅/发布方式,也就是说,多个设备订阅一个主题,当主题变动时,每个设备都能收到。

关于订阅/发布的理解,可以参考文章

https://blog.csdn.net/youxiazzz12/article/details/82760538

二、MQTT.fx简介

MQTT.fx是一个非常流行的MQTT通信客户端。关于它的介绍是下图所示,它是一个MQTT客户端,用java语言写的,基于Eclipse Paho.这个软件在MQTT通信开发中应用非常广,有很多文章将其作为当前最流行的客户端来描述。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第3张图片

 

它的下载连接是:

http://mqttfx.jensd.de/index.php/download

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第4张图片

作者已经将资源放在CSDN了,也可以从这里下载。提供的版本是1.7.1.

https://download.csdn.net/download/youngwah292/12127278

 

 

阿里云

https://www.alibabacloud.com/help/zh/doc-detail/86706.htm

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第5张图片

三、使用MQTT.fx模拟设备连接阿里云物联网平台

下图是软件打开的界面。“aliyun”是作者自定义的一个设置,这个设置可以保存若干个参数,软件可以有若干个不同的设置。方便调试不同的设备。齿轮形状的图标是设置快捷按钮,connect按钮是蓝色的,Disconnect按钮是灰色的,蓝色表示可用,灰色表示不可用。下面几个选项卡中,最重要的是Publish(发布)和Subscribe(订阅)。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第6张图片

下面演示如何设置。

首先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|

注意,这里填写Client ID时,字符串最后的竖线一定要保留,否则会提示连接不上。

感谢网友“AURVIS”的细心提醒,特此标注。写这个文章的目的,就是做成一篇实验报告,让新手模仿一遍也能做到,少走弯路。

数字“12345"其实就是Client ID,也就是客户端编号。这个可以随便写,但是正规厂商会用网卡的物理地址来代替,因为网卡物理地址具有唯一性,这么做更加正规,也具有可追溯性。

数字12345后面的字符串是什么意思呢?

securemode:表示目前安全模式,可选值有2(wss协议)和3(ws协议),不展开讲。

signmethod:表示签名算法类型。(阿里云平台的类型是hmacsha1),也不展开讲。暂时知道它是这种加密方式就行了。

Client ID填写完成后,不用点击后面的generate按钮,网络文章说的,不知道原因。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第7张图片

下一步,选择User Credentials选项卡,这里有两个参数需要填写,分别是User Name和Password。

这两个参数不能随便填写,有它的填写规则。

首先User Name,我这里填写的是light1&a1RXXXXX7YK,看过前面文章的读者应该知道,a1RXXXXX7YK是设备的Product Key,light1是Device Name。中间的字母”&“不能少。

 

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第8张图片

四、用户密码怎么获得?

最关键的是Password(密码),这个怎么获得?

网络上有很多文章,有自己算的,有专门的软件,还有在线计算的。

经过测试,这里建议使用在线计算,网址和界面如下:

https://www.nnhpiot.com/Onlinetools/

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第9张图片

由于我们做的是一个单独设备的实验,所以使用第一种方式。

点击  工具详细---阿里云物联平台MQTT密码计算。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第10张图片

打开新的网页,填写设备的“身份证”信息。这里面有一个时间戳timestamp,我们不知道,所以暂时不填写。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第11张图片

点击Generate,计算结果如下:域名就是在MQTT.fx填写的broker address,如果不愿意手工填写,可以从此处复制。

客户端编号是12345|securemode=3,signmethod=hmacsha1,timestamp=|

注意,这里多了时间戳timestamp,在MQTT.fx填写Client ID时,需要将这个删除,经过实验,带这个时间戳时连接不上。

用户名不用再多说,前文已经讲过。

用户密码就是根据上面多个参数用hmacsha1算法计算出来的密码。复制粘贴到MQTT.fx软件即可。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第12张图片

 

五、MQTT.fx连接阿里云物联网平台

MQTT.fx有关参数填写好之后,最后设置一项SSL/TLS,勾选Enable SSL/TLS。所有设置就完成了。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第13张图片

确认这些设置之后,回到主界面,点击connect,发现界面右侧的状态灯由灰色变为绿色,connect按钮也变灰色了。

这就证明已经连接好了阿里云物联网平台。

再看阿里云的控制台。light1确实在线了。

接下来需要做的是订阅一下我们所需要的主题了。我们回到阿里云控制台,看一下topic列表中的主题,最关键的是一个get主题。我们将这个“/a1RFyDPN7YK/light1/user/get”复制下来。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第14张图片

粘贴到MQTT.fx下面的订阅选项卡Subscribe下,然后点击订阅Subscribe按钮。发现这个主题已经被订阅了。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第15张图片

现在我们测试一下阿里云物联网平台和模拟设备的通信如何。

回到控制台,点击发布消息,在弹出的对话框中填写要发送的消息。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第16张图片

可以看到,消息通信成功。

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第17张图片

 

 

小结:

本文简介了MQTT的基本原理和MQTT最流行的客户端--MQTT.fx,并给出了下载连接。详细介绍了使用该软件使用步骤,讲解步骤的同时,还用最简洁的语言对一些基本知识进行了普及,最后重点对用户密码的计算方法和在线计算过程进行了讲解。通过介绍,可以顺利模拟设备连接阿里云物联网平台,使设备在线,并且与阿里云通信成功。

 

讨论交流

使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(五)---MQTT.fx模拟设备连接阿里云_第18张图片

你可能感兴趣的:(arduino,物联网)