23. 连接到阿里云物联

既然懂得专门连接百度天工物接入,那么连接阿里云物联其实也是一样的,因为都是基于MQTT协议进行通信的,首先打开阿里云物联:https://iot.console.aliyun.com/product,创建账号并登陆,而且阿里云物联是需要通过实名认证才能使用的。

相对于百度天工物接入,阿里云物联的安全性更好,因为即使是客户端连接服务器都需要各种验证,还使用哈希加密算法进行加密。

23.1. 使用阿里云物联

下面开始使用阿里云物联,首先在“产品”信息中创建一个产品,每个产品下允许有多个设备,产品就是设备的集合,通常是一组具有相同功能定义的设备集合。例如:产品指同一个型号的产品,设备就是该型号下的某个设备。操作步骤“创建产品”->“高级产品”->填写产品信息,联网方式选择“以太网”,这样子一个产品就创建完成。

然后在“设备”选项中添加一个设备,比如我们添加一个“fire_temp_hum”设备,是开发板的温湿度数据采集设备, 在创建完成后,会有设备证书,这个一定要保存好,丢失了就找不回来了,具体见 图23_1

图 23‑1设备证书

图 23‑1设备证书

最后我们定义一个主题(Topic类列表),让设备能对这个主题进行订阅或者发布操作,回到“产品”选项, 选择“Topic类列表”,定义“Topic类列表”,具体见 图23_2,再填写“Topic类列表”的信息即可, 注意选择设备的操作权限“发布和订阅”,这点很重要,如果没有权限,设备是无法对这个主题进行操作的, 具体见 图23_3,至此,一个产品与设备就创建完成了,当然,为了更好调试,我们可以尝试创建多个设备, 以备在后续进行调试。

图 23‑2 Topic类列表

图 23‑2 Topic类列表

图 23‑3 Topic类列表信息

图 23‑3 Topic类列表信息

23.2. MQTT软件测试连接

在创建完成后,可以通过MQTT软件来测试一下能否正常连接,在这一步之前必须已在物联网平台控制台中创建产品和设备,并获取设备证书信息(ProductKey、DeviceName和DeviceSerect)。

打开软件,点击设置图标,配置连接的信息,具体见 图23_4,只不过这里的配置比百度云天工物接入麻烦很多, 因为考虑了安全的问题,需要进行加密验证。

图 23‑4MQTT软件配置

图 23‑4MQTT软件配置

这个参数看起来很简单,但是它的组成却不简单,下面具体介绍一下参数是怎么来的,具体见表格 23‑1。

表格 23‑1连接的参数设置

参数

说明

Profile Name

自定义名称

Profile Type

选择MQTT Broker

Broker Address

连接域名。

格式:${YourProductKey}.iot-as-mqtt. ${region}.aliyuncs.com。

其中:

${YourProductKey}是在创建设备时候保存的YourP roductKey

${region}是你物联网平台服务所在地域的代码,一般在控制台左 上角就有显示,根据https://help.aliyun.com/ document_detail/40654.html?

spm=a2c4g.11186623.2.21.1ce29ff5q TtXmW替换物联网平台服务所在地域的代码即可

Broker Port

因为是TCP连接,端口号为1883

Client ID

格式:${clientId}securemode=3,signm ethod=hmacsha1。

${clientId}为设备的ID信息。可取任意值,长度在64字符 以内即可,

securemode为安全模式,TCP直连模式设置为securemode=3 ,TLS直连为securemode=2,

signmethod为算法类型,支持hmacmd5和hmacsha 1,常用的是哈希加密。

User Name

格式:${YourDeviceName}&${YourPrduct Key}

由设备名DeviceName、符号(&)和产品ProductKey 组成,这些信息在创建设备的时候都已经保存的。

Password

密码由参数值拼接加密而成,可以使用Password生成小工具生成。

小工具可以从我们提供的资料中下载:

http://www.firebbs.cn/forum.php? mod=viewthread&tid=26274&fromuid= 37393,小工具的使用具体见 图23_5

,填写对应的信息,然后生成password,就可以用来连接 了,注意的是clientId是填写前面自己定义的clientId即 可。

图 23‑5Password生成小工具

图 23‑5Password生成小工具

把信息全部填写完毕,可以测试连接,点击Connect,然后在订阅选项Subscribe中, 输入订阅的主题“/a1MZHjK2SCF/fire_temp_hum/user/temp_hum”,这个主题可以在“设备”选项中的“Topic列表”得到, 然后点击subscribe,可以发现已经成功订阅,然后对这个主题进行发布操作,我们就能看到订阅已经收到发布的消息, 表明MQTT通信成功,具体见 图23_6

图 23‑6测试成功

图 23‑6测试成功

与此同时,在阿里云物联的控制台中可以看到设备是处于在线状态的,这就说明我们的连接是正常的,具体见 图23_7

图 23‑7设备状态

图 23‑7设备状态

23.3. 开发板连接阿里云物联

接下来就使用开发板进行连接阿里云物联,其实在连接百度天工物接入的时候,我们就已经封装好一整套MQTT连接云平台的函数接口, 现在只需要修改一下mqttclient.h头文件的宏定义即可,具体见 代码清单23_1

代码清单 23‑1mqttclient.h宏定义

 #if    LWIP_DNS
 #define   HOST_NAME     \
     "a1MZHjK2SCF.iot-as-mqtt.cn-shanghai.aliyuncs.com"  //服务器域名
 #else
 #define   HOST_NAME       "139.196.135.135"     //服务器IP地址
 #endif

 #define   HOST_PORT     1883    //由于是TCP连接,端口必须是1883

 #define   CLIENT_ID     "12345|securemode=3,signmethod=hmacsha1|"         //
 #define   USER_NAME     "fire_temp_hum&a1MZHjK2SCF"     //用户名
 #define   PASSWORD      "D6419896E7BEAF8BD9D03C88BF854EA0D3XXXXX"  //密码

 #define   TOPIC         "/a1MZHjK2SCF/fire_temp_hum/user/temp_hum" //主题
 #define   TEST_MESSAGE  "test_message"  //发送测试消息

将程序编译并且下载到开发板上,就能看到连接的实验现象,整个代码的运作过程也是一样的,因为都是MQTT协议通信,首先与服务器建立连接,然后通过MQTT报文请求建立会话,然后进行订阅主题,再发布消息,当收到消息的时候使用cJSON将消息解析出来,具体见 图23_8

图 23‑8实验现象

图 23‑8实验现象

23.4. 阿里云物联的规则引擎

与百度的规则引擎作用是一样的,可以将收到的消息进行不同的业务处理,比如我们也利用规则引擎监控开发板的稳定数据。

首先,打开规则引擎设置页面:https://iot.console.aliyun.com/rule/list,点击创建一个规则,填写基本的规则信息,并且选择数据的格式是JSON格式,具体见 图23_9

图 23‑9创建规则

图 23‑9创建规则

然后编写SQL语句处理数据,关于SQL语句的语法可以参考网页:https://help.aliyun.com/document_detail/30554.html?spm=5176.11485173.0.0.5af859afrAuwd0。此处就不做过多赘述,当然,阿里云物联这个平台还是很不错的,只需要我们填写少量的规则语句就能筛选出需要的数据,具体见 图23_10

图 23‑10设置规则

图 23‑10设置规则

配置好规则我们就先进行测试一下规则是否可用,点击“SQL调试”,输入我们的JSON数据,然后通过其输出验证,具体见 图23_11,表明我们的规则是能正常运作的。

代码清单 23‑2验证数据

 {
     "name": "fire",
     "temp": 32.04,
     "hum":  68
 }
图 23‑11SQL测试

图 23‑11SQL测试

接下来“转发数据”选项中添加数据目的地,数据目的地可以是另一个主题、时序数据库、存储到云数据库(RDS)中、发送数据到消息队列(Message Queue)中等等,我们就将数据转发到同产品下的另一个主题即可,这就需要我们创建多一个设备(监控设备),具体见 图23_12

注意,在创建规则完成后一定要记得启动规则,因为阿里云物联的规则引擎默认是不启动的,需要我们自己去启动它。

图 23‑12数据目的地

图 23‑12数据目的地

打开我们的MQTT客户端软件,并且使用新的设备进行连接(注意:不要是与开发板是同一个设备),然后订阅规则引擎转发的目的地主题;打开开发板电源,开发板连接到阿里云物平台后就会发送数据,如果满足规则就会将数据转发到目的地主题中,具体见 图23_13

图 23‑13实验现象

图 23‑13实验现象