1.实验背景
智慧城市光照监控系统是智慧城市建设中专门针对城市照明系统而设计的一个智能化管理系统。它通过集成物联网、云计算、大数据、传感器技术等先进的信息技术手段,实现对城市范围内路灯、景观灯等照明设备的实时监控、远程控制、故障报警、数据分析与决策支持等功能。智慧城市光照监控系统的出现便于节约能源、保护环境,在建设美丽中国中有着重大的作用!
2.实验目标
- 提高城市照明的智能化水平
- 实现照明设备的精准控制和高效管理
- 提升城市照明的质量、节能减排
- 优化城市环境
3.实验步骤
实验一 数据上云平台
-
步骤 1 添加传感器资源
1.在项目二智慧城市温湿度监测系统的源代码基础上进行修改,在 main.c 文件中,更改 IMEI 和IMSI 信息,在 OneNET 平台添加设备时,指定了设备的“IMEI;IMSI”,这里,必须在代码中将 IMEI 和 IMSI 改成跟OneNET 平台上的一样。这样,就可以实现真实设备与OneNET 平台上的虚拟设备一对一映射,修改位置如下:
2.在 main.c 文件中添加包含“BH1750.h”和”Lcd_Driver.h”头文件的预处理命令,如下图所示:
#include "BH1750.h" /* 光照传感器 */
#include "Lcd_Driver.h" /* Lcd屏*/
3.在 main.c 文件中增加光照和 LED 的类型结构,并声明外部变量。添加位置和代码如下图所示:
添加的具体代码段如下:
nbiot_value_t illumi; /* 光照 */
nbiot_value_t led; /* led灯*/
extern float result_lx; /* 光照 */
4.) 在 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;
}
}
5.在 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;
}
- 在 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;
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.
", 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.
", ret);
}
-
步骤 2 实验箱模块组装
本实验需要用到核心板、温湿度模块、NB-IoT 模块、光照模块和 LCD 模块,组装如下:
-
步骤 3 编译下载调试
显示“0错74警告”是正常现象。
-
步骤 4 OneNET 物联网开放平台操作
1.编译烧录代码后登录 OneNET 平台,进入【设备管理】,查看设备是否在线。当设备显示在线后,在操作栏选择【详情】,进入【设备资源】
2.在【设备资源】界面,可以查看到温度、湿度、光照、LED 灯等对象名称,点击对应的三角标,可进入对象界面,查看属性值等。
- 在设备资源列表界面,可查看到光照传感器和光照控制的三元组objId/instId/resId 代码;
- 选择 Light Control-0对象,进入详情页面,具体操作界面如下图所示:进入详情页面后可以观察到终端上报平台的状态与上报时间。点击【写】操作按钮,可以对LED 灯进行开关控制。操作界面如下图所示:
- 点击“写”操作按钮后,在弹出的对话框中输入“true”点击确定,就可以打开开发板上的 LED白色背光,输入“false”点击确定,可以关闭 LED,显示黑色背光。操作界面如下图所示:
实验二 平台API调用
-
步骤1 安装“Postman”软件
在网页上搜索“Postman”进行安装
-
步骤2 创建文件
1.安装完成后进行登录注册,随后点击界面左侧“+”号,在出现的下拉栏里选择“Blank collection”创建新文件。
2.点击“Blank collection”后,会出现一个默认名为“New Collection”的文件,可在右侧直接更改命名;亦或是右键单击“New Collection”文件,选择“Rename”进行重命名。
3.创建文件完成后,点击“Add a request”添加“GET”请求。
-
步骤3 编写调试命令
1.登录打开 OneNET 平台,点击“文档”,点击“ OneNET物联网开放平台 ”,这里面有详细的API调试步骤。
2.进入“ OneNET物联网开放平台 ”后,在左侧菜单栏找到“平台API”,下拉选择“接口详情”,在里面找到“命令下发”。
3.在“命令下发”下找到“LwM2M-即时命令”,选择“读设备资源”并打开。打开后可以看到有接口地址、API说明以及各类参数名称。
4.打开“Postman”软件,选择请求方式为“GET”,将“接口地址https://iot-api.heclouds.com/nb-iot”复制到请求处,填写“imei”和“obj_id”参数。
注:value值均可在OneNET云平台上找到
5.“Params”处填写完后,点击“Headers”进行填写,在Key处添加一个“Authorization”;“value”值需要打开“Token计算器”进行转换。
“Token计算器”所在位置:
- 打开“Token计算器”后,需要修改res、et、Key和version。、
注:
- 355111为OneNET云平台的用户ID,可以在云平台上查找,登录云平台后点击右上角,找到“账号信息”,点击“访问权限”,在此界面就可以看到自己的用户ID以及密钥。
- 时间戳:在浏览器搜索“时间戳”进行转换,时间要是未来的某一个时间
-
version:时间设置为2022-05-01
6.填写完后点击“Send”保存。在未连接设备时,点击“Send”会出现“device not online”。
-
步骤4 创建LwM2M-缓存命令
创建步骤如上,分别创建LwM2M-缓存命令的POST请求和GET请求,创建完后点击“Send”保存。
注:
POST请求中,需要在“Headers”处多添加一个Key“Content -Type”,如图所示:
实验三 使用 HTTP 数据推送自动开关 LED灯
-
步骤1 打开灯光推送应用用户门户
以OneNET注册用户的 用户id 和用户AcessKey 登陆,门户地址如下:
门户地址
注意:
1、首次登陆,会提示该用户id未使用记录,需要再次输入相同的用户id和用户AcessKey,登陆即可
成功。
2、需要使用本人在OneNET注册用户的 用户id 和用户AcessKey,如填错,则使用灯光控制功能会
因为鉴权错误而功能失败。具体的信息在OneNET官网(用户中心-访问权限页面),用户id为6位数字,AcessKey需点击查看:
-
步骤2 绑定NB-IoT设备的IMEI号
进入“我的物联网”-“设备”菜单页面,填写IMEI号(用于数据推送时匹配),点击确定完成绑
定。
注意:IMEI号需要正确填写在OneNET官网上创建的LwM2M设备IMEI号
-
步骤3 实例创建
进入OneNET物联网开放平台“开发者中心”,选择菜单栏中的数据流转下的资源管理,点击HTTP推送实例,每个实例对应一个HTTP的推送配置。点击添加实例。
具体的配置如下:
-
实例名称:自己取一个合理的名称。
-
推送地址url:http://1.14.71.134:8080/receive ,注意 URL 后面必须包含 /receive,
-
Token:填入“111”。
-
消息加密方式:选择“明文模式”,不进行消息加密。
-
步骤4 实例验证
实例创建成功后,下一步进行实例验证。在实例列表页面,点击验证。
-
步骤5 规则引擎配置
进入OneNET物联网开放平台“开发者中心”,选择菜单栏中的数据流转下的规则引擎,点击直接添加规则。
具体的配置如下:
- 规则名称:LED远程控制
- 产品筛选:选择指定产品,后面一栏是在云平台所创设备中选
- 消息源:默认选择设备数据点消息
- 转发方式:选择HTTP推送
- 使用资源:默认选择刚刚创建的实例
配置完成后,启动该规则引擎。
-
步骤6 观察光照数值变化与LCD模块颜色状态的变化
接下来观察LCD的变化,确保设备在线的情况下,当 NB-IoT 设备上下线、上报新数据时,应用服务器就能够获得这些数据,当数据上报时,程序会解析其中的光照度数据,并且根据预设的阈值,对 LCD 灯进行控制。
1、室内照明情况下,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色),如下图:
2、用物体遮挡光照传感器模块(约30秒),LCD模块应处于“开启”状态(颜色程序编写的“开”
状态颜色),如下图:
3、拿开遮盖物,约30秒后,LCD模块应处于“关闭”状态(颜色程序编写的“关”状态颜色)。
4、同时可在平台上通过查看实例获得推送数据统计,进入资源管理下的HTTP推送实例,点击管理,可查看实例的基本信息、推送数据统计、近一月数据趋势。至此,数据推送完成