劉 理
(阜陽(yáng)職業(yè)技術(shù)學(xué)院城鄉(xiāng)建設(shè)學(xué)院,安徽 阜陽(yáng) 236031)
建筑智能化實(shí)訓(xùn)平臺(tái)是用于高職建筑類(lèi)專(zhuān)業(yè)實(shí)驗(yàn)實(shí)訓(xùn)教學(xué)的成套設(shè)備,包括“綜合布線(xiàn)系統(tǒng)”、“門(mén)禁系統(tǒng)”、“消防系統(tǒng)”、“視頻監(jiān)控系統(tǒng)”和“照明系統(tǒng)”等多個(gè)子系統(tǒng)[1-2]。在不同的子系統(tǒng)中,包含了對(duì)采集溫度、濕度、煙霧濃度、光照強(qiáng)度等環(huán)境監(jiān)測(cè)數(shù)據(jù)的需求。實(shí)訓(xùn)平臺(tái)中已存在相應(yīng)無(wú)線(xiàn)傳感器節(jié)點(diǎn),可以實(shí)現(xiàn)對(duì)所需環(huán)境指標(biāo)的實(shí)時(shí)監(jiān)測(cè),采集數(shù)據(jù)通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)傳輸后,由電腦端的控制軟件完成數(shù)據(jù)顯示和管理。
設(shè)計(jì)基于上述條件,開(kāi)發(fā)應(yīng)用于Android系統(tǒng)的環(huán)境監(jiān)測(cè)軟件,結(jié)合WiFi模塊、ZigBee節(jié)點(diǎn)和網(wǎng)絡(luò)協(xié)調(diào)器等硬件,實(shí)現(xiàn)通過(guò)手機(jī)或平板上的APP遠(yuǎn)程實(shí)時(shí)監(jiān)測(cè)、管理采集信息和控制報(bào)警裝置的功能。
建筑智能化實(shí)訓(xùn)平臺(tái)中的環(huán)境監(jiān)測(cè)系統(tǒng)硬件部分由傳感器(探測(cè)器)、報(bào)警器、網(wǎng)絡(luò)節(jié)點(diǎn)、網(wǎng)關(guān)和終端設(shè)備等組成。傳感器(探測(cè)器)包含了溫度探測(cè)器、煙霧探測(cè)器、濕度傳感器、光照強(qiáng)度傳感器等,用于采集相應(yīng)的環(huán)境數(shù)據(jù)。數(shù)據(jù)信息由網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)出,通過(guò)以網(wǎng)關(guān)為核心的ZigBee自組網(wǎng)絡(luò)進(jìn)行傳輸,并通過(guò)WiFi方式與客戶(hù)端(電腦或手機(jī))軟件連接實(shí)現(xiàn)監(jiān)測(cè)和控制[3]。
設(shè)計(jì)根據(jù)硬件設(shè)備情況,結(jié)合傳感器、嵌入式、無(wú)線(xiàn)通信(Zigbee和WiFi)及數(shù)據(jù)庫(kù)等多項(xiàng)技術(shù),開(kāi)發(fā)基于Android系統(tǒng)的應(yīng)用軟件,在手機(jī)或平板等移動(dòng)終端上實(shí)現(xiàn)對(duì)環(huán)境數(shù)據(jù)的采集、顯示、存儲(chǔ)、管理以及對(duì)報(bào)警器的控制,提高實(shí)訓(xùn)平臺(tái)環(huán)境監(jiān)測(cè)功能的實(shí)時(shí)性、便捷性、高效性和智能化。該系統(tǒng)整體架構(gòu)如圖1所示,主要分為環(huán)境采集模塊、網(wǎng)關(guān)模塊、服務(wù)器(數(shù)據(jù)庫(kù))模塊和用戶(hù)終端(Android軟件)模塊。
環(huán)境采集模塊用來(lái)采集各種環(huán)境數(shù)據(jù),由不同類(lèi)型的傳感器、探測(cè)器與Zigbee網(wǎng)絡(luò)節(jié)點(diǎn)、電源模塊共同組成。其中,選擇CC2530為網(wǎng)絡(luò)節(jié)點(diǎn)的主控芯片,該芯片具有良好的兼容性和可擴(kuò)展性[4]。為每個(gè)傳感器對(duì)應(yīng)的網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)置唯一的IP地址,設(shè)置定時(shí)指令讓Zigbee網(wǎng)關(guān)自動(dòng)匯集各個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)中傳感器所采集的數(shù)據(jù),并通過(guò)WiFi模塊將數(shù)據(jù)實(shí)時(shí)傳送到手機(jī)端,同時(shí)上傳至服務(wù)器的數(shù)據(jù)庫(kù)中。
該系統(tǒng)的網(wǎng)關(guān)模塊主要由兩部分組成,一是建立在CC2530芯片組基礎(chǔ)上構(gòu)成的ZigBee網(wǎng)絡(luò)協(xié)調(diào)器;二是WiFi模塊,采用ESP8266芯片組[5]。其中,ZigBee網(wǎng)絡(luò)協(xié)調(diào)器主要用于接收和處理各ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)的采集數(shù)據(jù),再由WiFi模塊將數(shù)據(jù)信息發(fā)送至手機(jī)端和數(shù)據(jù)庫(kù)。
該系統(tǒng)使用建筑智能化實(shí)訓(xùn)平臺(tái)配備的上位機(jī)電腦作為服務(wù)器,服務(wù)器主機(jī)內(nèi)裝載了控制軟件和數(shù)據(jù)庫(kù)[6]。其中,數(shù)據(jù)庫(kù)的內(nèi)容主要為系統(tǒng)采集的歷史環(huán)境數(shù)據(jù)信息,并通過(guò)MySQL軟件對(duì)這些數(shù)據(jù)進(jìn)行存放和管理。服務(wù)器主機(jī)硬件規(guī)格——主板:B460M芯片組,CPU:Intel 酷睿i5 10400,內(nèi)存:8 GB DDR4,硬盤(pán):2 TB 7200轉(zhuǎn)機(jī)械硬盤(pán),網(wǎng)卡:外置1300 M無(wú)線(xiàn)網(wǎng)卡。
圖1 環(huán)境監(jiān)測(cè)系統(tǒng)整體架構(gòu)
用戶(hù)終端模塊選用搭載了Android系統(tǒng)的智能手機(jī)為測(cè)試對(duì)象。根據(jù)Android系統(tǒng)開(kāi)源特性,對(duì)數(shù)據(jù)采集、處理和通信模塊的設(shè)計(jì)需求進(jìn)行分析后,決定使用Android studio軟件為應(yīng)用開(kāi)發(fā)環(huán)境。測(cè)試手機(jī)的硬件規(guī)格——操作系統(tǒng):Android 11.0,CPU:驍龍865 八核2.9 GHz,內(nèi)存:8 GB LPDDR5,外存:128 GB UFS 3.0,網(wǎng)絡(luò):支持WiFi6和5G全網(wǎng)通。
根據(jù)需求分析,設(shè)計(jì)將軟件系統(tǒng)結(jié)構(gòu)劃分為交互層、中間層和數(shù)據(jù)層三層架構(gòu)。如圖2所示,交互層用于人機(jī)交互、中間層用于數(shù)據(jù)和控制命令傳輸、數(shù)據(jù)層用于數(shù)據(jù)存放和調(diào)用。在軟件(APP)中,用戶(hù)可操作界面上的相應(yīng)按鈕,實(shí)時(shí)查看環(huán)境數(shù)據(jù)、設(shè)備狀態(tài)、調(diào)取歷史數(shù)據(jù)和手動(dòng)開(kāi)啟/關(guān)停報(bào)警器等,實(shí)現(xiàn)設(shè)計(jì)功能。設(shè)計(jì)選用的Android Studio作為開(kāi)發(fā)環(huán)境,其配套有2個(gè)開(kāi)發(fā)工具:JDK(Java Development Kit)、 SDK(Software Development Kit)。JDK使用Java語(yǔ)言編寫(xiě)程序代碼;SDK是生成APP所需的編譯器。將開(kāi)發(fā)環(huán)境配置完畢后,結(jié)合設(shè)計(jì)要求分別進(jìn)行各模塊的程序設(shè)計(jì)[7]。
根據(jù)環(huán)境采集模塊硬件的主要作用和技術(shù)特點(diǎn),程序的設(shè)計(jì)應(yīng)能夠?qū)崿F(xiàn)將采集的數(shù)據(jù)信號(hào)以數(shù)值的形式顯示在手機(jī)界面上。由于系統(tǒng)中各傳感器采集現(xiàn)場(chǎng)物理量時(shí),數(shù)據(jù)將通過(guò)ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)中自帶的A/D轉(zhuǎn)換器后以數(shù)字量的形式輸出,在程序中設(shè)置從WiFi模塊中讀取實(shí)時(shí)數(shù)據(jù)的部分,并設(shè)計(jì)環(huán)境監(jiān)測(cè)顯示界面,將接收的信息直接顯示在對(duì)應(yīng)位置處。
以讀取和顯示溫度信息為例,編寫(xiě)代碼如下:
public class TempCollector {
public static void main(String[] args) {
// 獲取WiFi連接信息
WifiManager wifiMgr = (WifiManager)getSystemService(Context.WIFI_SERVICE);
List
// 遍歷掃描結(jié)果,獲取網(wǎng)絡(luò)節(jié)點(diǎn)溫度
for (ScanResult scanResult : scanResults) {
String ssid = scanResult.SSID;
String bssid = scanResult.BSSID;
int frequency = scanResult.frequency;
int level = scanResult.level;
int temperature = scanResult.temperature;
// 顯示溫度
System.out.println(" 溫度:" + temperature);
}
}
}
圖2 手機(jī)端軟件(APP)設(shè)計(jì)邏輯框圖
為實(shí)現(xiàn)對(duì)歷史數(shù)據(jù)的存放和管理,還需要在APP中實(shí)現(xiàn)讀取服務(wù)器數(shù)據(jù)庫(kù)的功能。MySQL中存放的歷史數(shù)據(jù)已按照不同類(lèi)型進(jìn)行存放,根據(jù)系統(tǒng)功能設(shè)計(jì)需求建立了關(guān)系型數(shù)據(jù)庫(kù),按類(lèi)別劃分表格,包括溫度、濕度、煙霧濃度、光照強(qiáng)度等。按類(lèi)別設(shè)置表格存放的優(yōu)勢(shì)在于,可以分別單獨(dú)寫(xiě)入或讀取某一類(lèi)型的數(shù)據(jù),數(shù)據(jù)間互不干擾。APP調(diào)取的歷史數(shù)據(jù)是通過(guò)本地?zé)o線(xiàn)網(wǎng)絡(luò)接入服務(wù)器數(shù)據(jù)庫(kù)查詢(xún)后顯示的。
以從數(shù)據(jù)庫(kù)中讀取和顯示歷史溫度信息為例,編寫(xiě)代碼部分內(nèi)容如下:
public class MainActivity {
public static void main(String[] args) {
// 定義數(shù)據(jù)庫(kù)連接變量
Connection conn = null;
// 定義SQL語(yǔ)句
String sql;
// 定義結(jié)果集
ResultSet rs;
// 定義數(shù)據(jù)庫(kù)驅(qū)動(dòng)
String driver = "com.mysql.jdbc.Driver";
// 定義數(shù)據(jù)庫(kù)地址
String url = "jdbc:mysql://localhost:3306/mydb";
// 定義數(shù)據(jù)庫(kù)用戶(hù)名
String user = "admin";
// 定義數(shù)據(jù)庫(kù)密碼
String password = "000000";
try {
// 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
Class.forName(driver);
// 連接數(shù)據(jù)庫(kù)
conn = DriverManager.getConnection(url, user, password);
// 定義SQL語(yǔ)句
sql = "SELECT * FROM temperature";
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
// 遍歷結(jié)果集
while (rs.next()) {
// 獲取歷史溫度信息
String historyTemp = rs.getString("history_temp");
// 輸出歷史溫度信息
System.out.println("歷史溫度信息:" + historyTemp);
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
圖3 APP環(huán)境監(jiān)測(cè)界面
報(bào)警器有手動(dòng)控制和自動(dòng)控制兩種控制方式。其中,手動(dòng)控制指用戶(hù)可以通過(guò)手機(jī)App上的按鈕選擇開(kāi)啟/關(guān)閉報(bào)警器;自動(dòng)控制則是通過(guò)設(shè)定溫度或煙霧濃度的閾值,觸發(fā)報(bào)警器自動(dòng)開(kāi)啟,當(dāng)威脅消除時(shí)再自動(dòng)關(guān)閉。設(shè)計(jì)中的報(bào)警器直接連接在ZigBee網(wǎng)絡(luò)節(jié)點(diǎn)中,因此在設(shè)計(jì)控制程序時(shí),手動(dòng)控制可以通過(guò)直接向其發(fā)送指令的形式完成,自動(dòng)控制則需要增加一個(gè)觸發(fā)條件。
以自動(dòng)開(kāi)啟報(bào)警器(實(shí)時(shí)溫度≥50 ℃)為例,編寫(xiě)代碼如下:
//定義報(bào)警器類(lèi)
public class Alarm {
private boolean isOn;
private int temperature;
public Alarm(int temperature) {
this.temperature = temperature;
}
//當(dāng)溫度大于等于50℃開(kāi)啟
public void checkTemperature() {
if (temperature >= 50) {
isOn = true;
}
}
public boolean isOn() {
return isOn;
}
}
//定義ZigBee節(jié)點(diǎn)類(lèi)
public class ZigBeeNode {
private Alarm alarm;
public ZigBeeNode(Alarm alarm) {
this.alarm = alarm;
}
//發(fā)出指令
public void sendCommand() {
alarm.checkTemperature();
if (alarm.isOn()) {
System.out.println("報(bào)警器已開(kāi)啟");
}
}
}
//測(cè)試類(lèi)
public class Test {
public static void main(String[] args) {
Alarm alarm = new Alarm(50);
ZigBeeNode zigBeeNode = new ZigBeeNode(alarm);
zigBeeNode.sendCommand();
}
}
將經(jīng)SDK編譯后生成的.apk文件安裝到測(cè)試手機(jī)中,連接本地WiFi后進(jìn)入登錄界面,輸入預(yù)設(shè)的用戶(hù)賬號(hào)和密碼,進(jìn)入控制界面,可選擇進(jìn)入“環(huán)境監(jiān)測(cè)”、“報(bào)警器控制”、“歷史查詢(xún)”和“設(shè)備狀態(tài)”四個(gè)選項(xiàng)。在環(huán)境監(jiān)測(cè)界面,可以查看到傳感器(探測(cè)器)采集反饋的溫度、濕度、煙霧濃度、光照強(qiáng)度等實(shí)時(shí)數(shù)據(jù)展現(xiàn),如圖3所示,實(shí)現(xiàn)了對(duì)建筑智能化實(shí)訓(xùn)平臺(tái)周?chē)h(huán)境的實(shí)時(shí)監(jiān)測(cè)。依次測(cè)試“報(bào)警器控制”、“歷史查詢(xún)”和“設(shè)備狀態(tài)”界面功能,均能實(shí)現(xiàn)設(shè)計(jì)需求,測(cè)試結(jié)果符合預(yù)期。
設(shè)計(jì)基于建筑智能化實(shí)訓(xùn)平臺(tái)環(huán)境監(jiān)測(cè)系統(tǒng)功能,結(jié)合傳感器、嵌入式、無(wú)線(xiàn)網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)等多種技術(shù)手段,開(kāi)發(fā)了基于Android系統(tǒng)的手機(jī)端應(yīng)用軟件,實(shí)現(xiàn)了通過(guò)手機(jī)APP遠(yuǎn)程查看環(huán)境監(jiān)測(cè)實(shí)時(shí)數(shù)據(jù)、管理歷史數(shù)據(jù)和聯(lián)動(dòng)控制報(bào)警裝置的目標(biāo)。測(cè)試結(jié)果表明,已開(kāi)發(fā)的軟件能夠有效滿(mǎn)足設(shè)計(jì)需求。今后將嘗試依據(jù)建筑智能化實(shí)訓(xùn)平臺(tái)其他子系統(tǒng)功能需求,在軟件中增加新的控制模塊,比如:增加“門(mén)禁系統(tǒng)”中的開(kāi)/關(guān)門(mén)記錄等,進(jìn)一步增強(qiáng)手機(jī)端APP無(wú)線(xiàn)控制功能的覆蓋面和集成度,以提高全系統(tǒng)設(shè)備的易用性、高效性和先進(jìn)性。