2.使用vscode来开发,小熊派通过esp8266,使用mqtt连接华为云(上传温湿度光照度属性到华为云)
1:登录设备接入平台,网址如下:
https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home
2:点击产品-创建产品-自定义产品名字,协议选择MQTT协议
填写之后的信息如下:
2.1 添加服务
创建产品完成之后,需要添加产品的服务,就是产品的属性,比如温湿度,下发控制命令等。我们这里定义Agriculture服务属性
创建完服务属性之后,再分别添加温度,湿度,光照强度的属性。这几个数据可以是浮点型,也可以是int型,看个人需要,我这里选择整形int类型。就是上传数据的时候要注意。定义什么类型属性,就是上传什么类型数据。
添加温度属性
添加湿度属性
添加光照度属性
至此,创建信息初步完成,目前只有上传属性功能,下发命令下次再说明。
3:创建设备,这个设备要对应刚才的产品
进入设备管理界面,选择注册设备
点击确认完成设备创建工作,设备创建完成之后,会提示设备ID和密钥,这个要记住,代码里面要用到,会提示设备ID和密钥,这个要记住,代码里面要用到,
会提示设备ID和密钥,这个要记住,代码里面要用到,重要的是说三遍!!!
点击创建好的设备,选择查看操作,可以查看到设备的信号,包含设备ID和密钥。
4:修改代码里面配置,重新烧录程序
代码里面的需要修改的,主要是设备ID和设备密钥,代码文件在oc_agriculture_template.c中
重新烧录编译,下载
5:查看平台信息,查看数据是否上传。
我们可以看到温湿度数据已经上传,但是光照强度还没有上传,回看代码,看看光照度哪里错了。先附上代码
/*上传数据到平台*/
static int app_report_task_entry()
{
int ret = -1;
cJSON* cjson_root = NULL;
cJSON* cjson_services = NULL;
cJSON* cjson_item = NULL;
cJSON* cjson_data = NULL;
char *str_json = NULL;
oc_mqtt_config_t oc_param;
(void) memset(&oc_param,0,sizeof(oc_param));
oc_param.boot_mode = en_oc_mqtt_mode_nobs_static_nodeid_hmacsha256_notimecheck_json;
oc_param.id = MQTT_ID;
oc_param.pwd = MQTT_PWD;
oc_param.lifetime = MQTT_LIFETIME;
oc_param.server_addr = MQTT_SERVER_ADDR;
oc_param.server_port = MQTT_SERVER_PORT;
oc_param.msg_deal = app_msg_deal;
ret = oc_mqtt_config( &oc_param);
if (0 != ret)
{
return ret;
}
oc_mqtt_subscribe(TOPIC_PROPERTIES_REPORT, 2);
//install a dealer for the led message received
while(1) //--TODO ,you could add your own code here
{
cjson_root = cJSON_CreateObject();
cjson_services = cJSON_CreateArray();
cjson_data = cJSON_CreateObject();
cjson_item = cJSON_CreateObject();
cJSON_AddStringToObject(cjson_item, "service_id", "Agriculture");
cJSON_AddNumberToObject(cjson_data, "Temperature", (int8_t)E53_IA1_Data.Temperature);
cJSON_AddNumberToObject(cjson_data, "Humidity", (int8_t)E53_IA1_Data.Humidity);
cJSON_AddNumberToObject(cjson_data, "luminance", (uint16_t)E53_IA1_Data.Lux);
cJSON_AddItemToObject(cjson_item, "properties", cjson_data);
cJSON_AddItemToArray(cjson_services, cjson_item);
cJSON_AddItemToObject(cjson_root, "services", cjson_services);
str_json = cJSON_Print(cjson_root);
oc_mqtt_report((uint8_t *)str_json, strlen(str_json), 2);
cJSON_Delete(cjson_root);
if (str_json != NULL)
{
printf("Free str_json");
osal_free(str_json);
}
osal_task_sleep(2*1000);
}
return ret;
}
认真查看代码,发现我们的温湿度属性跟在创建产品的时候是对应的,光照度的属性代码和代码里面的属性代码是不一致的。
修改代码属性一致,重新下载烧录。
cJSON_AddNumberToObject(cjson_data, "Temperature", (int8_t)E53_IA1_Data.Temperature);
cJSON_AddNumberToObject(cjson_data, "Humidity", (int8_t)E53_IA1_Data.Humidity);
cJSON_AddNumberToObject(cjson_data, "Illuminance", (uint16_t)E53_IA1_Data.Lux);
再次 查看设备信息,光照i度数据也已经上传。
好了,属性上传到此结束,下次讲下 下发命令控制。
- 点赞
- 收藏
- 关注作者
评论(0)