如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台

物联网0146

如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台,第1张

有很多通信模块只有TCP功能,没有MQTT功能,比如WIFI,W5500等模块,还有一些NBIOT模块,但是又想连接阿里云物联网平台,官方提供了操作系统,需要自己移植,很麻烦,比较难看得懂。就在想有没有一些简单一定的方法。

心想MQTT是基于TCP的,能否使用TCP转MQTT?因此就想使用TCP协议然后转MQTT协议连接阿里云物联网平台,经过试验证明是可以的。

首先我们先分析一下如何登陆接入Onenet平台。

先从它数据格式开始分析。首先我们要从后台取出三个信息,我们以这个为例。

我们把产品ID,设备名称,设备秘钥,简称三要素 (具体是什么看你自己的设备)

其实阿里云物联网平台的MQTT协议用的就是标准的,不过它加入了自己的认证方式。

MQTT协议需要上传四个参数,报活时间,clientID,用户名,密码。

那么阿里云的就在clientID,用户名,密码做了手脚。

clientID比较长,按照一定的格式

用户名:设备名和秘钥组成

密码:使用了加密串进行了加密,有sha1或者MD5加密方式

下面我们来介绍一下

MQTT接入都是发十六进制的数据。

么我们发送的时候就是这样子的一串数据

0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67

0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009

0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36

十六进制解释

数据长度:0x74

协议数据长度 0x00 0x04

协议类型: 0x4d 0x51 0x54 0x54

协议数据: 0x04 0xC0

keepAlive数据:0078

ClientID长度:0033

ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c

用户名:0009

用户名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34

密码长度:0028

密码: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36复制代码上面的就是连接服务器的连接包

下面呢,我们来做个发布包(上传数据到服务器)

0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d

十六进制数据解释

数据头:0x30

数据长度:0x1D

TopicName数据长度:0009

TopicName数据内容:2f7379732f706f7374

主体json数据: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d复制代码以上就是连接阿里云的数据包格式及发布数据的格式,由于时间问题没有做订阅的数据包分析,下一次更新订阅的内容。

MQTT通信协议的基本介绍参考文章 NT35 MQTT通信 ,本篇给出阿里云的基本操作,NT35E通过订阅阿里云的主题&发布信息与阿里云平台相互通信。

登录阿里云 → 工作台 → 物联网平台 → 进入控制台→ 公共实例

阿里云默认通信协议为MQTT,不需要特殊选择,用户按照如下步骤创建自己的产品:

创建产品 → 添加设备 

在"查看"标签中,包含了MQTT连接的基本三元组信息,也就是后面设备要填充的基本参数

      用户每定义一类产品都会自动生成对应的Topic列表,当然我们也可以"自定义Topic"便于自己测试。

       指令解析参考《Lierda NT35E&NT26E-CN AT命令手册》,这里给出使用到的AT指令对应参数说明以便于理解。

AT+LMQTTCFG=cloud,<tcpconnectID>[,<cloud _ type>,<data_type > ]

<tcpconnectID> 。MQTT Socket 标识符。范围:0~4。

<cloud_type>整型。2 alibaba,其他参数指定其他平台

<data_type>整型。阿里云平台 1 json数据 

AT+LMQTTCFG="cloud",0,2,1   对应就是对接阿里云平台,发送json格式的数据

AT+LMQTTCFG=aliauth,<tcpconnectID>[,<product_key>,<device_name>,<device_secret>]

填充阿里云平台中设备的三元组信息

AT+LMQTTCFG="aliauth",0,"a1JszCpjS61","NT35E_06011","390358fc595040aa73221e8393aba86c"

这部分是模组进行TCP链路连接(需抓包确认)

AT+LMQTTOPEN=<tcpconnectID>,<host_name>,<port>

host_name对应阿里云 "设备信息"→"MQTT连接参数" 中的 "mqttHostUrl"

AT+LMQTTOPEN=0,"a1JszCpjS61iot-as-mqttcn-shanghaialiyuncscom",1883

模组作为客户端,通过MQTT协议连接到服务器(需抓包确认)

AT+LMQTTCONN=<tcpconnectID>[,<clientID>[,<username>[,<password>]]]

<clientID>字符串型。客户端标识符。用户可以随便定义。 <username>,<password> 不需要填写

AT+LMQTTCONN=0,"NT35E"

AT+LMQTTSUBUNSUB=<tcpconnectID>,<subflag>,<msgID>,<topic1>[,<qos1>[,<topic2>[,<qos2>]d…]]

<subflag>整型。消息类型 0 订阅 1 取消订阅

<msgID>整型。数据包消息标识符。范围:0~65535。

<topic>带双引号的字符串型。客户端订阅或者退订的主题。长度范围:0~256 字节。

<qos>整型。客户端发送订阅消息(SUBSCRIBE)的 QoS 等级,此时为必选参数。2 正好一次,该主题下的消息确保接收端仅接收到一次

AT+LMQTTSUBUNSUB=0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",2

这里注意<topic>对应参数的替换,里面的deviceName需要替换。

订阅主题之后,服务器下发的数据模组就可以正常接收了。模组下发位置

       发布消息在对应的设备目录下,如果有设备"订阅"对应的消息,平台"发布"相应的数据设备就可以接收到了。

AT+LMQTTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,<topic>,<msglen>,<msg>

<msgID>整型。 0~65535。任意定义,但<qos>=0 时,该参数值只能为0。

<qos>整型。 0 最多一次 1 至少一次 2  正好一次

<retain>整型 。服务器是否保存该消息。0 不保存  1 保存

<topic>带双引号的字符串型。 客户端发布消息的主题。长度范围:0~256 字节

<msglen>整型 。指定的消息数据长度。范围:0~1460。

<msg>字符串型。 需要发布的消息数据。

AT+LMQTTPUB=0,0,0,1,"/a1JszCpjS61/ NT35E_06011 /user/COMMUTEST",10,"1122334455"

       注意刚刚自己创建的主题属性是" 发布和订阅 ",所以模组发送该主题的信息,阿里云也是可以收到的

注意这里模组发送数据的时候,也推送了自己发送的数据,因为刚刚订阅了这个主题,所以模组订阅(收)到了对应的数据

       前面我们通过NT35E与平台进行信息交互,那么为什么是这样填写对应的参数呢,每个参数对应的说明在阿里云上是什么样的呢,用户可以查看阿里云的<帮助文档>进行确认。

       上面我们使用三元组的方式( 一机一密 )实现NT35E与阿里云平台通信,但实际生产过程中该方式不好实现,比如工厂有1000个设备生产,如果每个设备都复制不同的三元组,很难实现工厂批量化生产,此时可以通过 一型一密 的通信方式解决该问题。

一型一密模组端实现方式后续更新。

适合。

手机先下载阿里云,注册账号后点击手机,选择上传阿里云就可以了。阿里云盘上传的是原尺寸的,不会压缩。

只要网盘剩余存储空间足够,阿里云网盘是可以上传任何类型文件的,不只是。

提到阿里巴巴(Alibaba),大家首先会想到淘宝,然后是支付宝,以及现在的阿里云计算,这是目前阿里最具代表性的产品。这两个产品从互联网时代到移动互联网时代,对人们生活的影响越来越大。面对即将到来的物联网时代,阿里当然也不会无动于衷,我们来聊聊阿里在物联网方面的产品策略。

阿里是一家很务实的公司,非常注重落地的能力,所以阿里在物联网方面的产品都是与其主营业务密切相关的。阿里在物联网方面的产品主要是两部分:

阿里智能开放平台,简称阿里智能(openalipluscom)。

阿里云物联网套件,属于阿里云(aliyuncom)的一个产品。

这两个产品背后的一些云端服务组件,可能有一些重叠,但总的来说是面向不同的客户群体,是两种不同的物联网解决方案。

阿里智能概述

阿里智能的目标是助力传统硬件智能化,让原来的传统家电厂商可以迅速利用阿里智能这样一个平台,把自己的产品智能化。这里智能化的含义主要是家电与手机APP以及互联网的云服务器之间的互操作性。

阿里智能的交互示意图

阿里智能,主要面向的用户是家用电器产品的厂商或开发者,比如空调、洗衣机、窗帘、摄像头、空气净化器、照明、温控等。这些家电设备与手机以及云服务器之间通过阿里的私有协议alink互联。

阿里智能解决方案

阿里智能为用户提供的解决方案包括:连网模块、云端服务以及手机APP。

(1)联网模块

阿里智能提供的联网模块主要是WiFi模组。模组固件包括嵌入式OS以及Alink SDK,开发者可以基于Alink SDK构建自己的应用。ALINK SDK中主要封装了云端的一些交互和服务,如升级管理、配置管理等,另外还包含一个应用程序SMARTLED用来验证智能设备数据发送及指令处理。

(2)阿里智能APP

阿里智能APP

阿里智能提供了一个APP,通过这个APP可以控制所有阿里智能支持的设备,为用户提供一致的交互体验,以及设备间联动的操作。

阿里智能APP设备面板使用HTML5技术开发,并通过H5 SDK开放自主开发能力。厂家及开发者可遵循阿里智能APP的设计和开发规范,自行开发APP设备控制界面。

(3)上架服务

产品开发完,一定是要卖的。加速产品开发流程,缩短产品上架周期,才是阿里智能的最终目标。所以阿里智能为用户提供的是从开发到上架的端到端服务。

阿里智能服务流程

阿里智能平台提供从入驻到上架的一站式接入服务,结合阿里电商平台,还提供售中-交易管理和售后-效果跟踪的服务。

总结

过去几年,智能家居和智能硬件产品兴起,很多家电企业都希望自己的产品也能搭上“智能”这趟列车,以体现自己产品的与时俱进,最起码不会让品牌显得落伍。阿里智能就是面向这样一种普遍性需求的。

另一方面,阿里的主营业务是电商。在阿里看来,这些家电厂商同样是一家家天猫店,产品上架才是最终目标。阿里帮助这些厂商更快地实现产品智能化,可以有效促进线上的产品销售,强化了自己对商家的服务。

对于这些观点,你怎么看?

留言说说~

喜欢我就关注我哟!

以上就是关于如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台全部的内容,包括:如何使用 NB-Iot + Arduino 通过MQTT协议上传数据至阿里云平台、NE35E MQTT协议对接阿里云、阿里云物联网平台 适合传图片吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!