2.使用vscode来开发,小熊派通过esp8266,使用mqtt连接华为云(上传温湿度光照度属性到华为云)

举报
秦玉安 发表于 2021/08/25 16:11:59 2021/08/25
【摘要】 采集温湿度信息,光照度信息,使用ESP8266,通过MQTT协议上传信息到华为云

1:登录设备接入平台,网址如下:

https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

2:点击产品-创建产品-自定义产品名字,协议选择MQTT协议

101.jpg

填写之后的信息如下:

102.jpg

2.1 添加服务

创建产品完成之后,需要添加产品的服务,就是产品的属性,比如温湿度,下发控制命令等。我们这里定义Agriculture服务属性

103.jpg

创建完服务属性之后,再分别添加温度,湿度,光照强度的属性。这几个数据可以是浮点型,也可以是int型,看个人需要,我这里选择整形int类型。就是上传数据的时候要注意。定义什么类型属性,就是上传什么类型数据。

添加温度属性

104.jpg

添加湿度属性
105.jpg

添加光照度属性

106.jpg

至此,创建信息初步完成,目前只有上传属性功能,下发命令下次再说明。

3:创建设备,这个设备要对应刚才的产品

进入设备管理界面,选择注册设备

107.jpg

点击确认完成设备创建工作,设备创建完成之后,会提示设备ID和密钥,这个要记住,代码里面要用到,会提示设备ID和密钥,这个要记住,代码里面要用到,

会提示设备ID和密钥,这个要记住,代码里面要用到,重要的是说三遍!!!

108.jpg

点击创建好的设备,选择查看操作,可以查看到设备的信号,包含设备ID和密钥。

110.jpg

4:修改代码里面配置,重新烧录程序

代码里面的需要修改的,主要是设备ID和设备密钥,代码文件在oc_agriculture_template.c中

111.jpg

重新烧录编译,下载

112.jpg

5:查看平台信息,查看数据是否上传。

113.jpg

我们可以看到温湿度数据已经上传,但是光照强度还没有上传,回看代码,看看光照度哪里错了。先附上代码

/*上传数据到平台*/
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;
}

认真查看代码,发现我们的温湿度属性跟在创建产品的时候是对应的,光照度的属性代码和代码里面的属性代码是不一致的。

114.jpg

修改代码属性一致,重新下载烧录。

        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度数据也已经上传。

115.jpg

好了,属性上传到此结束,下次讲下 下发命令控制。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。