任 靜
(蘭州石化職業(yè)技術(shù)大學(xué),甘肅 蘭州 730060)
一個(gè)物聯(lián)網(wǎng)系統(tǒng)由感知層、傳輸層和應(yīng)用層構(gòu)成。 感知層實(shí)現(xiàn)對(duì)物理世界的智能感知識(shí)別、信息采集處理和自動(dòng)控制,并通過(guò)通信模塊將物理實(shí)體連接到網(wǎng)絡(luò)層和應(yīng)用層。網(wǎng)絡(luò)層主要實(shí)現(xiàn)信息的傳遞、路由和控制,包括延伸網(wǎng)、接入網(wǎng)和核心網(wǎng),網(wǎng)絡(luò)層所需要的關(guān)鍵技術(shù)包括長(zhǎng)距離有線和無(wú)線通信技術(shù)、網(wǎng)絡(luò)技術(shù)等。 應(yīng)用層可以對(duì)感知層采集的數(shù)據(jù)進(jìn)行計(jì)算、處理和知識(shí)挖掘,從而實(shí)現(xiàn)對(duì)物理世界的實(shí)時(shí)控制、精確管理和科學(xué)決策。 本文通過(guò)一個(gè)基于ZigBee 和RS485 通信的智能家居控制系統(tǒng),從硬件層搭建到應(yīng)用層開(kāi)發(fā),完整呈現(xiàn)了一個(gè)物聯(lián)網(wǎng)應(yīng)用系統(tǒng),重點(diǎn)闡述了應(yīng)用層開(kāi)發(fā)程序設(shè)計(jì)。
本智能家居控制系統(tǒng)需要采集房間溫濕度信息、光照條件、火焰信息和廚房二氧化碳濃度。根據(jù)房間的溫度和光照條件,可以自動(dòng)控制空調(diào)(用風(fēng)扇代替)和燈光的開(kāi)啟和關(guān)閉;當(dāng)有火焰或二氧化碳濃度超標(biāo),報(bào)警燈會(huì)開(kāi)啟。 光照和火焰采用無(wú)線傳感器,溫濕度和二氧化碳采用有線傳感器。 采用ZigBee 四輸入模擬量模塊來(lái)獲取二氧化碳和溫濕度傳感器數(shù)據(jù), 本文將ZigBee 四輸入模擬量模塊通過(guò)Newland 公司提供的程序燒寫(xiě)成四模擬量獨(dú)立采集器。ZigBee 終端節(jié)點(diǎn)采集的傳感器數(shù)據(jù)傳輸給ZigBee 協(xié)調(diào)器, 再通過(guò)RS232 串口將數(shù)據(jù)傳輸給串口服務(wù)器,串口服務(wù)器通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)傳輸給本地服務(wù)器,監(jiān)控界面能顯示采集的所有傳感器的實(shí)時(shí)數(shù)據(jù)。
當(dāng)溫度值和光照值分別超過(guò)設(shè)定的閾值時(shí),需要自動(dòng)開(kāi)關(guān)風(fēng)扇和燈泡(同時(shí)也需要能手動(dòng)控制)。監(jiān)控軟件通過(guò)RS232 轉(zhuǎn)RS485 轉(zhuǎn)換器將控制命令送至ADAM4150 來(lái)實(shí)現(xiàn)風(fēng)扇和燈泡的開(kāi)關(guān)控制。
在本系統(tǒng)的任務(wù)實(shí)現(xiàn)中,均采用了Newland 公司提供的硬件設(shè)備和設(shè)備驅(qū)動(dòng)庫(kù)文件(DLL),具體的硬件設(shè)備連接如圖1 所示。
本系統(tǒng)傳感器數(shù)據(jù)采用ZigBee 網(wǎng)絡(luò)傳輸,設(shè)備控制采用RS485 網(wǎng)絡(luò)。 ZigBee 終端節(jié)點(diǎn)和協(xié)調(diào)器需要燒寫(xiě)Newland 公司提供的傳感器固件和協(xié)調(diào)器固件。 ZigBee 傳輸網(wǎng)絡(luò)需要有相同的通道號(hào)(Channel)和網(wǎng)絡(luò)ID(PAN ID),本文通過(guò)Newland公司提供的ZigBee 組網(wǎng)參數(shù)設(shè)置軟件進(jìn)行Channel 和PAN ID 等參數(shù)的設(shè)置, 完成ZigBee 網(wǎng)絡(luò)的組建。 ZigBee 網(wǎng)絡(luò)具體參數(shù)設(shè)置如圖2 所示。
RS485 網(wǎng)絡(luò)較簡(jiǎn)單,ADAM4150 本身是一個(gè)RS485 設(shè)備, 只需要從ADAM4150 的DATA+和DATA-接入RS485 轉(zhuǎn)RS232 轉(zhuǎn)換器即可。
監(jiān)控軟件使用Eclipse 集成開(kāi)發(fā)環(huán)境,布局文件使用JavaFX Scene Builder 完成。 系統(tǒng)數(shù)據(jù)監(jiān)控界面設(shè)計(jì)如圖3 所示,可實(shí)時(shí)監(jiān)控顯示各傳感器數(shù)據(jù),并且可以對(duì)風(fēng)扇和燈泡進(jìn)行自動(dòng)和手動(dòng)控制。
當(dāng)選擇好ADAM4150 以及ZigBee 串口和波特率以后,點(diǎn)擊開(kāi)始采集按鈕,即可采集數(shù)據(jù)。因?yàn)楸镜胤?wù)器是通過(guò)網(wǎng)絡(luò)方式訪問(wèn)串口服務(wù)器,所以本文選擇ADAM4150 串口和ZigBee 串口時(shí)需要用Newland 公司提供的USR-VCOM 軟件來(lái)虛擬串口。當(dāng)處于手動(dòng)模式時(shí),可以手動(dòng)開(kāi)關(guān)風(fēng)扇和燈泡;當(dāng)處于自動(dòng)模式時(shí),需要設(shè)置溫度和光照的最大值和最小值。 由于ZigBee 網(wǎng)絡(luò)是自組網(wǎng)自動(dòng)進(jìn)行傳感器數(shù)據(jù)采集傳輸?shù)?,所以需要在串口添加一個(gè)監(jiān)聽(tīng)器,完成對(duì)傳感器數(shù)據(jù)的收集和處理。
建立JavaFX 工程,引入硬件驅(qū)動(dòng)庫(kù)文件rxtx-Parallel.dll、rxtxSerial.dll, 加載庫(kù)文件RXTXcomm.jar、SerialPortLib.jar。
在本系統(tǒng)中, 串口服務(wù)器即是一個(gè)串口-網(wǎng)絡(luò)轉(zhuǎn)換模塊,通過(guò)采用虛擬串口,將串口服務(wù)器的串口數(shù)據(jù)傳輸至本地服務(wù)器。 獲取串口和波特率初始化代碼如下:
在本系統(tǒng)中需要給ZigBee 協(xié)調(diào)器的串口數(shù)據(jù)添加一個(gè)監(jiān)聽(tīng)器,以便及時(shí)接收處理協(xié)調(diào)器送過(guò)來(lái)的串口數(shù)據(jù)。
首先定義一個(gè)實(shí)現(xiàn)串口事件監(jiān)聽(tīng)接口類(lèi)的Zigbeelistener 監(jiān)聽(tīng)器類(lèi),并在主進(jìn)程中使用以下代碼為ZigBee 串口添加該監(jiān)聽(tīng)器,示例如下:
在上述程序中,有這樣一段程序:
在此有必要對(duì)此段程序做一解釋。 在JavaFx中, 如果在非Fx 線程要執(zhí)行Fx 線程相關(guān)的任務(wù),必須在Platform.runlater 中執(zhí)行。 監(jiān)聽(tīng)器因?yàn)樾枰恢敝貜?fù)循環(huán)去監(jiān)聽(tīng)串口數(shù)據(jù),在一定意義上也是一個(gè)子線程。但是在子線程中去更新主進(jìn)程中監(jiān)控界面上的控件數(shù)據(jù)時(shí), 子進(jìn)程不能直接訪問(wèn)主進(jìn)程,這時(shí)就需要用到Platform.runlater 函數(shù)。 一般代碼格式如下:
在本系統(tǒng)中, 因?yàn)橹恍枰ㄟ^(guò)ADAM4150 來(lái)控制風(fēng)扇和燈泡, 所以只需要向ADAM4150 發(fā)出設(shè)備控制指令即可。ADAM4150 通過(guò)繼電器控制設(shè)備的指令格式如表1 和表2 所示。
表1 ADAM4150 開(kāi)啟設(shè)備控制指令格式Table 1 Adam4150 open device control command format
表2 ADAM4150 關(guān)閉設(shè)備控制指令格式Table 2 Adam4150 close device control command format
本系統(tǒng)中, 因?yàn)轱L(fēng)扇接在ADAM4150 的DO0上,所以開(kāi)啟風(fēng)扇的指令為:
01 05 00 10 FF 00 8D FF
關(guān)閉風(fēng)扇的指令為:
01 05 00 10 00 00 CC 0F
控制燈泡開(kāi)關(guān)和控制風(fēng)扇開(kāi)關(guān)的代碼類(lèi)似,手動(dòng)控制風(fēng)扇開(kāi)關(guān)的具體代碼如下所示:
經(jīng)過(guò)驗(yàn)證,運(yùn)行程序后,監(jiān)控界面能正確實(shí)時(shí)地顯示各傳感器數(shù)據(jù)。 程序運(yùn)行界面如圖4 所示。處于手動(dòng)模式時(shí),可以手動(dòng)開(kāi)關(guān)風(fēng)扇和燈泡;處于自動(dòng)模式時(shí), 當(dāng)實(shí)時(shí)溫度大于溫度最大閾值30℃時(shí),風(fēng)扇自動(dòng)打開(kāi),當(dāng)?shù)陀跍囟茸钚¢撝?0℃時(shí),風(fēng)扇自動(dòng)關(guān)閉;當(dāng)實(shí)時(shí)光照強(qiáng)度小于光照強(qiáng)度最小閾值1500lx 時(shí),燈泡自動(dòng)打開(kāi),當(dāng)大于光照強(qiáng)度最大閾值10000lx 時(shí),燈泡自動(dòng)關(guān)閉。
文本設(shè)計(jì)開(kāi)發(fā)了一個(gè)基于ZigBee 和RS485 通信網(wǎng)絡(luò)的智能家居控制系統(tǒng), 重點(diǎn)闡述了基于JavaFX 的應(yīng)用層代碼程序設(shè)計(jì)。 JavaFX 是Java 在編寫(xiě)圖形界面程序的最新技術(shù),它是一個(gè)開(kāi)源的下一代客戶端應(yīng)用平臺(tái), 適用于基于Java 構(gòu)建的桌面、移動(dòng)端和嵌入式系統(tǒng),為開(kāi)發(fā)豐富的客戶端應(yīng)用提供了一個(gè)現(xiàn)代、 高效、 功能齊全的工具包。JavaFX Scene Builder 通過(guò)創(chuàng)建可直接用于JavaFX應(yīng)用程序的用戶界面,縮小了設(shè)計(jì)師和開(kāi)發(fā)人員之間的差距。