一、项目背景
随着全球经济的快速发展和城市化进程加快,园区建设数量不断增加,园区运营管理面临的节能减排压力也在不断增加。传统的园区节能减排管理方式存在着效率低下、监控数据不准确等问题,无法满足节能减排管理的需求。
为解决这一问题,智能园区节能减排监控系统应运而生。该系统利用物联网、大数据、人工智能等技术手段,实现对园区的能耗、排放等数据进行实时监测、分析和预测,帮助园区管理者及时发现并解决节能减排问题,提高园区运营效率和节能减排水平。
通过智能园区节能减排监控系统项目,可以有效提升园区节能减排管理的科学化、精细化水平,助力园区实现可持续发展目标。
二、项目目标
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.云平台添加设备与资源
3.设备接入平台
4.平台对LED灯控制
LED灯的资源类型为boolean型,该类型的变量只能是True或是False,因此,开灯使用“true”,关 灯使用“false”
5.使用“Token计算器”,生成设备接入的鉴权信息
注意输入时不要有空格,不然会出现错误
6.通过Postman 进行API测试
(1)新建Collection,建立Collection可以方便管理同一个项目中的HTTP请求
(2)新建Request请求,命名为:“即时命令-设备资源列表获取”,并保存在上一步中 的Collection中。
(3)Request请求行配置 请求方法设置为“GET”。 URL主体为“https://iot-api.heclouds.com/nb-iot/resources”;该接口用于获取设备资源列表
(4)Request头部行Headers配置 配置头部Headers,添加头部字段authorization,其值为计算得到的 Token值
(5)读设备资源
Request的请求方式、URL以及首部字段authorization的配置跟之前一样。 URL参数有所变化:action为read,表示读取设备资源;配置设备的IMEI和设备的 obi_id ,其中 obi_id 根据要读取的资源类型来确定。例如根据IPSO 规范,温度传感器 的Object ID为 3303,湿度传感器为 3304,LED灯为3301。这里获取的是LED灯的资源信息,所以URL参数中 obi_id 的值为3301。
(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 时代表关灯。
(7)发送请求并查看响应消息 配置完毕后,点击“Send”按钮发送请求。当请求成功时,Status显示响应码“200 0K’ 服务器会以JSON格式返回响应消息,但是只有当error值为“succ”时才真正代表平台资源列表获取成功。
7.云平台查看命令下发日志
8.使用 HTTP 数据推送自动开关 LED 灯
(1)打开灯光推送应用用户门户,以OneNET注册用户的 用户id 和用户AcessKey 登陆门户地址:http://1.14.71.134:8080/
注意:
1、首次登陆,会提示该用户id未使用记录,需要再次输入相同的用户id和用户AcessKey,登陆即可成功。
(2)需要使用本人在OneNET注册用户的 用户id 和用户AcessKey,如填错,则使用灯光控制功能会因为鉴权错误而功能失败。具体的信息在OneNET官网(用户中心-访问权限页面),用户id为6位数字,AcessKey需点击查看:
(3)绑定NB-IoT设备的IMEI号
进入“我的物联网”-“设备”菜单页面,填写IMEI号(用于数据推送时匹配),点击确定完成绑定。
(4)实例创建
进入OneNET物联网开放平台“开发者中心”,选择菜单栏中的【数据流转】下的【资源管理】,点击【HTTP推送实例】,每个实例对应一个HTTP的推送配置。点击【添加实例】,填写实例名称、推送地址、Token等信息,完成实例新增
(5)实例验证
实例创建成功后,下一步进行实例验证。实例列表页面,点击【验证】,平台服务器会向配置的服务器地址发送HTTP GET请求,进行地址有效性验证,只有验证成功了,平台才会向其推送数据
(6)观察光照数值变化与LCD模块颜色状态的变化
接下来观察LCD的变化,确保设备在线的情况下,当 NB-IoT 设备上下线、上报新数据时,应用服务器就能够获得这些数据,当数据上报时,程序会解析其中的光照度数据,并且根据预设的阈值,对 LCD 灯进行控制。
-1.室内照明情况下,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色)
-2.用物体遮挡光照传感器模块(约30秒),LCD模块应处于“开启”状态(颜色程序编写的“开”状态颜色)
-3.拿开遮盖物,约30秒后,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色)
(7)同时可在平台上通过查看实例获得推送数据统计,进入【资源管理】下的【HTTP推送实例】,点击【管理】,可查看实例的基本信息、推送数据统计、近一月数据趋势。至此,数据推送完成。