ASR5502X系列 FreeRTOS平台私有云用户手册
前言
关于本文档
本文档旨在提供私有云平台与芯片连接的具体方案,以实现芯片与云端的双向通信。
读者对象
本文档主要适用于以下工程师:
单板硬件开发工程师
软件工程师
技术支持工程师
产品型号
本文档适用于ASR IoT 5502X 系列 Wi-Fi 芯片。
版权公告
版权归 © 2021 翱捷科技股份有限公司所有。保留一切权利。未经翱捷科技股份有限公司的书面许可,不得以任何形式或手段复制、传播、转录、存储或翻译本文档的部分或所有内容。
商标声明
ASR、翱捷和其他翱捷商标均为翱捷科技股份有限公司的商标。
本文档提及的其他所有商标名称、商标和注册商标均属其各自所有人的财产,特此声明。
免责声明
翱捷科技股份有限公司对本文档内容不做任何形式的保证,并会对本文档内容或本文中介绍的产品进行不定期更新。
本文档仅作为使用指导,本文的所有内容不构成任何形式的担保。本文档中的信息如有变更,恕不另行通知。
本文档不负任何责任,包括使用本文档中的信息所产生的侵犯任何专有权行为的责任。
防静电警告
静电放电(ESD)可能会损坏本产品。使用本产品进行操作时,须小心进行静电防护,避免静电损坏产品。
翱捷科技股份有限公司
地址:上海市浦东新区科苑路399号张江创新园10号楼9楼 邮编:201203
文档修订历史
日期 |
版本号 |
发布说明 |
|---|---|---|
2021.02 |
V1.2.0 |
整合章节。 |
1. 概述
使用 ASR5502X 系列芯片通过无线 Wi-Fi 方式连接私有云平台,可以实现数据的上报(数据从芯片端到云端)和数据的下发(数据从云端到芯片端)控制。
本文档提供了私有云平台与芯片连接的具体方案,以实现芯片与云端的双向通信。
设备端使用 MQTT(S) 的方式与云端通信,云端下发控制,芯片端上报状态;也可使用 HTTP(S) 的方式,实现数据的上报功能。
本文提供了两种云平台方案:
第一种基于 IoT 开源云平台 ThingsBoard,用户可以参考 ThingsBoard 官方说明来搭建平台,并与本方案的设备端进行通信。
第二种基于普通 MQTT broker,本文以 EMQ 为例,用户可以参考 EMQ 官方说明来搭建平台,并与本方案的设备端进行通信。
2. ThingsBoard 方案设备端使用方法
2.1 ThingsBoard 安装使用方法
目前 Demo 使用开源 ThingsBoard。关于环境的搭建以及私有云的使用和配置,可参考下列相关文档:
ThingsBoard 官网:https://thingsboard.io/。
ThingsBoard 相关文档:https://thingsboard.io/docs/。
ThingsBoard 环境搭建安装、连接模拟设备等操作指导:https://thingsboard.io/docs/guides/。
ThingsBoard 连接 api:https://thingsboard.io/docs/reference/mqtt-api/。
ThingsBoard 配置 MQTTS:https://thingsboard.io/docs/user-guide/mqtt-over-ssl/。
2.2 编译方案
使用 ASR FreeRTOS SDK 编译的方法,可参考 SDK 中的编译说明文件。
默认的编译方式没有将私有云代码编译,需要开发者手动修改默认配置: 将 build/build_rules/project/demo/config.mk 文件中的 CLOUD_SWITCH 配置修改为 1(原先为 0,默认不编译),并且将 $(NAME)_FLAGS += -DCLOUD_PRIVATE_SUPPORT 被注释掉的部分打开。
若对应平台使用了 TLS 认证,还需在 /cloud/src/private_cloud_ca.c 文件中修改对应的 CA 证书、设备证书和设备私钥。
修改 config.mk 文件后再重新编译 SDK,此时编译的 bin 文件中已经包含私有云 Demo。
2.3 运行说明
芯片连接网络:
运行私有云需要先调用 Wi-Fi 相关命令使芯片连接路由器,相关使用方法可参考文档《ASR5502X 系列_FreeRTOS 平台_AT 命令使用指南》,以下为简单的示例:
输入命令: wifi_open sta <SSID> <password>
命令解释:wifi_open sta 为固定字符串;<SSID>为将要连接的路由器的 SSID;<password>为路由器密码。
使用连接命令:
连接私有云首先需要知道 host、port、protocol、(TLS)的具体信息以及 ThingsBoard 访问令牌和超时时间。
相关指令如下表所示。其中,若对应平台开启了 TLS 认证,username可填写任意非空值。private write命令将这些参数写入 flash中,供私有云启动时调用。
指令 |
描述 |
|---|---|
private write host <hostname> |
连接的hostname或ip address |
private write port <portname> |
连接的端口 |
private write protocol <mqtt/http> |
选择http还是mqtt连接 |
private write tls_switch <on/off> |
开启或关闭tls |
private write username <token> |
ThingsBoard的连接令牌(token) |
private write timeout <timeout> |
连接超时时间,可设为100 |
private show |
显示当前写入flash中的设置 |
private start |
开启任务并连接私有云 |
2.4 代码解释
2.4.1 at_cmd/atcmd_user.c文件
提供添加命令的方法,开发者可以在该文件中按照示例添加自己的串口命令。
2.4.2 at_cmd/atcmd_cloud.c文件
提供了上述关于云端(包含私有云)的命令实现函数。
函数 |
描述 |
|---|---|
at_cloud_private() |
命令执行函数。 |
lega_flash_kv_get() |
通过key获取flash中存储的value值。 |
lega_rtos_create_thread() |
新建一个(私有云)任务。 |
lega_rtos_set_semaphore(&private_Semaphore) |
释放信号量,后续在private cloud的任务中获取该信号量之后会结束任务。 |
2.4.3 cloud/src/cloud.c文件
提供了具体云端(包括私有云)的任务、云端连接初始化、收到云端反馈回调函数的注册等。其中私有云的部分由宏 CLOUD_PRIVATE_SUPPORT 控制。
通过参数 private_para->private_protocol 选择初始化 mqtt 还是 http。
通过参数 private_para->private_tls_switch 选择是否配置 tls。
http 上报通过 http_post 函数实现,上报之前需要先配置相关参数。
如果采用 https 还需要配置 tls_allocator 指针,默认的证书为 mbedtls_test_cas_pem,可修改为自己生成的证书。
http 目前只提供了一次性上传的示例。开发者可根据示例自行注册命令,或根据业务需求自行修改。
函数 |
描述 |
|---|---|
private_cloud_task() |
任务函数,包括初始化操作,任务循环,以及任务退出。 |
private_get_value() |
获取在 atcmd_cloud.c 文件中写入 flash 的相关参数,并将参 数保存在结构体中,该结构体指针为全局变量 private_para。 |
private_connection_cb() |
mqtt 连接的回调函数,demo在该函数内获取连接的状态,如果返回连接成功,则释放 private_connect_Semaphore 信号量,用于标注连接成功状态。如果程序获取该信号量超时或连接失败,则会重新发起 mqtt 连接。 |
mqtt_set_inpub_callback() |
设定来自云端数据的回调函数 private_incoming_data_cb。 |
private_incoming_data_cb() |
云端有消息来时的回调函数,在该函数内部获取温度的设置信息,并通过 mqtt_publish 将该信息上报到云端。 |
private_http_init() |
提供了http上报的方法,demo目前只支持数据上报。 |
2.4.4 cloud/src/private_cloud_ca.c文件
在该文件中,private_ca_crt 为 CA 证书、private_client_cert 为设备证书、 private_client_private_key 为设备私钥。开发者可以根据需要替换成自己的证书。
2.5 自建服务器调试
安装并配置服务器
例如,安装的 ThingsBoard 所在的服务器域名为 iot.asrmicro.com,使用的 mqtts 端口为 8084,默认开启 tls,安装好之后使用默认新建的设备 DeviceTest。
如下图,可见默认的设备:

点击 DeviceTest,可以看见详细信息,点击设备凭据,可以看到该设备是使用 X.509 认证,且该设备证书已填入 private_cloud_ca.c 中。

若对应平台使用的是Access_token 的认证方式,同样点击设备凭据来修改和获取 token 值,目前 ASR 服务器采用的是X.509认证方式。

设备入网
设备连接路由器,例如路由器的 SSID 为 AP17,密码为 12345678,则 AT 命令如下:
wifi_open sta AP17 12345678
设备写入相关配置
写入如下配置,查看配置并连接私有云:
private write host iot.asrmicro.com
private write port 8084
private write tls_switch on
private write protocol mqtt
private write username B1_TEST_TOKEN
private write timeout 100
private show
private start
利用仪表盘进行控制和上报
默认设备 demo 中用配置了云端仪表库的温度控制及温度显示仪表板,仪表板关联 DeviceTest 的温度参数;控制仪表板向设备发送温度,设备获取后上传该温度;显示仪表板显示设备上传的温度。

2.6 使用 ASR 的 ThingsBoard 调试设备
登录ASR私有云
网址:http://iot.asrmicro.com:8080/home
密码:tenant
请不要修改云中相关配置。目前默认使用 http 连接,http 端口为 8080。
如需使用 mqtt 连接,则需要重新配置 ThingsBoard 并重启。
查看设备
点击下图中的设备,可以查看最新遥测和属性等内容。

上传数据可以看到 temperature 的数值的变化以及时间的更新,如下图所示。

控制设备及显示温度
服务器已经将设备的温度参数与仪表盘关联,如果用户想自行设置关联,需要在最左侧实体视图中新建实体,将实体与设备关联;然后在仪表盘库新建仪表板,将仪表板中的仪表关联实体,从而关联设备。具体操作可参见 ThingsBoard 官方说明。
ThingsBoard 下发温度值,设备收到之后上传相应值。然后在界面最左端的仪表盘库中选择 ASR。
点击 ASR 后进入如下界面,可显示控制与状态上报的内容:

3.EMQ 方案设备端使用方法
3.1 EMQ 安装使用方法
目前 Demo 使用开源 EMQ。关于环境的搭建以及私有云的使用和配置,可参考下列相关文档:
EMQ官网:https://www.emqx.io/cn/
EMQ文档:https://docs.emqx.io/broker/latest/cn/
EMQ环境搭建安装指导:https://docs.emqx.io/broker/latest/cn/getting- started/install.html##packages
EMQ HTTP api:https://docs.emqx.io/broker/latest/cn/advanced/http-api.html
EMQ管理命令:https://docs.emqx.io/broker/latest/cn/advanced/cli.html
3.2 编译方案
使用 ASR FreeRTOS SDK 编译的方法,可参考 SDK 中的编译说明文件。
默认的编译方式没有将普通 MQTT broker 的代码编译,需要开发者手动修改默认配置: 将 build/build_rules/project/demo/config.mk 文件中的 CLOUD_SWITCH 配置修改为 1(原先为 0,默认不编译),并且将 $(NAME)_FLAGS += - DCLOUD_MQTT_BROKER_SUPPORT 被注释掉的部分打开。
若需使用 TLS 认证,还需在 /cloud/src/private_cloud_ca.c 文件中修改对应的如下内容:
CA证书 mqtt_broker_ca_crt
设备证书 mqtt_broker_client_cert
设备私钥 mqtt_broker_client_private_key
目前 SDK 中默认的是 ASR 平台的证书。
另外,可将 /cloud/src/cloud.c 文件中的 mqtt_manufacturer 以及 mqtt_productid 修改为实际的厂商名称以及产品 ID,也可使用默认,建议厂商自行维护。
上述修改完后重新编译即可。
3.3 运行说明
芯片连接网络
运行私有云需要先调用 Wi-Fi 相关命令使芯片连接路由器,相关使用方法可参考文档《ASR5502X 系列_FreeRTOS 平台_AT 命令使用指南》,以下为简单的说明:
输入命令: wifi_open sta <SSID> <password>
命令解释:wifi_open sta 为固定字符串;<SSID> 为将要连接的路由器的 SSID;<password>为路由器密码。
使用连接命令
连接前需要首先知道待连接的 host、port、tls 是否使用、连接账号、连接密码、超时时间。
相关指令如下表所示。其中,username和 userpass 视对应平台的认证方案来定,若无需要,可填写任意非空值。mqtt write命令将这些参数写入 flash 中,供私有云启动时调用。
指令 |
描述 |
|---|---|
mqtt write host <hostname> |
连接的hostname或ip address |
mqtt write port <portname> |
连接的端口 |
mqtt write tls_switch <on/off> |
开启或关闭tls |
mqtt write username <username> |
连接的账号 |
mqtt write userpass <userpass> |
连接的密码 |
mqtt show |
显示当前写入flash中的设置 |
mqtt start |
开启任务并连接私有云 |
3.4 代码解释
3.4.1 at_cmd/atcmd_user.c文件
提供添加命令的方法,开发者可以在该文件中按照示例添加自己的串口命令。
3.4.2 at_cmd/atcmd_cloud.c文件
提供了上述关于云端(包含 mqtt broker)的命令方法。
函数 |
描述 |
|---|---|
at_cloud_mqtt_broker() |
命令执行函数。 |
lega_flash_kv_get() |
通过key获取flash中存储的value值。 |
lega_rtos_create_thread() |
新建一个(mqtt)任务。 |
lega_rtos_set_semaphore(&mqtt_broker_Semaphore) |
释放信号量,后续在mqtt broker的任务中获取该信号量之后会结束任务。 |
3.4.3 cloud/src/cloud.c文件
提供了具体云端(包括 mqtt_broker)的任务、云端连接初始化、收到云端反馈回调函数的注册等。其中 mqtt_broker 的部分由宏 CLOUD_MQTT_BROKER_SUPPORT 控制。
通过参数 mqtt_broker_para->mqtt_broker_tls_switch 选择是否配置 tls。
Demo 中设备端的 Client ID 的规则为“厂商名+产品 ID+MAC 地址”,设备 sub、pub 的 Topic 都跟 Client ID 有关,建议妥善维护 Client ID。
函数 |
描述 |
|---|---|
mqtt_broker_cloud_task() |
任务函数,包括初始化操作,任务循环,以及任务退出。 |
mqtt_broker_get_value() |
获取在 atcmd_cloud.c 文件中写入 flash 的相关参数,并将参数保存在结构体中,该结构体指针为全局变量 mqtt_ broker_para。 |
mqtt_broker_connection_cb() |
mqtt 连接的回调函数,demo在该函数内获取连接的状态,如果返回连接成功则释放 mqtt_broker_connect_ Semaphore 信号量,用于标注连接成功状态。否则程序获取该信号量超时或连接失败则会重新发起 mqtt 连接。 |
mqtt_set_inpub_callback() |
设定来自云端数据的回调函数 mqtt_broker_incoming_ data_cb。 |
mqtt_broker_incoming_data_cb() |
云端有消息来时的回调函数,在该函数内部获取开关的设置信息,并通过 mqtt_publish 将该信息上报到云端。 |
3.4.4 cloud/src/private_cloud_ca.c文件
在该文件中,mqtt_broker_ca_crt 为 ASR 平台的证书、mqtt_broker_client_cert 为平台生成的设备证书、mqtt_broker_client_private_key 为对应的设备私钥,开发者可以根据需要替换成自己的证书。
3.5 调试实例
安装并配置服务器
例如,安装的 EMQ 所在的服务器域名为 iot.asrmicro.com,使用的 mqtts 端口为 8081。
设备入网
设备连接路由器,例如路由器的 SSID 为 AP17,密码为 12345678,则 AT 命令如下:
wifi_open sta AP17 12345678
设备写入相关配置
写入如下配置,查看配置并连接私有云:
mqtt write host iot.asrmicro.com
mqtt write port 8081
mqtt write tls_switch on
mqtt write username test
mqtt write userpass 123456
mqtt show
mqtt start
串口打印
串口会打印如下连接信息,有“successfully connected”表明连接成功。

在EMQ Dashboard 可见设备的连接状态

也可以使用 HTTP 接口方式接入并进行管理,具体可参考下方链接中的文档:
https://docs.emqx.io/broker/latest/cn/advanced/http-api.html#endpoint-publish。
示例:
对设备发布消息:

设备响应的log如下:

4.两种方案比较
对比角度 |
ThingsBoard(开源版本) |
EMQ(开源版本) |
|---|---|---|
开源情况 |
社区版本开源,专业版收费 |
MQTT broker开源,企业版收费 |
接入协议 |
MQTT、CoAP、HTTP |
MQTT V3.1.1、V5.0、HTTP |
认证方式 |
Token、TLS/SSL |
Username、ClientID、TLS/SSL、SQL等 |
消息存储 |
内置数据库,可另外搭建 |
需另外搭建 |
用户管理 |
提供了不同的用户角色 |
可以用内置数据库或者自行存储到自建数据库 |
规则引擎 |
提供了不同的数据处理规则链以及丰富的可定制化的规则小部件 |
自行配置 |
数据可视化 |
可以通过可自定义的仪表板查看或共享来自设备的数据 |
需另外搭建 |
MQTT定制化 |
不支持修改MQTT的一些规则,比如认证方式、Topic名称等 |
支持Topic自定义、规则自定义 |
使用场景 |
适用于数据收集类的使用场景。其部署方便快速,也无需另搭建数据转发、数据存储等云服务,建议对开发进度和开发资源有要求的用户选用。因其不支持MQTT定制化,不建议对MQTT协议有更深定制化需求的用户选用。 |
其安装部署十分便捷,可以直接适用于一些简单的使用场景。因其存储、可视化管理等需另外搭建,不建议有上述平台功能要求但开发资源有限的用户选用。其扩展性很强,建议已有自建平台并且有平台搭建能力的用户选用。 |
备注 |
ThingsBoard是一个一体化平台,用于收集和可视化物联网设备的数据 |
EMQ仅为MQTT消息服务器 |
A. 附录 - 相关资料
本文档中提到的参考信息总结如下:
运行私有云需要先调用 Wi-Fi 相关命令使芯片连接路由器,相关使用方法可参考文档《ASR5502X 系列_FreeRTOS 平台_AT 命令使用指南》。