LWIP_MQTT连接ONENET
前言:
使用正点原子STM32F407, LWIP,MQTT demo,验证LwIP的MQTT连接ONENET物联网平台,测试整个链路是否畅通,后面再详细分析LWIP移植和MQTT协议的使用。
26 基于 MQTT 协议连接 OneNET 服务器
本章主要介绍 lwIP 如何通过 MQTT 协议将设备连接到 OneNET 平台,并通过 MQTT 协议远程互通。
26.1 配置 OneNET 平台
配置 OneNET 服务器步骤:
第一步:首先打开 OneNET 服务器并注册账号,注册之后在主界面下打开开发者中心页面.
https://open.iot.10086.cn/
第二步:在上图中点击“产品开发”选项,页面跳转完成之后点击“创建产品”选项,此时该页面会弹出产品信息小界面,这里我们根据自己的项目填写相关的信息,如下图所示。
到“选择智能化方式”时,我们选择设备接入,并编写产品信息,如下图所示。
上图是我选择的配置,值得注意的是,如果用户选择物模型数据交互,则设置数据协议为 OneJosn;如果用户选择数据流模型数据交互,则设置数据协议为数据流。我这里选择数据流。
创建完成后,在产品开发下找到刚刚创建的产品,接着,我们点击该产品下的设备管理,进入添加设备界面,如下图所示。
第三步:创建设备成功后,点击设备右边的详情标签进入标签的链接页面,在这个页面下我们得到以下设备信息,如下图所示。
本实验会用到上图中的产品 ID: tSK7kOOsj7、设备名称: MQTT_device_V2 以及“key”设备
的密钥。
下面我们打开 OneNET 在线开发指南(https://open.iot.10086.cn/doc/v5/fuse/detail/919),在
这个指南中找到服务器地址,这些服务器地址就是 MQTT 服务器地址,如下图所示。
上图中,OneNTE 的 MQTT 服务器具有两个连接方式,一种是加密接口连接,而另一种是非加密接口连接,本章实验使用的是非加密接口连接 MQTT 服务器。
注:MQTT 物联网套件采用安全鉴权策略进行访问认证,即通过核心密钥计算的 token 进行访问认证,简单来讲,用户想连接 OneNET 的 MQTT 服务器必须计算核心密钥,这个密钥是根据我们前面创建的产品和设备相关的信息计算得来的,密钥的计算方法可以使用 OneNET提供的 token 生成工具计算,该软件可在这个网址下载:https://open.iot.10086.cn/doc/v5/develop/detail/242。
下面笔者简单讲解一下 token 生成工具的使用,如下图所示。
res:输入格式为“products/{pid}/devices/{device_name}”,这个输入格式中的“pid”就是我们 MQTT 产品 ID,而“device_name”就是设备的名称。根据前面创建的产品和设备来填写.
et:访问过期时间(expirationTime,unix)时间,这里笔者选择参考文档中的数值(1956499200)
key:指选择设备的 key 密钥。
最后按下上图中的“Generate”按键生成核心密钥。
这个核心密钥会在 MQTT 客户端的结构体 client_pass 成员变量保存。
上面我们使用 token 生成工具根据产品信息以及设备信息来计算核心密钥,这样的方式导致每次创建一个设备都必须根据这个设备信息再一次计算核心密钥才能连接,这种方式会大大地降低我们的开发效率,为了解决这个问题,笔者使用另一个方法,那就是使用代码的方式计算核心密钥。OneOS 源码中有几个文件是用来计算 MQTT 协议连接 OneNET 平台的核心密钥,这些文件在oneos2.0\components\cloud\onenet\mqtt-kit\authorization 路径下,大家先下载 OneOS 源码并在该路径下复制这些文件到工程当中。
26.2 运行效果
我们编译代码,并下载到开发板上运行,打开 OneNET 的 MQTT 服务器查看数据流展示,如下图所示。
串口打印:
26.3 连接修改点
26.4 问题解决:
连接异常:排查是认证的时候,设备名称有点长就会出现这样的问题。是认证的缓存过小,需要改大点。