项目三 智能园区节能减排监控系统

一、项目背景

随着全球经济的快速发展和城市化进程加快,园区建设数量不断增加,园区运营管理面临的节能减排压力也在不断增加。传统的园区节能减排管理方式存在着效率低下、监控数据不准确等问题,无法满足节能减排管理的需求。
为解决这一问题,智能园区节能减排监控系统应运而生。该系统利用物联网、大数据、人工智能等技术手段,实现对园区的能耗、排放等数据进行实时监测、分析和预测,帮助园区管理者及时发现并解决节能减排问题,提高园区运营效率和节能减排水平。
通过智能园区节能减排监控系统项目,可以有效提升园区节能减排管理的科学化、精细化水平,助力园区实现可持续发展目标。

二、项目目标

1.采集温度、湿度、光照值,并上传OneNET平台
2.实现公共区域照明系统的灯光自动控制,当光照充足时,照明灯熄灭,光照较暗时,照 明灯开启。(LED模拟照明灯,通过HTTP数据推送将光照值推送给应用程序,由应用程序 调用API控制LED开关)

三、实验步骤

1.添加代码

(1)增加光照模块和LED模块的头文件

#include "BH1750.h"  /* 光照传感器 */
#include "Lcd_Driver.h"/*lcd屏*/

(2)声明变量

nbiot_value_t illumi;   /*光照*/
nbiot_value_t led;     /*LED灯*/
extern float result_lx;/*光照*/

(3)编写“读”回调函数,平台发送读取资源命令时进行响应

        uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data)
{
    if (objid == 3303 && instid == 0 && resid == 5700) {        /* 温度 */
        SHT20_INFO sht20 = { 0 };
        sht20 = SHT20_GetValue();
        temp.value.as_float = sht20.tempreture;
    } else if (objid == 3304 && instid == 0 && resid == 5700) { /* 湿度 */
        SHT20_INFO sht20 = { 0 };
        sht20 = SHT20_GetValue();
        humi.value.as_float = sht20.humidity;
    }else if (objid == 3301 && instid == 0 && resid == 5700) { /* 光 照 */
        BH1750_test();
        illumi.value.as_float = result_lx;
    } else if (objid == 3311 && instid == 0 && resid == 5850) { /* LED */
        led.value.as_bool = ledStatus.Led1Sta;
    }
}

(4)编写“写”回调函数,实现对平台发送的LED灯控制命令的响应

void write_callback(
        uint16_t       objid,
        uint16_t       instid,
        uint16_t       resid,
        nbiot_value_t *data)
{
    printf("write /%d/%d/%d:%d\r\n",
            objid,
            instid,
            resid, data->value.as_bool);
    if(objid == 3311 && instid ==0 && resid ==5850)/*LED灯*/
    {
        if(data->value.as_bool)
        {
            //打开白色背景光以模拟LED灯开
            Lcd_Clear(WHITE);
            ledStatus.Led1Sta=1;
        }
        else
        {
            //打开黑色背景光以模拟LED灯关
                Lcd_Clear(BLACK);
            ledStatus.Led1Sta=0;
        }
    }
}

(5)修改网络配置,修改引导机服务地址,”,这里,必须在代码中将 IMEI 和 IMSI 改
成跟OneNET 平台上的一样。这样,就可以实现真实设备与OneNET 平台上的虚拟设备一对一映射

char uri[] = "coap://183.230.40.40:5683";   // 引导机服务
char *serv_addr = "183.230.102.118";          // 接入机 IP 地址
const char endpoint_name[] = "282221995033272;888";     // IMEI;IMSI

(6)增加光照值、LED 数值的读取更新

    /* 更新光照数值 */
                illumi.flag |= NBIOT_UPDATED;
                BH1750_test();
                illumi.value.as_float = result_lx;
            
                /* 更新 LED 数值*/
                led.flag |= NBIOT_UPDATED;
                led.value.as_bool = ledStatus.Led1Sta;
            
    } else if (cur_time == 0 && last_time == 0) {
        cur_time = nbiot_time();
        last_time = cur_time;
    } else {
        cur_time = nbiot_time();
    }
}

(7)增加光照、LED 资源

// 添加光照资源
        illumi.type = NBIOT_FLOAT;
        illumi.flag = NBIOT_READABLE;
        ret = nbiot_resource_add(dev,
        3301,
        0, 
        5700, 
        &illumi);
        if (ret)
        {
        nbiot_device_destroy(dev);
        printf("device add resource(illumi) failed, code = %d.\r\n", ret);
        }
        // 添加 LED 灯资源
        led.type = NBIOT_BOOLEAN;
        led.flag = NBIOT_READABLE | NBIOT_WRITABLE;
        ret = nbiot_resource_add(dev,
        3311,
        0, 
        5850, 
        &led);
        if (ret)
        {
        nbiot_device_destroy(dev);
        printf("device add resource(led) failed, code = %d.\r\n", ret);
        }

2.云平台添加设备与资源

image.png

3.设备接入平台

屏幕截图 2024-05-05 225125.png

4.平台对LED灯控制

LED灯的资源类型为boolean型,该类型的变量只能是True或是False,因此,开灯使用“true”,关 灯使用“false”


屏幕截图 2024-05-05 225717.png

5.使用“Token计算器”,生成设备接入的鉴权信息

注意输入时不要有空格,不然会出现错误


9860a5fc60fccbb0fa0d2ecd408c17e2.png

6.通过Postman 进行API测试

(1)新建Collection,建立Collection可以方便管理同一个项目中的HTTP请求

74fff9b6e83874b639704037f5aea10b.png

(2)新建Request请求,命名为:“即时命令-设备资源列表获取”,并保存在上一步中 的Collection中。
(3)Request请求行配置 请求方法设置为“GET”。 URL主体为“https://iot-api.heclouds.com/nb-iot/resources”;该接口用于获取设备资源列表
(4)Request头部行Headers配置 配置头部Headers,添加头部字段authorization,其值为计算得到的 Token值
image.png

(5)读设备资源
Request的请求方式、URL以及首部字段authorization的配置跟之前一样。 URL参数有所变化:action为read,表示读取设备资源;配置设备的IMEI和设备的 obi_id ,其中 obi_id 根据要读取的资源类型来确定。例如根据IPSO 规范,温度传感器 的Object ID为 3303,湿度传感器为 3304,LED灯为3301。这里获取的是LED灯的资源信息,所以URL参数中 obi_id 的值为3301。
image.png

(6)写设备资源
Request请求方法设置为“POST”,URL主体跟之前一样; URL参数配置:参数action为write,表示写设备资源,配置IMEI、obj_id、obj_inst_id 及mode等参数; 请求头部行Headers配置:authorization 配置跟之前一样,而Content-Type设置为 application/json,表示请求消息实体主体Body内容是JSON格式; 请求实体主体Body填写。点击 Body 选项,选择raw形式编辑,以JSON格式书写,设 置资源ID即res_id为5850,IPSO模型中5850代表灯的开关状态属性,其值val为1时代 表开灯,为0 时代表关灯。
image.png

(7)发送请求并查看响应消息 配置完毕后,点击“Send”按钮发送请求。当请求成功时,Status显示响应码“200 0K’ 服务器会以JSON格式返回响应消息,但是只有当error值为“succ”时才真正代表平台资源列表获取成功。
image.png

7.云平台查看命令下发日志

image.png

8.使用 HTTP 数据推送自动开关 LED 灯

(1)打开灯光推送应用用户门户,以OneNET注册用户的 用户id 和用户AcessKey 登陆门户地址:http://1.14.71.134:8080/


image.png

注意:
1、首次登陆,会提示该用户id未使用记录,需要再次输入相同的用户id和用户AcessKey,登陆即可成功。


image.png

image.png

(2)需要使用本人在OneNET注册用户的 用户id 和用户AcessKey,如填错,则使用灯光控制功能会因为鉴权错误而功能失败。具体的信息在OneNET官网(用户中心-访问权限页面),用户id为6位数字,AcessKey需点击查看:


屏幕截图 2024-05-05 234845.png

(3)绑定NB-IoT设备的IMEI号
进入“我的物联网”-“设备”菜单页面,填写IMEI号(用于数据推送时匹配),点击确定完成绑定。


image.png

(4)实例创建
进入OneNET物联网开放平台“开发者中心”,选择菜单栏中的【数据流转】下的【资源管理】,点击【HTTP推送实例】,每个实例对应一个HTTP的推送配置。点击【添加实例】,填写实例名称、推送地址、Token等信息,完成实例新增
image.png

(5)实例验证
实例创建成功后,下一步进行实例验证。实例列表页面,点击【验证】,平台服务器会向配置的服务器地址发送HTTP GET请求,进行地址有效性验证,只有验证成功了,平台才会向其推送数据


屏幕截图 2024-05-05 235550.png

(6)观察光照数值变化与LCD模块颜色状态的变化
接下来观察LCD的变化,确保设备在线的情况下,当 NB-IoT 设备上下线、上报新数据时,应用服务器就能够获得这些数据,当数据上报时,程序会解析其中的光照度数据,并且根据预设的阈值,对 LCD 灯进行控制。
-1.室内照明情况下,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色)
-2.用物体遮挡光照传感器模块(约30秒),LCD模块应处于“开启”状态(颜色程序编写的“开”状态颜色)
-3.拿开遮盖物,约30秒后,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色)
(7)同时可在平台上通过查看实例获得推送数据统计,进入【资源管理】下的【HTTP推送实例】,点击【管理】,可查看实例的基本信息、推送数据统计、近一月数据趋势。至此,数据推送完成。
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容