Skip to content

由 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

Released under the MIT License. Build Time 2026-09-11 14:52:23