温湿度监控系统中添加有关光照的管理

一.项目背景

在现代建筑和办公场所中,人们对室内环境的舒适度和能效要求越来越高。除了温度和湿度外,光照也是影响室内环境质量和人们生活、工作效率的重要因素之一。因此,将光照监测整合到温湿度监控系统中,可以实现对室内环境的全面监测和智能调节,提高室内环境的舒适度和能效。

二.项目目标

1.获取传感器数据:
利用光照传感器(如光敏电阻、光电二极管等)实时测量环境中的光照强度。
温湿度传感器同时采集当前环境的温度和湿度数据。
确保传感器具有高精度和稳定性,以提供可靠的数据。
2.上传云平台:
将采集到的光照强度、温度和湿度数据通过微控制器(如Arduino、STM32等)进行处理。
通过无线通信模块(如Wi-Fi、蓝牙、LoRa、NB-IoT等)将数据发送至云平台。
确保数据传输的安全性和稳定性,可能需要使用加密技术保护数据不被截获。
3.更新云平台数据:
云平台对接收到的数据进行存储和管理,可能包括数据清洗、归一化处理等。
实现数据的历史记录和趋势分析,以便于后续的分析和决策。
定期更新数据,确保信息的时效性。
4.控制LCD显示屏:
在现场安装LCD显示屏或其他类型的显示设备,用于展示实时数据和状态。
根据需要,设计用户界面,使得操作人员能够方便地查看和理解数据。
通过微控制器或云平台远程控制LCD显示屏的内容更新,确保显示信息的准确性和及时性。

三.配置实验

一、配置参数

1. 引导机、接入机配置

char uri[] = "coap://183.230.40.40:5683";   // 引导机服务
char *serv_addr = "183.230.102.118";          // 接入机 IP 地址,暂时无用
  • 定义了一个名为 uri 的字符数组,存储了引导机服务器的地址和端口号。IP 地址为183.230.40.40,端口号为5683的引导机服务器。本实验不做修改。

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.添加“读”和“写”回调函数

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;
        }
    }
 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 == 3311 && instid == 0 && resid == 5850”确定为LCD控制,利用“data->value.as_bool”判断下发指令,决定 LCD 的打开与关闭。
  • 利用“objid && instid && resid ”确定传感器,在温度和湿度的基础上添加光照和LCD的上报。

6.平台上报数据更新

/* 更新光照数值 */
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 ,与此同时同步更新云平台数据。

7.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);
} 

使用AT命令配置模块,发送完后,打印NB-IoT success。

五.接入OneNET云平台

5.1创建产品

  • 创建产品、设备,并填写信息,节点类型选择“直连设备”,接入协议选择“LwM2M”,数据协议选择“IPSO”,联网方式选择“NB”。


    创建设备

5.2添加设备,配置合适的IMEL和IMSEI

注意:烧写代码时,程序IMEL和IMSEI要与平台设备设置参数保持一致。

创建产品

5.3进入设备管理,等待设备在线

设备在线

六.上报数据查看

点击设备管理,选择设备列表,点击详情,打开实时刷新,等待数据的不断更新。

光照强度数据

写入指令truefalse 观察LCD显示屏的现象
LCD状态调节

七.使用数据推送功能自动开关led灯

7.1在OneNET云平台配置参数

1、在OneNET云平台开发者中心,找到数据流转→数据推送中对产品进行设置,添加url和token协议,消息加密方式为明文方式


2、打开产品的生态状态

7.2第三方应用的配置参数

1、打开灯光推送运用用户门户,以OneNET注册用户的 用户id 和用户AcessKey 登陆。

具体的id,AcessKey信息在OneNET官网(用户中心-访问权限页面)



%7B8BAE0D60-F63A-43c4-ACD5-F56E5AABF599%7D.png

注意:第一次登陆用户id无使用记录要进行二次登录,用户id和用户密钥必须要和OneNET云平台的id和AcessKey一致。

2、绑定NB-IoT设备的IMEI号(绑定的IMEI号为项目三设备的IMEI号)

image.png

7.3数据推送

~~~~~观察LCD的显示变化,在确保设备在线的状态下,无论NB-IoT设备是上线、下线还是上报新数据,服务器都能实时接收到这些数据。程序将解析新数据其中的光照值,根据预设的阈值来自动控制LCD灯的开关。

1、监控光照传感器的数值,一旦低于预设的最小阈值,系统将自动调用API来开启LED灯。为了测试这一功能,可以使用物体遮挡光照传感器模块大约30秒,此时LCD模块应该显示为“开启”状态,并且LED灯亮起。
2、当光照传感器的值达到预设的最大阈值时,系统将自动触发API来关闭LED灯。在室内照明环境中,LCD模块应当显示为“关闭”状态,并且LED灯熄灭。

实验总结

1. NB-IoT 设备接入 OneNET 云平台的步骤

注册账号: 在 OneNET 官网注册账号并登录。
创建产品和设备: 在 OneNET 中创建对应的产品和设备,获取产品ID和设备ID。
配置设备参数: 配置 NB-IoT 设备的通信协议、数据格式等参数,确保与 OneNET 云平台的通信兼容。
设备接入: 使用 NB-IoT 模组将设备连接到移动网络,通过设备的 IMEI 码等信息进行注册。
数据传输: 设备通过 NB-IoT 网络将数据传输到 OneNET 平台,可以通过LWM2M等协议进行数据上传。
数据处理和展示: OneNET 平台接收设备上传的数据,可进行数据存储、分析、可视化等操作,方便用户监控和管理设备。

2. 注意事项

设备兼容性: 确保 NB-IoT 设备兼容 OneNET 平台的通信规范和数据格式要求。
安全性: 使用安全的连接方式保护设备和数据的安全。
数据传输稳定性: 确保 NB-IoT 网络连接稳定,数据传输可靠,避免数据丢失或延迟。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容