添加对于光照的管理
项目背景
监控系统开发的意义
- 综合性环境管理趋势:随着智能化和自动化技术的发展,越来越多的系统趋向于集成多种环境参数的监测与管理,以实现更高效、更智能的环境管理。因此,将光照度管理纳入温湿度监控系统是符合这一趋势的自然选择。
- 提升环境管理的综合性能力:通过在温湿度监控系统中添加对光的管理,可以实现对环境的综合性监测与调控,从而更好地满足不同场景下的环境需求。
+将光照度管理纳入温湿度监控系统是有重要意义,有助于提升智慧城市环境管理的综合性能力,保障城市光环境的健康与质量,以及提升系统的智能化水平。
配置实验
一、配置参数
1. 引导机、接入机配置
char uri[] = "coap://183.230.40.40:5683"; // 引导机服务 char *serv_addr = "183.230.102.118"; // 接入机 IP 地址,暂时无用
- 定义了一个名为 uri 的字符数组,存储了引导机服务器的地址和端口号。使用 coap 协议接入了IP 地址为>183.230.40.40,端口号为5683的引导机服务器。本实验不做修改。
- 定义了一个字符型指针 serv_addr,存储了接入机IP地址,但是本实验暂时无用,不做修改。
2. Life Time
int life_time = 300;
- 定义了一个整数型变量 life_time,用来保存NB-IoT的心跳时间,用来调整设备发送信号的频率。本实验设置心跳时间为30S。
注释:以上内容不需要修改,引用上次实验报告相关部分。
3. IMEI;IMSI
const char endpoint_name[] = "484263357050730;484263357050730"; // IMEI;IMSI
- 声明了一个名为 endpoint_name 的字符数组常量,用于存储了设备的标识。即:IMEI(国际移动设备身份码)和 IMSI(国际移动用户识别码)
- 这里的IMEI需要再次更改,以保障其合法性(每一个IMEI只能对应一个项目,每个需要用到 IMEI。
注释:IMEI为保证合法性由“NB-IMEI生成器.exe”自动生成。
二、添加程序
4. 相关头文件添加
#include "BH1750.h" /* 光照传感器 */
#include "Lcd_Driver.h" /* LCD屏幕 */
- 添加头文件“BH1750.h”用于调用BH1750光照传感器模块的驱动程序。
- 添加头文件“Lcd_Driver.h”用于调用LCD显示屏模块的驱动程序。
- 这两个头文件的添加,增加了相关外设的一些函数和常量,以便在后续的代码中使用相关的驱动函数。
5. 类型结构添加
nbiot_value_t illumi; /* 光照传感器*/
nbiot_value_t led; /* LCD屏幕 */
extern float result_lx; /* 光照强度*/
- 增加光照和 LCD 的类型结构,并声明外部变量result_lx,用于后续云平台部分。
6.添加“写”回调函数
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;
}
}
- 利用“objid == 3311 && instid == 0 && resid == 5850”确定为LCD控制,利用“data->value.as_bool”判断平台下发指令,决定 LCD 打开与关闭。
7.添加“读”回调函数
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;
}
- 利用“objid && instid && resid ”确定外设,在温度和湿度的基础上添加光照和LCD的上报。
8.平台上报数据更新
/* 更新光照数值 */
illumi.flag |= NBIOT_UPDATED;
BH1750_test();
illumi.value.as_float = result_lx;
/* 更新 LED 数值*/
led.flag |= NBIOT_UPDATED;
led.value.as_bool = ledStatus.Led1Sta;
- 调用了一个函数 BH1750_test(),用来获取BH1750 光照传感器的数据,获取当前的光照数值。并赋值给illumi.value.as_float ,更新云平台数据。
- 使用了一个变量 ledStatus.Led1Sta,用来获取LCD屏幕状态,并赋值给led.value.as_bool ,更新云平台数据。
9.main函数修改
// 添加光照资源
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);
}
- illumi.type,led.type 两个参数分别设置了光照传感器、LCD的数据类型,分辨为浮点型和布尔型。
- illumi.flag ,led.flag更改了光照传感器和LCD的标志位,分辨设置为只读,可读可写。
- 调用函数nbiot_resource_add() 来添加光照传感器、LCD的资源。、
- if (ret) 条件语句,如果添加资源失败,则会执行其中的代码,用来销毁设备并输出错误信息。
三、NB_IOT入网
void netdev_init(void)
{
SendCmd("AT+NRB\r\n", "OK", 5000,0,10); //重启模块
SendCmd("AT+CIMI\r\n", "OK", 2000,3,5); //查询SIM卡IMSI号
SendCmd("AT+CMEE=1\r\n","OK", 2000,0,10); //设置报错格式为数值
SendCmd("AT+CSCON=1\r\n","OK", 2000,0,10); //设置完全上下文连接
SendCmd("AT+CEREG=2\r\n","OK", 2000,0,10);
SendCmd("AT+CEDRXS=0,5\r\n","OK", 3000,0,5);
SendCmd("AT+CPSMS=0\r\n","OK", 3000,0,5);
SendCmd("AT+CEREG?\r\n","CEREG:2,1", 3000,1000,5);
SendCmd("AT+csq\r\n", "OK", 2000,0,5);
printf("connect NB-IoT sucess\r\n");
NB_step(3,1);
}
使用以上函数进行初始化 NB-IoT 模块,使用AT命令配置模块。
三.接入OneNET云平台
3.1创建产品
-
创建产品、设备,并填写信息,节点类型选择“直连设备”,接入协议选择“LwM2M”,数据协议选择“IPSO”,联网方式选择“NB”。
创建设备
3.2添加设备,配置合适的IMEL和IMSEI
注意:烧写代码时,程序IMEL和IMSEI要与平台设备设置参数保持一致。
3.3进入设备管理,等待设备在线
四.上报数据查看
点击设备管理,选择设备列表,点击详情,打开实时刷新,等待数据的不断更新。
实验总结
1. NB-IoT 设备接入 OneNET 云平台的步骤
2. 注意事项
设备兼容性: 确保 NB-IoT 设备兼容 OneNET 平台的通信规范和数据格式要求。
安全性: 使用安全的连接方式保护设备和数据的安全。
数据传输稳定性: 确保 NB-IoT 网络连接稳定,数据传输可靠,避免数据丢失或延迟。
通过API连接平台实验
一、Get与Post的简单理解
- get是从服务器上获取数据,post是向服务器传送数据
-
get安全性非常低,post安全性较高
Get与Post的区别
二、工具安装postman
下载并安装PostMan,请访问PostMan的官方下载网址:
https://www.getpostman.com/downloads/
三、实验过程
1.使用GET实时下发Read命令到设备
1)接口使用
选择 文档->接口详情->命令下发->LwM2M即时命令->读设备资源,查看接口地址。
2)更改请求参数
查看文档后,编辑Params中参数,添加“imei”、“obj_id”,即设备imei、设备ID。
3)更改Headers
添加Authorization,计算token并填入。
- res:“userid/用户ID”
- et:截止时间时间戳
- key:用户Accesskey
4)发送请求,查看返回值 - 点击send,发送“https://iot-api.heclouds.com/nb-iot?imei=211070748751946&obj_id=3301”
- 返回:
{
"code": 10421,
"msg": "device not online",
"request_id": "3e620d88d9ca62bdbac145f27fd86174"
}
2.使用GET下发缓存Read命令到设备
1)接口使用
选择 文档->接口详情->命令下发->LwM2M缓存命令->读设备资源,查看接口地址。
2)更改请求参数
查看文档后,编辑Params中参数,添加“imei”、“obj_id”,即设备imei、资源标识。与上一个读不同的是,本次多了一个必填项:expired_time,即命令过期时间(必须大于发送时间)。
3)更改Headers
添加Authorization,计算token并填入。与上一个相同。
4)发送请求,查看返回值
- 点击send,发送“https://iot-api.heclouds.com/nb-iot/offline?imei=211070748751946&obj_id=3301&expired_time=2024-05-16T09:00:00”
- 返回:
{
"code": 0,
"msg": "succ",
"data": {
"uuid": "37af4aea-7fa7-5c2c-926f-7bf36c6b5817"
},
"request_id": "55f2d4a596f54309bebb7dc2bc764964"
}
3.使用POST实时下发Write命令到设备
1)接口使用
选择 文档->接口详情->命令下发->LwM2M缓存命令->缓存命令下发,查看接口地址。
2)更改请求参数
查看文档后,编辑Params中参数,添加“imei”、“obj_id”,即设备imei、资源标识。本次测试需要添加“obj_inst_id”、“mode”,即实例ID、write模式(这里为1)。
3)更改Headers
添加Authorization,计算token并填入。与之前不同的是需要添加一个“Content-Type”标明其内容类型这里为json,填入“application/json”。
4)编辑body
在body中选择json,填入json命令内容。
{
"data": [
{
"res_id": 5850,
"val": 1
}
]
}
5)发送请求,查看返回值
- 点击send,发送“https://iot-api.heclouds.com/nb-iot?imei=211070748751946&obj_id=3311&obj_inst_id=0&mode=1”
- 返回:
{
"code": 10421,
"msg": "device not online",
"request_id": "2ce00f1c3ecc29c8c51ce487b1d630ed"
}
四、连接服务器实现自动控制
登录到平台后,“开发者中心->数据流转->数据推送->选择相应产品->进行设置”,配置服务器、token、明文模式。