发帖
6 0 0

【Clion开发】【二】阿里云物联网平台使用之M61开发板连接阿里云平台

wxlinus
论坛元老

9

主题

100

回帖

3357

积分

论坛元老

积分
3357
小安派&M61基本系统教程 2291 6 2024-1-31 14:56:49
本帖最后由 wxlinus 于 2024-1-31 14:56 编辑

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


新建设备



复制设备三元组(等会要配置到设备端)


2、设备端开发
连接WiFi目前是写死的了,没做配网具体的连接WiFi论坛上已经有好多教程了这里就不写了

配置阿里云物联网平台设备三元组

订阅主题


3、编译烧录到设备


4、现象验证
可以看到串口打印连接成功


设备已经上线


阿里云物联网平台日志也可以看到设备的消息


5、小结
相关的初始化与配置函数可以参考项目代码、都是配置完后基本不用修改的、都有详细的注释

设备主题的订阅主要由以下函数实现
  1. uint8_t user_mqtt_sub(char *sub_topic, uint8_t qos) {
  2.     int32_t res = STATE_SUCCESS;
  3.     //MQTT 订阅topic功能示例, 请根据自己的业务需求进行使用
  4.     {
  5.         //属性集合
  6.         mqtt_properties_t *sub_props = aiot_mqtt_props_init();
  7.         //用户自定义属性
  8.         mqtt_property_t user_prop = {
  9.                 .id = MQTT_PROP_ID_USER_PROPERTY,
  10.                 .value.str_pair.key.len = strlen("demo_key"),
  11.                 .value.str_pair.key.value = (uint8_t *) "demo_key",
  12.                 .value.str_pair.value.len = strlen("demo_value"),
  13.                 .value.str_pair.value.value = (uint8_t *) "demo_value",
  14.         };
  15.         //将用户自定义属性添加到属性集合
  16.         aiot_mqtt_props_add(sub_props, &user_prop);
  17.         //订阅选项
  18.         sub_options_t opts = {
  19.                 .no_local = 1,
  20.                 .qos = qos,
  21.                 .retain_as_publish = 1,
  22.                 .retain_handling = 1,
  23.         };
  24.         res = aiot_mqtt_sub_v5(mqtt_handle, sub_topic, &opts, NULL, NULL, sub_props);
  25.         aiot_mqtt_props_deinit(&sub_props);
  26.         if (res < 0) {
  27.             LOG_E("aiot_mqtt_sub failed, res: -0x%04X\n", -res);
  28.             aiot_mqtt_deinit(&mqtt_handle);
  29.             return -1;
  30.         }
  31.     }
  32. }
复制代码
发布则是下面函数实现
  1. uint8_t user_mqtt_pub(char *pub_topic, char *pub_payload, uint8_t qos) {
  2.     int32_t res = STATE_SUCCESS;
  3.     mqtt_properties_t *pub_props = aiot_mqtt_props_init();
  4.     mqtt_property_t response_prop = {
  5.             .id = MQTT_PROP_ID_RESPONSE_TOPIC,
  6.             .value.str.len = strlen(pub_topic),
  7.             .value.str.value = (uint8_t *) pub_topic,
  8.     };
  9.     //mqtt5特性自定义属性
  10. //    char *demo_data_str = "1";
  11. //    mqtt_property_t correlation_prop = {
  12. //            .id = MQTT_PROP_ID_CORRELATION_DATA,
  13. //            .value.str.len = strlen(demo_data_str),
  14. //            .value.str.value = (uint8_t *) demo_data_str,
  15. //    };
  16.     aiot_mqtt_props_add(pub_props, &response_prop);
  17. //    aiot_mqtt_props_add(pub_props, &correlation_prop);

  18.     /* MQTT 5.0特性中的topic alias属性. 在一次连接中, 往pub_topic这个topic中发送过报文,
  19.      * 之后再往这个topic发送的话, 会使能topic alias功能, 上行报文不带有topic字段.
  20.     */
  21.     res = aiot_mqtt_pub_v5(mqtt_handle, pub_topic, (uint8_t *) pub_payload, (uint32_t) (strlen(pub_payload)), qos,
  22.                            1, pub_props);
  23.     if (res < 0) {
  24.         LOG_E("aiot_mqtt pub failed, res: -0x%04X\n", -res);
  25.         aiot_mqtt_deinit(&mqtt_handle);
  26.         return -1;
  27.     }
  28.     aiot_mqtt_props_deinit(&pub_props);
  29. }
复制代码
平台数据的发布订阅都是基于json的可以使用CJson库方便数据的构建与解析
例如构建发送数据
  1. char *get_payload(int led_state) {
  2.     cJSON *root = cJSON_CreateObject();
  3.     cJSON_AddNumberToObject(root, "id", 1);
  4.     cJSON_AddStringToObject(root, "version", "1.0");
  5.     cJSON *params = cJSON_CreateObject();
  6.     cJSON_AddBoolToObject(params, "ledState", led_state);
  7.     cJSON_AddItemReferenceToObject(root, "params", params);
  8.     strcpy(payload, cJSON_PrintUnformatted(root));
  9.     cJSON_Delete(root);
  10.     cJSON_Delete(params);
  11.     return payload;
  12. }
复制代码
相关代码已经放在gitee上面m61sdk: 安信可m61模组sdk移植项目 (gitee.com)

──── 0人觉得很赞 ────

使用道具 举报

优秀!
学习了
2024-2-1 09:24:57
向大佬学习
厉害👍
2024-2-19 10:19:12
您需要登录后才可以回帖 立即登录
高级模式
返回
统计信息
  • 会员数: 31131 个
  • 话题数: 42294 篇