Baidu Cloud Kit-V1.0.0
目录
简介
百度云组件是OneOS操作系统提供的百度云接入组件,是对百度云发布的适用于嵌入式设备的SDK的移植与开发,通过主流的物联网协议(如 MQTT)通讯,可以在智能设备与云端之间建立安全的双向连接,快速实现物联网项目。
V1.0.0功能简介:
- 百度端云互通组件SDK移植
- 支持MQTT(S)协议接入,支持设备注册,消息订阅,消息发布
- 支持单向认证(PSK)、双向认证(CA)两种认证方式接入百度云
源码目录结构
目录 | 说明 |
---|---|
certs | 证书相关文件,包含服务器根证书及设备证书、私钥。 |
c-utility | 提供基础的功能模块(比如string,列表操作,IO等等)。 |
doc | 说明文档 |
iotcore_client | 设备端示例代码 |
parson | 应用层解析,主要是解析json文件,实现消息互通 |
serializer | 序列化、反序列化函数库 |
umqtt | mqtt接入实现,包含设备连接、订阅、发布等功能 |
MQTT(S)协议连接
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
系统限制
连接及消息收发相关
限制描述 | 限制值 | 说明 |
---|---|---|
单项目最大同时在线长连接数 | 1万 | - |
单实例每秒新建MQTT连接请求数 | 200 | - |
单MQTT连接的最大订阅数 | 100 | 超过订阅数的请求将会被直接拒绝 |
单连接客户端每秒订阅请求数 | 10 | 每秒最多进行10次订阅主题的操作 |
单连接上报消息频率上限 | QoS0:30条/秒,QoS1:10条/秒 | - |
离线消息最长缓存时间 | 1周 | - |
单个连接每秒的吞吐带宽 | 512 KB | - |
每个订阅请求的最大订阅数 | 8 | - |
MQTT单个发布消息最大长度 | 32 KB | - |
MQTT连接心跳时间 | 30至1200秒,建议取值300秒以上 | - |
ClientID 长度 | 128字节 | - |
主题(Topic)相关
限制描述 | 限制值 | 说明 |
---|---|---|
Topic总长度 | 255 | - |
Topic每层长度 | 40 | - |
每个Topic可被订阅上限 | 200 | 即一个主题匹配的订阅连接数最多为200,超出部分将不推送 |
订阅和取消订阅操作生效时间 | 5s | 即 Client 向服务端发送 sub 请求最长 5s 后订阅生效 |
设备限制
限制描述 | 限制值 | 说明 |
---|---|---|
单实例设备数量 | 10w | - |
配置选项
使用baidu cloud kit需要通过Menuconfig的图形化工具进行配置选择,配置的路径如下所示:
(Top) → Components→ Cloud→ Baidu
OneOS Configuration
[*] Baidu iotcore --->
*** Enable Baidu IoT Demo ***
[*] Enable/Disable TLS
Secret Key Type (PSK) --->
(xxx.iot.gz.baidubce.com) Config Server Address (NEW)
(iot core id) Config IoTCore ID (NEW)
(device key) Config Device Key (NEW)
(device secret) Config Device Secret (NEW)
配置入口
配置路径:Components→ Cloud→ Baidu
参数说明
Baidu iotcore:使能百度云连接组件
Select method :选择模式:
1. Demo,提供百度云连接Demo,接入百度云并进行数据交换
Enable/Disable TLS:使能/去使能TLS,去使能TLS后,所有报文将以明文形式发送,建议使能TLS;
Secret Key Type:使能TLS后,用户可选择单向认证模式,或双向认证模式
1. PSK,单向认证模式,需要用户从云平台下载设备密钥
2. CA,双向认证模式,需要用户从云平台下载设备证书及设备私钥
Config Server Address:配置百度云服务器接入地址;
Config IoTCore ID:产品ID,百度云设备注册后,云平台提供;
Config Device Key:设备ID,百度云设备注册时用户输入;
Config Device Secret:设备密钥,百度云设备注册后,云平台提供(仅PSK模式下需要);
百度云平台
使用前准备
操作流程
创建IoT Core实例
选择物联网核心套件IoT Core,点击实例列表,并选择“创建IoT Core”
创建设备
前置条件:创建模板,创建设备前需要先添加模板,为本实例创建default topic,请记录该topic,设备连接云平台后,可订阅/发布该主题。
模板创建完成后,可以在设备列表中添加新设备
- 名称,设备的Device Key,工程配置时需要填入配置项。
- 认证方式分CA证书PSK密码认证:
- 选择证书认证时,设备创建完成后,可以从百度智能云平台下载设备证书及私钥,并将该文档存在到 components\cloud\baidu\certs\ClientCert&Key\cert-and-keys.txt文件中。
- 选择密钥认证时,设备创建完成后,可以从百度智能云平台下载Device Secret,工程配置时,需要填入配置项。
- 模板,选择用户自定义的模板,用户可以在业务代码中订阅或发布该主题,该主题名可以在模板的详细信息中获取。
获取连接信息
在实例列表中,“接入点”选项可以获取云平台服务器地址,在工程配置时,需填入Server Address选项
连接及消息收发
开发者可以根据业务需要,选择mqtt、mqtts(证书)、mqtts(密钥)三种方式接入云平台,并进行业务收发。
注意事项
- 百度云不支持消息在线查看,用户可以通过订阅设备发布的消息来确认设备与云平台之间的连接状态;
- 百度云服务器连接超时时间为10秒,采用TLS方式接入时,使用外部RAM时容易超时,建议采用内部RAM较大的MCU(如:正点原子-阿波罗开发板)
Baidu Cloud API
API接口
函数名称 | 说明 |
---|---|
initialize_mqtt_client_handle | MQTT客户端初始化 |
iotcore_mqtt_doconnect | MQTT客户端连接到服务器 |
publish_mqtt_message | MQTT客户端发布消息 |
subscribe_mqtt_topic | MQTT客户端订阅消息 |
unsubscribe_mqtt_topics | MQTT客户端去订阅消息 |
iotcore_mqtt_dowork | MQTT客户端主循环,需要在线程中循环调用 |
iotcore_mqtt_disconnect | MQTT客户端断开连接 |
iotcore_mqtt_destroy | MQTT客户端销毁资源 |
set_certificates | MQTT客户端设置服务器证书 |
set_client_cert | MQTT客户端设置设备证书及私钥 |
iotcore_get_mqtt_status | MQTT客户端连接状态查询 |
initialize_mqtt_client_handle
mqtt客户端初始化函数,初始化成功后,返回MQTT client操作句柄。
IOTCORE_MQTT_CLIENT_HANDLE initialize_mqtt_client_handle(const IOTCORE_INFO *info,
const char *will_topic,
const char *will_payload,
MQTT_CONNECTION_TYPE conn_type,
RECV_MSG_CALLBACK callback,
IOTCORE_RETRY_POLICY retry_policy,
size_t retry_timeout_limit_in_sec);
参数 | 说明 |
---|---|
info | 设备注册相关参数,包含:产品ID、设备ID、设备密钥(psk模式)、云服务器地址 |
will_topic | 遗嘱消息主题,需要时添加 |
will_payload | 遗嘱消息内容,需要时添加 |
conn_type | 连接类型,包含MQTT、MQTTS-PSK、MQTTS-CA三种类型 |
callback | 消息接收回调函数,当收到平台下发消息时,调用该函数处理,需要用户实现 |
retry_policy | 重连接策略,包括:无重连、间隔时间、线性退避等策略 |
retry_timeout_limit_in_sec | 重连接最大超时时间,单位秒 |
返回 | 说明 |
NULL | 执行失败 |
非NULL | MQTT client操作句柄 |
iotcore_mqtt_doconnect
mqtt客户端连接云服务器,包括mqtts下的TLS握手及平台注册、鉴权等操作。
int iotcore_mqtt_doconnect(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client, size_t timeout);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
timeout | 连接超时时间,单位秒 |
返回 | 说明 |
0 | 执行成功 |
非0 | 执行失败,返回错误码 |
publish_mqtt_message
mqtt客户端消息发布,用以客户端向平台发布消息。
int publish_mqtt_message(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client,
const char *pub_topic_name,
IOTCORE_MQTT_QOS qos_value,
const uint8_t *pub_msg,
size_t pub_msg_length,
PUB_CALLBACK handle,
void *context);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
pub_topic_name | 发布消息的主题 |
qos_value | QoS策略,支持QoS0和QoS1 |
pub_msg | 需要发布的消息内容地址 |
pub_msg_length | 消息长度 |
handle | 消息发布结果回调函数,消息发布完成后将执行该函数,用户可以根据需要来实现该函数 |
context | 调用handle回调时,传入的上下文 |
返回 | 说明 |
0 | 执行成功 |
非0 | 执行失败,返回错误码 |
subscribe_mqtt_topic
mqtt客户端消息订阅,用以客户端向平台订阅消息。
int subscribe_mqtt_topic(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client,
const char *sub_topic,
IOTCORE_MQTT_QOS ret_qos,
SUB_CALLBACK sub_callback,
void* context);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
sub_topic | 需要订阅的主题 |
ret_qos | 服务质量要求,支持QoS0和QoS1 |
sub_callback | 消息订阅完成后回调函数,消息订阅完成后将执行该函数,用户可以根据需要来实现该函数 |
context | 调用sub_callback回调时,传入的上下文 |
返回 | 说明 |
0 | 执行成功 |
非0 | 执行失败,返回错误码 |
unsubscribe_mqtt_topics
mqtt客户端消息去订阅,用以客户端向平台消息去订阅。
int unsubscribe_mqtt_topics(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client, const char* unsubscribe);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
unsubscribe | 需要去订阅的主题 |
返回 | 说明 |
0 | 执行成功 |
非0 | 执行失败,返回错误码 |
iotcore_mqtt_dowork
mqtt客户端主循环,客户端连接到服务器后,需要在线程或任务中循环调用。
void iotcore_mqtt_dowork(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
返回 | 说明 |
void |
iotcore_mqtt_disconnect
mqtt客户端断开连接,用以客户端主动断开连接
int iotcore_mqtt_disconnect(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
返回 | 说明 |
0 | 执行成功 |
非0 | 执行失败,返回错误码 |
iotcore_mqtt_destroy
释放mqtt客户端操作句柄所占用的资源,释放后该指针不能使用。
void iotcore_mqtt_destroy(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
返回 | 说明 |
void |
set_certificates
设置百度云服务器证书,用于TLS握手阶段服务器证书比对。
void set_certificates(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client, const char* certificates);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
certificates | 服务器证书储存地址 |
返回 | 说明 |
void |
set_client_cert
设置设备证书及私钥,用于TLS握手阶段上传服务器。
void set_client_cert(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client,
const char *client_cert,
const char *client_key);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
client_cert | 设备证书储存地址 |
client_key | 设备私钥存储地址 |
返回 | 说明 |
void |
iotcore_get_mqtt_status
mqtt客户端连接状态查询,查询当前连接状态。
IOTCORE_MQTT_STATUS iotcore_get_mqtt_status(IOTCORE_MQTT_CLIENT_HANDLE iotcore_client);
参数 | 说明 |
---|---|
iotcore_client | mqtt客户端操作句柄 |
返回 | 说明 |
IOTCORE_MQTT_STATUS | 返回当前连接状态 |