本帖最后由 wxlinus 于 2024-1-31 14:56 编辑
【Clion开发】【一】阿里云物联网平台使用之M61开发板移植CLinkSDK
上一个教程我们讲了如何移植阿里云的CLinkSDK,这一次来讲讲如何使用CLinkSDK连接阿里云物联网平台,连接上了证明移植是没有啥问题的
1、阿里云物联网平台相关配置
新建产品
新建设备
复制设备三元组(等会要配置到设备端)
2、设备端开发
连接WiFi目前是写死的了,没做配网具体的连接WiFi论坛上已经有好多教程了这里就不写了
配置阿里云物联网平台设备三元组
订阅主题
3、编译烧录到设备
4、现象验证
可以看到串口打印连接成功
设备已经上线
阿里云物联网平台日志也可以看到设备的消息
5、小结
相关的初始化与配置函数可以参考项目代码、都是配置完后基本不用修改的、都有详细的注释
设备主题的订阅主要由以下函数实现
- 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;
- }
- }
- }
复制代码 发布则是下面函数实现
- 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库方便数据的构建与解析
例如构建发送数据
- 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)
|
|