1膜毁、實驗背景
隨著城市的快速發(fā)展和城市化進程的加快,伴隨而來的環(huán)境窥浪、社會镊逝、交通問題也日益嚴重物臂。利用先進的信息技術構(gòu)建智慧城市成為解決城市問題的重要途徑旺拉。作為智慧城市重要的組成部分,智慧園區(qū)的建設尤為重要。
2棵磷、實驗目標
1.采集溫度蛾狗、濕度、光照仪媒、氣壓值沉桌,并由OneNET平臺訂閱;
2.光照高于設定值算吩,LED燈亮留凭;光照低于設定值,LED燈滅
3.輕應用展示溫度偎巢、濕度蔼夜、光照、氣壓值压昼。
4.可視化展示溫度挎扰、濕度、光照巢音、氣壓值遵倦。
3、實驗步驟
3.1平臺控制
添加新的對象
nbiot_value_t press; /* 氣壓*/
nbiot_value_t led; /* LED燈*/
extern float result_lx;
extern _bmp180 bmp180;
編寫寫回調(diào)函數(shù)
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))
{
Led1_Set(data->value.as_bool);
}
}
編寫讀回調(diào)函數(shù)
void read_callback(
uint16_t objid,
uint16_t instid,
uint16_t resid,
nbiot_value_t *data)
{
if (objid == 3303 && instid == 0 && resid == 5700) {
SHT20_INFO sht20 = { 0 };
sht20 = SHT20_GetValue();
temp.value.as_float = (int64_t)sht20.tempreture;
} else if (objid == 3304 && instid == 0 && resid == 5700) {
SHT20_INFO sht20 = { 0 };
sht20 = SHT20_GetValue();
humi.value.as_float = (int64_t)sht20.humidity;
} else if (objid == 3301 && instid == 0 && resid == 5700) {
BH1750_test();
illumi.value.as_float=result_lx;
} else if (objid == 3323 && instid == 0 && resid == 5700) {
BMP180_test();
press.value.as_float=bmp180.p;
}
}
添加資源
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 = ((float)((int)((sht20.tempreture + 0.05) * 100)) / 100);
humi.value.as_float = sht20.humidity;
illumi.flag|=NBIOT_UPDATED;
BH1750_test();
illumi.value.as_float=result_lx;
press.flag|=NBIOT_UPDATED;
BMP180_test();
press.value.as_float=bmp180.p;
led.flag|=NBIOT_UPDATED;
led.value.as_bool=ledStatus.Led1Sta;
} else if (cur_time == 0 && last_time == 0) {
cur_time = nbiot_time();
last_time = cur_time;
} else {
cur_time = nbiot_time();
}
}
// 添加光照資源
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);
}
// 添加氣壓資源
press.type = NBIOT_FLOAT;
press.flag = NBIOT_READABLE;
ret = nbiot_resource_add(dev,
3323, /* objId */
0, /* instId */
5700, /* resId */
&press);
if (ret)
{
nbiot_device_destroy(dev);
printf("device add resource(press) failed, code = %d.\r\n", ret);
}
// 添加led燈資源
led.type = NBIOT_BOOLEAN;
led.flag = NBIOT_READABLE|NBIOT_WRITABLE;
ret = nbiot_resource_add(dev,
3311, /* objId */
0, /* instId */
5850, /* resId */
&led);
if (ret)
{
nbiot_device_destroy(dev);
printf("device add resource(led) failed, code = %d.\r\n", ret);
}
代碼編寫完之后官撼,終端固件燒寫運行梧躺。
進入OneNET平臺,設備上線后可以看到已經(jīng)有五個資源
打開Light Control資源,通過寫的操作掠哥,輸入true巩踏,LED燈亮著
3.2光照值控制
為設備添加觸發(fā)器
在光照值高于60時Led燈滅
在光照值低于50時亮燈
3.3Postman控制
調(diào)用API返回溫度值和資源ID
image
返回值
{
"errno": 0,
"data": {
"count": 5,
"datastreams": [
{
"datapoints": [
{
"at": "2021-06-08 16:16:38.236",
"value": 30.870001
}
],
"id": "3303_0_5700"
},
{
"datapoints": [
{
"at": "2021-06-08 16:16:38.236",
"value": 57.674973
}
],
"id": "3304_0_5700"
},
{
"datapoints": [
{
"at": "2021-06-08 16:16:38.026",
"value": 121.666664
}
],
"id": "3301_0_5700"
},
{
"datapoints": [
{
"at": "2021-06-08 16:16:38.555",
"value": 98022
}
],
"id": "3323_0_5700"
},
{
"datapoints": [
{
"at": "2021-06-08 16:16:38.252",
"value": false
}
],
"id": "3311_0_5850"
}
]
},
"error": "succ"
}
使用Postman發(fā)送請求,向終端設備寫入資源
資源參數(shù)
image
image
寫入(其中輸入1续搀,表示亮燈塞琼,0表示關燈)
image
3.4輕應用
1.png
4、總結(jié)
本次實驗步驟比較繁瑣但是比較簡單禁舷,需要耐心彪杉。遇到問題時要多與同學討論!