温湿度监控系统中添加对于光照的管理

添加对于光照的管理


项目背景

监控系统开发的意义

  • 综合性环境管理趋势:随着智能化和自动化技术的发展,越来越多的系统趋向于集成多种环境参数的监测与管理,以实现更高效、更智能的环境管理。因此,将光照度管理纳入温湿度监控系统是符合这一趋势的自然选择。
  • 提升环境管理的综合性能力:通过在温湿度监控系统中添加对光的管理,可以实现对环境的综合性监测与调控,从而更好地满足不同场景下的环境需求。
    +将光照度管理纳入温湿度监控系统是有重要意义,有助于提升智慧城市环境管理的综合性能力,保障城市光环境的健康与质量,以及提升系统的智能化水平。

配置实验

一、配置参数

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进入设备管理,等待设备在线

设备在线

四.上报数据查看

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


光照强度数据
LCD状态调节

实验总结

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并填入。


token计算
{
    "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)发送请求,查看返回值

{
    "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)发送请求,查看返回值

{
    "code": 10421,
    "msg": "device not online",
    "request_id": "2ce00f1c3ecc29c8c51ce487b1d630ed"
}

四、连接服务器实现自动控制

登录到平台后,“开发者中心->数据流转->数据推送->选择相应产品->进行设置”,配置服务器、token、明文模式。


配置成功
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容