由 wxlinus 贡献,Ai-Thinker 进行整理
【Clion开发】【一】阿里云物联网平台使用之M61开发板移植CLinkSDK 上一个教程我们讲了如何移植阿里云的CLinkSDK,这一次来讲讲如何使用CLinkSDK连接阿里云物联网平台,连接上了证明移植是没有啥问题的 1、阿里云物联网平台相关配置 新建产品 

新建设备 

复制设备三元组(等会要配置到设备端) 
2、设备端开发 连接WiFi目前是写死的了,没做配网具体的连接WiFi论坛上已经有好多教程了这里就不写了 
配置阿里云物联网平台设备三元组 
订阅主题 

3、编译烧录到设备 
4、现象验证 可以看到串口打印连接成功 
设备已经上线 
阿里云物联网平台日志也可以看到设备的消息 
5、小结 相关的初始化与配置函数可以参考项目代码、都是配置完后基本不用修改的、都有详细的注释
设备主题的订阅主要由以下函数实现
c
uint8_t user_mqtt_sub(char *sub_topic, uint8_t qos) {
int32_t res = STATE_SUCCESS;
// MQTT 订阅topic功能示例, 请根据自己的业务需求进行使用
{
// 属性集合
mqtt_properties_t *sub_props = aiot_mqtt_props_init();
// 用户自定义属性
mqtt_property_t user_prop = {
.id = MQTT_PROP_ID_USER_PROPERTY,
.value.str_pair.key.len = strlen("demo_key"),
.value.str_pair.key.value = (uint8_t *) "demo_key",
.value.str_pair.value.len = strlen("demo_value"),
.value.str_pair.value.value = (uint8_t *) "demo_value",
};
// 将用户自定义属性添加到属性集合
aiot_mqtt_props_add(sub_props, &user_prop);
// 订阅选项
sub_options_t opts = {
.no_local = 1,
.qos = qos,
.retain_as_publish = 1,
.retain_handling = 1,
};
res = aiot_mqtt_sub_v5(mqtt_handle, sub_topic, &opts, NULL, NULL, sub_props);
aiot_mqtt_props_deinit(&sub_props);
if (res < 0) {
LOG_E("aiot_mqtt_sub failed, res: -0x%04X\n", -res);
aiot_mqtt_deinit(&mqtt_handle);
return -1;
}
}
}发布则是下面函数实现
c
uint8_t user_mqtt_pub(char *pub_topic, char *pub_payload, uint8_t qos) {
int32_t res = STATE_SUCCESS;
mqtt_properties_t *pub_props = aiot_mqtt_props_init();
mqtt_property_t response_prop = {
.id = MQTT_PROP_ID_RESPONSE_TOPIC,
.value.str.len = strlen(pub_topic),
.value.str.value = (uint8_t *) pub_topic,
};
// mqtt5特性自定义属性
// char *demo_data_str = "1";
// mqtt_property_t correlation_prop = {
// .id = MQTT_PROP_ID_CORRELATION_DATA,
// .value.str.len = strlen(demo_data_str),
// .value.str.value = (uint8_t *) demo_data_str,
// };
aiot_mqtt_props_add(pub_props, &response_prop);
// aiot_mqtt_props_add(pub_props, &correlation_prop);
/* MQTT 5.0特性中的topic alias属性. 在一次连接中, 往pub_topic这个topic中发送过报文,
* 之后再往这个topic发送的话, 会使能topic alias功能, 上行报文不带有topic字段.
*/
res = aiot_mqtt_pub_v5(mqtt_handle, pub_topic, (uint8_t *) pub_payload,
(uint32_t) (strlen(pub_payload)), qos, 1, pub_props);
if (res < 0) {
LOG_E("aiot_mqtt pub failed, res: -0x%04X\n", -res);
aiot_mqtt_deinit(&mqtt_handle);
return -1;
}
aiot_mqtt_props_deinit(&pub_props);
}平台数据的发布订阅都是基于json的可以使用CJson库方便数据的构建与解析 例如构建发送数据
c
char *get_payload(int led_state) {
cJSON *root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "id", 1);
cJSON_AddStringToObject(root, "version", "1.0");
cJSON *params = cJSON_CreateObject();
cJSON_AddBoolToObject(params, "ledState", led_state);
cJSON_AddItemReferenceToObject(root, "params", params);
strcpy(payload, cJSON_PrintUnformatted(root));
cJSON_Delete(root);
cJSON_Delete(params);
return payload;
}相关代码已经放在gitee上面m61sdk: 安信可m61模组sdk移植项目 (gitee.com)
遇到问题?
如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

