一、项目背景
智慧城市园区节能减排监控系统的项目背景是在城市化进程加快、能源消耗增加及环境污染问题日益凸显的背景下,为实现城市可持续发展和节能减排目标,建立智慧城市园区节能减排监控系统成为当务之急。通过该系统,可以实时监测园区内各类能源消耗情况,优化能源利用结构,提高资源利用效率,推动园区节能减排工作,并为构建智慧城市、打造宜居环保的城市生态环境提供有力支撑。
二、项目目标
为了监控和管理环境中的温度、湿度、光照以及LCD等关键指标,我们实施基于多种物联网监控设备和云服务平台的解决方案。这些设备不仅能够实时监测环境的温湿度数据,而且还支持远程手动操作。系统能够不断地追踪记录城市不同地区的温度、湿度和光照数据,并迅速将这些数据传送到控制中心。通过应用大数据分析,可以制作出环境热力图、湿度分布图等图表,以提供更全面的环境状况视图。此外,系统还能对环境数据进行预测和分析,帮助我们提前做好准备,应对环境中的变化。
在OneNET物联网开放平台上成功接入NB设备后,可以实现与平台第三方应用的数据交互,从而在应用服务界面上获取NB设备的全部数据。在应用程序中,一旦监测到光照传感器的读数超出预设的最大阈值,系统将自动通过API关闭灯光;相反,如果读数降至预设的最小阈值以下,系统将自动通过API开启LED灯,以达到节能效果。
实训项目的目标包括:
- 熟练掌握IPSO规范。
- 学习如何新增传感器资源并上报数据。
- 学习如何响应平台下发的指令。
- 学习如何利用数据推送功能实现自动开关LED灯。
三、系统环境的搭建
3.1参数配置
3.1.1OneNET云平台创建产品设备
1、注册登录云平台,创建产品
2、在创建的产品中添加设备
3.1.2硬件的搭建
1、设备通电,连接电脑
2、本实验要用到核心板、温湿度模块、NB-IoT 模块、光照模块和 LCD 模块
3.1.3IMEI、IMSI生成及使用
1、用NB-IMEI生成器随机生成两个IMEI号并同步写入代码及生成的产品中
2、在代码中更改IMEI号和IMSI号,与产品设备IMEI号、IMSI号保持一致
3.1.4代码添加
1、在 main.c 文件中添加包含“BH1750.h”和"Lcd_Driver.h"头文件的预处理命令
添加以下代码:
#include "BH1750.h" /* 光照传感器 */
#include "Lcd_Driver.h" /*LCD屏*/
2、在 main.c 文件中增加光照和 LED 的类型结构,并声明外部变量。添加位置和代码如下图所示:
添加以下代码:
nbiot_value_t illumi; /* 光照 */
nbiot_value_t led; /* LED灯 */
extern float result_lx;/*光照*/
3、在 main.c 文件的主函数中,在“写”回调函数添加 LED 灯模拟打开、关闭的代码。
添加以下代码:
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;
}
}
4、在 main.c 文件的主函数中,在“读”回调函数添加光照和 LED 灯的控制代码,当从平台接收到控制写入命令时,响应控制。
添加以下代码:
} 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;
5、在 main.c 文件中修改网络配置,修改引导机服务地址,更改 IMEI 和IMSI 信息。
具体添加位置如下图所示:
添加以下代码:
char uri[] = "coap://183.230.40.40:5683"; // 引导机服务
char *serv_addr = "183.230.102.118"; // 接入机 IP 地址,暂时无用
const char endpoint_name[] = "739401181512136;848055479124166"; // IMEI;IMSI
代码中的 IMEI 和 IMSI 需保持跟OneNET 平台上的一样。
6、在 main.c 文件里增加光照值、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、在 main.c 文件里增加光照、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);
}
3.2接入OneNET平台
1、烧写代码,打开串口调试助手,查看数据
2、OneNET 云平台设备上线
3、在资源列表界面,可以看到温度、湿度、光照、LED 灯,还可以查看属性值等。
4、在设备资源列表中可查看到光照传感器和光照控制的代码
3.3 周期上报数据
3.3.1温度数据
3.3.2湿度数据
3.3.3光照数据
3.3.4LCD数据
1、在 Light Control 对象的详情页面中,可以观察到终端上报平台的状态以及上报时间。通过简单点击操作界面上的【写】按钮,可以控制 LED 灯的开关状态。
点击“写”操作按钮后,在弹出的对话框中输入“true”点击确定,就可以打开开发板上的 LED白色背光
输入“false”点击确定,可以关闭 LED,显示黑色背光
3.4用Postman写/读命令
1、 LWM2M即时命令-写设备资源
2、LWM2M即时命令-读设备资源
3、 LWM2M缓存命令-读设备资源
3.5使用数据推送功能自动开关led灯
3.5.1在OneNET云平台配置参数
1、在OneNET云平台开发者中心,找到数据流转→数据推送中对产品进行设置,添加url和token协议,消息加密方式为明文方式
2、打开产品的生态状态
3.5.2第三方应用的配置参数
1、打开灯光推送运用用户门户,以OneNET注册用户的 用户id 和用户AcessKey 登陆。
具体的id,AcessKey信息在OneNET官网(用户中心-访问权限页面)
注:首次登陆用户id无使用记录需进行二次登录,用户id和用户密钥必须要和OneNET云平台的id和AcessKey一致。
2、绑定NB-IoT设备的IMEI号(绑定的IMEI号为项目三设备的IMEI号)
3.5.3数据推送
观察LCD的显示变化,在确保设备在线的状态下,无论NB-IoT设备是上线、下线还是上报新数据,服务器都能实时接收到这些数据。程序将解析新数据其中的光照值,根据预设的阈值来自动控制LCD灯的开关。
1、监控光照传感器的数值,一旦低于预设的最小阈值,系统将自动调用API来开启LED灯。为了测试这一功能,可以使用物体遮挡光照传感器模块大约30秒,此时LCD模块应该显示为“开启”状态,并且LED灯亮起。
2、当光照传感器的值达到预设的最大阈值时,系统将自动触发API来关闭LED灯。在室内照明环境中,LCD模块应当显示为“关闭”状态,并且LED灯熄灭。
4. 总结
在这次学习旅程中,我精通了运用ONE Net云平台对温湿度环境进行细致监控的技巧。通过亲身实践,我掌握了如何将温湿度感知设备顺畅地连接到云平台,以实现无缝的数据收集和实时分析。
实践环节中,我熟练掌握了如何调整监控参数、构建高效的监控任务,并能够实时追踪和查看数据变动。除此之外,我还学会了如何利用云平台提供的高级数据分析工具,对收集到的温湿度数据进行深度挖掘,从而更准确地洞察环境变化的趋势和规律。
我对IPSO标准有了深入的理解,并能够独立新增传感器资源、上传数据,同时响应云平台发出的各项指令。
后期也完成了与云平台第三方应用的数据推送功能,使得应用服务界面能够获取NB设备的完整数据。在应用程序中,我实现了对光照传感器值的监控,当这些值超过预设的最大阈值时,系统会自动通过API指令关闭灯光;反之,如果值降至预设的最小阈值以下,系统则会自动通过API指令开启LED灯,以此来达到节能的目的。
这次学习不仅极大丰富了我对温湿度监控技术的理解,更锻炼了我的实际操作能力。我相信,这些新获得的知识和技能将在我的职业生涯中发挥关键作用,助力我应对未来各种工作挑战。