智慧园区能源管控系统
1.实验目的
1.1采集温度、湿度、光照值,并上传OneNET平台
1.2实现公共区域照明系统的灯光自动控制。当光照充足的时候,灯光熄灭。光照暗时,照明灯亮起。
(LED灯模拟照明灯,通过HTTP数据推送将光照值推送给应用程序,由应用程序控制LED开关)
2.实验步骤
2.1代码更改
在程序中设置接入机的地址和鉴权信息(即IMEI和IMSI)
char uri[] = "coap://183.230.102.118:5683"; // 引导机服务
char *serv_addr = "183.230.102.118"; // 接入机 IP 地址,暂时无用
const char endpoint_name[] = "318790567959252;318790567959252"; //IMEI;IMSI
向SDK添加外围硬件驱动,本项目Demo中已经做好LED和光照传感器驱动程序
#include "BH1750.h" /* 光照传感器 */
#include "Lcd_Driver.h" /* lcd屏 */
nbiot_value_t illumi; /* 光照 */
nbiot_value_t led; /* led灯*/
extern float result_lx; /*光照*/
光照传感器的对象ID:3301
灯光控制的对象ID:3311
写回调函数
// "写"回调函数
void write_callback(
uint16_t objid,
uint16_t instid,
uint16_t resid,
nbiot_value_t *data)
{
printf("write /%d/%d/%d:%d\r\n",
objid,
instid,
resid, data->value.as_bool);
if (objid == 3311 && instid == 0 && resid == 5850)
{
if(data->value.as_bool)
{
Lcd_Clear(WHITE);
ledStatus.Led1Sta=1;
}else
{
Lcd_Clear(BLACK);
ledStatus.Led1Sta=0;
}
}
}
读回调函数
// "读"回调函数
void read_callback(
uint16_t objid,
uint16_t instid,
uint16_t resid,
nbiot_value_t *data)
{ if (objid == 3301 && instid == 0 && resid == 5700) { /* 光照 */
BH1750_test();
illumi.value.as_float=result_lx;
} else 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;
}
}
添加温湿度,光照资源
// 添加温度资源
temp.type = NBIOT_FLOAT;
temp.flag = NBIOT_READABLE;
ret = nbiot_resource_add(dev,
3303, /* objId */
0, /* instId */
5700, /* resId */
&temp);
if (ret)
{
nbiot_device_destroy(dev);
printf("device add resource(temp) failed, code = %d.\r\n", ret);
}
// 添加湿度资源
humi.type = NBIOT_FLOAT;
humi.flag = NBIOT_READABLE;
ret = nbiot_resource_add(dev,
3304,
0,
5700,
&humi);
if (ret)
{
nbiot_device_destroy(dev);
printf("device add resource(humi) failed, code = %d.\r\n", ret);
}
// 添加光照资源
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);
}
温湿度资源更新
// 更新资源
void res_update(time_t interval)
{
SHT20_INFO sht20;
if (cur_time >= last_time + interval) {
cur_time = 0;
last_time = 0;
/* 更新温湿度数值 */
temp.flag |= NBIOT_UPDATED;
humi.flag |= NBIOT_UPDATED;
sht20 = SHT20_GetValue();
temp.value.as_float = sht20.tempreture;
humi.value.as_float = sht20.humidity;
} else if (cur_time == 0 && last_time == 0) {
cur_time = nbiot_time();
last_time = cur_time;
} else {
cur_time = nbiot_time();
}
}
int main(int argc, char *argv[])
{
int life_time = 300;
int ret;
2.2平台控制
2.3Postman
LCD屏现象
实验总结
通过此次项目的实施,能够实现对园区内的温湿度实时检测
认知了南向通信协议和北调API
熟悉了北调API
在这次项目中更熟悉了postman的用法
了解到了通过数据推送的方式控制LCD屏幕