項(xiàng)目三 智能園區(qū)節(jié)能減排監(jiān)控系統(tǒng)

一、項(xiàng)目背景

隨著全球經(jīng)濟(jì)的快速發(fā)展和城市化進(jìn)程加快,園區(qū)建設(shè)數(shù)量不斷增加,園區(qū)運(yùn)營(yíng)管理面臨的節(jié)能減排壓力也在不斷增加。傳統(tǒng)的園區(qū)節(jié)能減排管理方式存在著效率低下、監(jiān)控?cái)?shù)據(jù)不準(zhǔn)確等問(wèn)題,無(wú)法滿足節(jié)能減排管理的需求。
為解決這一問(wèn)題,智能園區(qū)節(jié)能減排監(jiān)控系統(tǒng)應(yīng)運(yùn)而生。該系統(tǒng)利用物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等技術(shù)手段,實(shí)現(xiàn)對(duì)園區(qū)的能耗、排放等數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)測(cè)、分析和預(yù)測(cè),幫助園區(qū)管理者及時(shí)發(fā)現(xiàn)并解決節(jié)能減排問(wèn)題,提高園區(qū)運(yùn)營(yíng)效率和節(jié)能減排水平。
通過(guò)智能園區(qū)節(jié)能減排監(jiān)控系統(tǒng)項(xiàng)目,可以有效提升園區(qū)節(jié)能減排管理的科學(xué)化、精細(xì)化水平,助力園區(qū)實(shí)現(xiàn)可持續(xù)發(fā)展目標(biāo)。

二、項(xiàng)目目標(biāo)

1.采集溫度、濕度、光照值,并上傳OneNET平臺(tái)
2.實(shí)現(xiàn)公共區(qū)域照明系統(tǒng)的燈光自動(dòng)控制,當(dāng)光照充足時(shí),照明燈熄滅,光照較暗時(shí),照 明燈開(kāi)啟。(LED模擬照明燈,通過(guò)HTTP數(shù)據(jù)推送將光照值推送給應(yīng)用程序,由應(yīng)用程序 調(diào)用API控制LED開(kāi)關(guān))

三、實(shí)驗(yàn)步驟

1.添加代碼

(1)增加光照模塊和LED模塊的頭文件

#include "BH1750.h"  /* 光照傳感器 */
#include "Lcd_Driver.h"/*lcd屏*/

(2)聲明變量

nbiot_value_t illumi;   /*光照*/
nbiot_value_t led;     /*LED燈*/
extern float result_lx;/*光照*/

(3)編寫(xiě)“讀”回調(diào)函數(shù),平臺(tái)發(fā)送讀取資源命令時(shí)進(jìn)行響應(yīng)

        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 = 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;
    }
}

(4)編寫(xiě)“寫(xiě)”回調(diào)函數(shù),實(shí)現(xiàn)對(duì)平臺(tái)發(fā)送的LED燈控制命令的響應(yīng)

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)/*LED燈*/
    {
        if(data->value.as_bool)
        {
            //打開(kāi)白色背景光以模擬LED燈開(kāi)
            Lcd_Clear(WHITE);
            ledStatus.Led1Sta=1;
        }
        else
        {
            //打開(kāi)黑色背景光以模擬LED燈關(guān)
                Lcd_Clear(BLACK);
            ledStatus.Led1Sta=0;
        }
    }
}

(5)修改網(wǎng)絡(luò)配置,修改引導(dǎo)機(jī)服務(wù)地址,”,這里,必須在代碼中將 IMEI 和 IMSI 改
成跟OneNET 平臺(tái)上的一樣。這樣,就可以實(shí)現(xiàn)真實(shí)設(shè)備與OneNET 平臺(tái)上的虛擬設(shè)備一對(duì)一映射

char uri[] = "coap://183.230.40.40:5683";   // 引導(dǎo)機(jī)服務(wù)
char *serv_addr = "183.230.102.118";          // 接入機(jī) IP 地址
const char endpoint_name[] = "282221995033272;888";     // IMEI;IMSI

(6)增加光照值、LED 數(shù)值的讀取更新

    /* 更新光照數(shù)值 */
                illumi.flag |= NBIOT_UPDATED;
                BH1750_test();
                illumi.value.as_float = result_lx;
            
                /* 更新 LED 數(shù)值*/
                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();
    }
}

(7)增加光照、LED 資源

// 添加光照資源
        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);
        }

2.云平臺(tái)添加設(shè)備與資源

image.png

3.設(shè)備接入平臺(tái)

屏幕截圖 2024-05-05 225125.png

4.平臺(tái)對(duì)LED燈控制

LED燈的資源類(lèi)型為boolean型,該類(lèi)型的變量只能是True或是False,因此,開(kāi)燈使用“true”,關(guān) 燈使用“false”


屏幕截圖 2024-05-05 225717.png

5.使用“Token計(jì)算器”,生成設(shè)備接入的鑒權(quán)信息

注意輸入時(shí)不要有空格,不然會(huì)出現(xiàn)錯(cuò)誤


9860a5fc60fccbb0fa0d2ecd408c17e2.png

6.通過(guò)Postman 進(jìn)行API測(cè)試

(1)新建Collection,建立Collection可以方便管理同一個(gè)項(xiàng)目中的HTTP請(qǐng)求

74fff9b6e83874b639704037f5aea10b.png

(2)新建Request請(qǐng)求,命名為:“即時(shí)命令-設(shè)備資源列表獲取”,并保存在上一步中 的Collection中。
(3)Request請(qǐng)求行配置 請(qǐng)求方法設(shè)置為“GET”。 URL主體為“https://iot-api.heclouds.com/nb-iot/resources”;該接口用于獲取設(shè)備資源列表
(4)Request頭部行Headers配置 配置頭部Headers,添加頭部字段authorization,其值為計(jì)算得到的 Token值
image.png

(5)讀設(shè)備資源
Request的請(qǐng)求方式、URL以及首部字段authorization的配置跟之前一樣。 URL參數(shù)有所變化:action為read,表示讀取設(shè)備資源;配置設(shè)備的IMEI和設(shè)備的 obi_id ,其中 obi_id 根據(jù)要讀取的資源類(lèi)型來(lái)確定。例如根據(jù)IPSO 規(guī)范,溫度傳感器 的Object ID為 3303,濕度傳感器為 3304,LED燈為3301。這里獲取的是LED燈的資源信息,所以URL參數(shù)中 obi_id 的值為3301。
image.png

(6)寫(xiě)設(shè)備資源
Request請(qǐng)求方法設(shè)置為“POST”,URL主體跟之前一樣; URL參數(shù)配置:參數(shù)action為write,表示寫(xiě)設(shè)備資源,配置IMEI、obj_id、obj_inst_id 及mode等參數(shù); 請(qǐng)求頭部行Headers配置:authorization 配置跟之前一樣,而Content-Type設(shè)置為 application/json,表示請(qǐng)求消息實(shí)體主體Body內(nèi)容是JSON格式; 請(qǐng)求實(shí)體主體Body填寫(xiě)。點(diǎn)擊 Body 選項(xiàng),選擇raw形式編輯,以JSON格式書(shū)寫(xiě),設(shè) 置資源ID即res_id為5850,IPSO模型中5850代表燈的開(kāi)關(guān)狀態(tài)屬性,其值val為1時(shí)代 表開(kāi)燈,為0 時(shí)代表關(guān)燈。
image.png

(7)發(fā)送請(qǐng)求并查看響應(yīng)消息 配置完畢后,點(diǎn)擊“Send”按鈕發(fā)送請(qǐng)求。當(dāng)請(qǐng)求成功時(shí),Status顯示響應(yīng)碼“200 0K’ 服務(wù)器會(huì)以JSON格式返回響應(yīng)消息,但是只有當(dāng)error值為“succ”時(shí)才真正代表平臺(tái)資源列表獲取成功。
image.png

7.云平臺(tái)查看命令下發(fā)日志

image.png

8.使用 HTTP 數(shù)據(jù)推送自動(dòng)開(kāi)關(guān) LED 燈

(1)打開(kāi)燈光推送應(yīng)用用戶門(mén)戶,以O(shè)neNET注冊(cè)用戶的 用戶id 和用戶AcessKey 登陸門(mén)戶地址:http://1.14.71.134:8080/


image.png

注意:
1、首次登陸,會(huì)提示該用戶id未使用記錄,需要再次輸入相同的用戶id和用戶AcessKey,登陸即可成功。


image.png

image.png

(2)需要使用本人在OneNET注冊(cè)用戶的 用戶id 和用戶AcessKey,如填錯(cuò),則使用燈光控制功能會(huì)因?yàn)殍b權(quán)錯(cuò)誤而功能失敗。具體的信息在OneNET官網(wǎng)(用戶中心-訪問(wèn)權(quán)限頁(yè)面),用戶id為6位數(shù)字,AcessKey需點(diǎn)擊查看:


屏幕截圖 2024-05-05 234845.png

(3)綁定NB-IoT設(shè)備的IMEI號(hào)
進(jìn)入“我的物聯(lián)網(wǎng)”-“設(shè)備”菜單頁(yè)面,填寫(xiě)IMEI號(hào)(用于數(shù)據(jù)推送時(shí)匹配),點(diǎn)擊確定完成綁定。


image.png

(4)實(shí)例創(chuàng)建
進(jìn)入OneNET物聯(lián)網(wǎng)開(kāi)放平臺(tái)“開(kāi)發(fā)者中心”,選擇菜單欄中的【數(shù)據(jù)流轉(zhuǎn)】下的【資源管理】,點(diǎn)擊【HTTP推送實(shí)例】,每個(gè)實(shí)例對(duì)應(yīng)一個(gè)HTTP的推送配置。點(diǎn)擊【添加實(shí)例】,填寫(xiě)實(shí)例名稱(chēng)、推送地址、Token等信息,完成實(shí)例新增
image.png

(5)實(shí)例驗(yàn)證
實(shí)例創(chuàng)建成功后,下一步進(jìn)行實(shí)例驗(yàn)證。實(shí)例列表頁(yè)面,點(diǎn)擊【驗(yàn)證】,平臺(tái)服務(wù)器會(huì)向配置的服務(wù)器地址發(fā)送HTTP GET請(qǐng)求,進(jìn)行地址有效性驗(yàn)證,只有驗(yàn)證成功了,平臺(tái)才會(huì)向其推送數(shù)據(jù)


屏幕截圖 2024-05-05 235550.png

(6)觀察光照數(shù)值變化與LCD模塊顏色狀態(tài)的變化
接下來(lái)觀察LCD的變化,確保設(shè)備在線的情況下,當(dāng) NB-IoT 設(shè)備上下線、上報(bào)新數(shù)據(jù)時(shí),應(yīng)用服務(wù)器就能夠獲得這些數(shù)據(jù),當(dāng)數(shù)據(jù)上報(bào)時(shí),程序會(huì)解析其中的光照度數(shù)據(jù),并且根據(jù)預(yù)設(shè)的閾值,對(duì) LCD 燈進(jìn)行控制。
-1.室內(nèi)照明情況下,LCD模塊應(yīng)處于“關(guān)閉”狀態(tài)(顏色程序編寫(xiě)的“關(guān)”狀態(tài)顏色)
-2.用物體遮擋光照傳感器模塊(約30秒),LCD模塊應(yīng)處于“開(kāi)啟”狀態(tài)(顏色程序編寫(xiě)的“開(kāi)”狀態(tài)顏色)
-3.拿開(kāi)遮蓋物,約30秒后,LCD模塊應(yīng)處于“關(guān)閉”狀態(tài)(顏色程序編寫(xiě)的“關(guān)”狀態(tài)顏色)
(7)同時(shí)可在平臺(tái)上通過(guò)查看實(shí)例獲得推送數(shù)據(jù)統(tǒng)計(jì),進(jìn)入【資源管理】下的【HTTP推送實(shí)例】,點(diǎn)擊【管理】,可查看實(shí)例的基本信息、推送數(shù)據(jù)統(tǒng)計(jì)、近一月數(shù)據(jù)趨勢(shì)。至此,數(shù)據(jù)推送完成。
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容