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