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

随笔6个月前发布 顾若如烟
74 0 0

一.项目背景

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

二.项目目标

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

  • 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
", "OK", 5000,0,10); //重启模块
  SendCmd("AT+CIMI
", "OK", 2000,3,5); //查询SIM卡IMSI号
  SendCmd("AT+CMEE=1
","OK", 2000,0,10); //设置报错格式为数值
  SendCmd("AT+CSCON=1
","OK", 2000,0,10);  //设置完全上下文连接
  SendCmd("AT+CEREG=2
","OK", 2000,0,10); 
  SendCmd("AT+CEDRXS=0,5
","OK", 3000,0,5); 
  SendCmd("AT+CPSMS=0
","OK", 3000,0,5); 
  SendCmd("AT+CEREG?
","CEREG:2,1", 3000,1000,5); 
  SendCmd("AT+csq
", "OK", 2000,0,5); 
  printf("connect NB-IoT sucess
");
  NB_step(3,1);
} 

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

五.接入OneNET云平台

5.1创建产品

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

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

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

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

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

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

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

六.上报数据查看

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

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

写入指令truefalse 观察LCD显示屏的现象

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

实验总结

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 网络连接稳定,数据传输可靠,避免数据丢失或延迟。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...