張紅艷 王 萍 張振亞
(安徽建筑大學(xué) 電子與信息工程學(xué)院,安徽 合肥 230601)
溫濕度數(shù)據(jù)采集是建筑物聯(lián)網(wǎng)的最基本應(yīng)用之一,溫濕度傳感器在應(yīng)用系統(tǒng)程序的設(shè)定下能夠定時(shí)的采集當(dāng)前環(huán)境下的環(huán)境溫濕度數(shù)據(jù),并將采集到的數(shù)據(jù)在應(yīng)用系統(tǒng)中實(shí)時(shí)顯示,用戶在客戶端就能夠?qū)崿F(xiàn)實(shí)時(shí)且智能的掌握環(huán)境溫濕度信息。應(yīng)用系統(tǒng)軟件為用戶提供了一種便捷和實(shí)時(shí)收集環(huán)境參數(shù)的途徑,可以根據(jù)用戶需求查詢歷史環(huán)境溫濕度數(shù)據(jù),還可以根據(jù)用戶的需求選擇特定時(shí)間段內(nèi)的環(huán)境溫濕度數(shù)據(jù)變化曲線等功能。
基于Arduino 的溫濕度數(shù)據(jù)采集系統(tǒng)由兩部分組成,一部分時(shí)溫濕度數(shù)據(jù)采集與發(fā)送硬件平臺,另一部分是基于所實(shí)現(xiàn)硬件平臺的數(shù)據(jù)采集與發(fā)送程序。因此,本系統(tǒng)設(shè)計(jì)的任務(wù)也由硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)子任務(wù)組成。對硬件設(shè)計(jì)子任務(wù),需要對硬件的選型、硬件原理闡述的基礎(chǔ)上給出硬件平臺的設(shè)計(jì)方案并實(shí)現(xiàn);而對軟件設(shè)計(jì)子任務(wù),需要基于所設(shè)計(jì)的硬件平臺,設(shè)計(jì)并實(shí)現(xiàn)建筑物內(nèi)建筑環(huán)境中溫度、濕度數(shù)據(jù)的采集的程序。
本系統(tǒng)總體框圖如圖1 所示,本文使用Arduino UNO R3 開發(fā)板和DHT11 溫濕度傳感器來實(shí)現(xiàn)測量和數(shù)據(jù)采集模塊功能,控制模塊主要將DHT11 溫濕度傳感器采集到的數(shù)據(jù)進(jìn)行讀取并實(shí)現(xiàn)對DHT11 溫濕度傳感器采集周期和數(shù)據(jù)顯示格式進(jìn)行設(shè)定;數(shù)據(jù)處理與通信模塊實(shí)現(xiàn)對DHT11 溫濕度傳感器數(shù)據(jù)的收集、處理并通過Wifi 網(wǎng)絡(luò)將處理后的數(shù)據(jù)傳輸?shù)綉?yīng)用系統(tǒng)程序模塊,應(yīng)用系統(tǒng)程序模塊實(shí)現(xiàn)了對采集的建筑室內(nèi)溫濕度數(shù)據(jù)進(jìn)行數(shù)據(jù)庫數(shù)據(jù)存儲(chǔ)功能、查詢建筑室內(nèi)環(huán)境溫濕度的具體參數(shù)、溫濕度數(shù)據(jù)的實(shí)時(shí)顯示和數(shù)據(jù)曲線展示等功能。
圖1 系統(tǒng)總體框圖
該溫濕度數(shù)據(jù)采集系統(tǒng)軟件的設(shè)計(jì)考慮基于B/S 架構(gòu)采用java 編程語言來實(shí)現(xiàn),主要希望實(shí)現(xiàn)以下的功能:
2.2.1 實(shí)現(xiàn)對建筑環(huán)境溫濕度的感知、采集。
2.2.2 實(shí)現(xiàn)對建筑環(huán)境溫濕度的獲取。
2.2.3 實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)存儲(chǔ)功能。
2.2.4 可以查詢建筑環(huán)境溫濕度的具體參數(shù)。
2.2.5 實(shí)現(xiàn)溫濕度數(shù)據(jù)的實(shí)時(shí)顯示和數(shù)據(jù)曲線展示。
2.2.6 實(shí)現(xiàn)對歷史數(shù)據(jù)進(jìn)行記錄,可以對數(shù)據(jù)進(jìn)行分析和查詢。
首先,查閱Arduino UNO 開發(fā)板、DHT11 溫濕度傳感器和Wifi 模塊相關(guān)引腳說明,然后,使用面包板將DHT11和Arduino UNO 開發(fā)板連接,使用USB 線纜將Arduino UNO 開發(fā)板和計(jì)算機(jī)連接。完成采集程序的編碼,在源程序經(jīng)過驗(yàn)證/編譯后上傳到Arduino UNO R3 開發(fā)板后,保持Arduino UNO R3 開發(fā)板與上位機(jī)通過USB 線纜的連接,硬件平臺上電。
主要是通過讓服務(wù)器端持續(xù)的監(jiān)聽數(shù)據(jù)發(fā)送端的請求,一旦讀取到數(shù)據(jù),則根據(jù)設(shè)定好的數(shù)據(jù)格式完成數(shù)據(jù)的提取存入數(shù)據(jù)庫,并實(shí)時(shí)顯示在曲線圖上。
首先需要建立一個(gè)數(shù)據(jù)庫DB,并在數(shù)據(jù)庫中建立相關(guān)數(shù)據(jù)表;其次執(zhí)行與數(shù)據(jù)庫建立連接操作,與數(shù)據(jù)庫建立好連接之后,我們就可以執(zhí)行相應(yīng)的SQL 存儲(chǔ)語句,最后,數(shù)據(jù)庫操作完成后,關(guān)閉與數(shù)據(jù)庫的連接,具體操作如下所示:
建立一個(gè)SQL server 2008 數(shù)據(jù)庫DB,在DB 數(shù)據(jù)庫中建立DataRecord 表,列名和數(shù)據(jù)類型的設(shè)置如圖2 所示。載入驅(qū)動(dòng)及連接數(shù)據(jù)庫程序過程如下所示:
圖2 DataRecord 表列名和數(shù)據(jù)類型的設(shè)置
其中com.microsoft.sqlserver.jdbc.SQLServerDriver 為該驅(qū)動(dòng)程序的名稱,Connection 的對象conn 代表與數(shù)據(jù)庫的連接,DriverManager 負(fù)責(zé)管理驅(qū)動(dòng)程序,作用于用戶和驅(qū)動(dòng)程序之間,在數(shù)據(jù)庫和相應(yīng)的驅(qū)動(dòng)程序之間建立連接。DriverManager.getConnection(URL,USER,PASSWORD)方法將建立與數(shù)據(jù)庫的連接。
建立數(shù)據(jù)庫連接的操作,通過定義一個(gè)getConnection()方法實(shí)現(xiàn),執(zhí)行SQL 存儲(chǔ)語句,通過定義一個(gè)InsertIntoTable(DataRecorddataRecord)方法,執(zhí)行結(jié)果是將dataRecord 里的DHT11 溫濕度傳感器采集到的溫度數(shù)據(jù)、濕度數(shù)據(jù)和采集時(shí)間插入到數(shù)據(jù)庫表DataRecord 里,并返回是否存儲(chǔ)成功。
關(guān)閉數(shù)據(jù)連接的操作,通過定義一個(gè)closeConnection()方法來實(shí)現(xiàn)。
查詢建筑環(huán)境溫濕度的具體參數(shù)的過程實(shí)際上就是向數(shù)據(jù)庫里查找相應(yīng)的數(shù)據(jù),我們定義了一個(gè)SelectFromTable(String sqlString)方法,其中sqlString 為查詢條件為查詢的條件,返回的是符合查詢條件的數(shù)據(jù)列表dataRecords。
主要是通過對溫度歷史數(shù)據(jù)和濕度歷史數(shù)據(jù)的查詢結(jié)果進(jìn)行分析,反映一定規(guī)律或者是得到相關(guān)的數(shù)據(jù),比如:某個(gè)時(shí)間段的平均溫度、平均濕度或最高溫度及歷史曲線等,數(shù)據(jù)曲線展示就是將歷史數(shù)據(jù)通過曲線的方式表。
web 文件編碼部分主要是對
和的描述。首先要安裝數(shù)據(jù)庫,如本文選用SQl server 數(shù)據(jù)庫,安裝完成后進(jìn)行網(wǎng)絡(luò)配置,運(yùn)行命令框進(jìn)行網(wǎng)絡(luò)測試,如本機(jī)設(shè)定IP 端口號為1433,在命令框輸入telnet 127.0.0.1 1433 進(jìn)行測試;
其次完成tomcat 的安裝和配置;
最后運(yùn)行服務(wù)器后,打開應(yīng)用系統(tǒng)。
4.2.1 實(shí)現(xiàn)對建筑環(huán)境溫濕度的感知、采集和獲取
對建筑環(huán)境溫濕度的感知、采集是否成功可以通過對Arduino UNO 開發(fā)板相應(yīng)模塊指示燈的觀察得知,而實(shí)現(xiàn)對建筑環(huán)境溫濕度數(shù)據(jù)的獲取主要是通過讓服務(wù)器端持續(xù)的監(jiān)聽數(shù)據(jù)發(fā)送端的請求,一旦讀取到數(shù)據(jù),則根據(jù)設(shè)定好的數(shù)據(jù)格式完成數(shù)據(jù)的提取。若數(shù)據(jù)提取成功,則存入數(shù)據(jù)庫成功。
4.2.2 實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)存儲(chǔ)功能
當(dāng)應(yīng)用程序監(jiān)聽到有數(shù)據(jù)接收時(shí),通過定義的插入方法執(zhí)行SQL 存儲(chǔ)語句,將DHT11 溫濕度傳感器采集到的溫度數(shù)據(jù)、濕度數(shù)據(jù)和采集時(shí)間插入到數(shù)據(jù)庫表里,并返回是否存儲(chǔ)成功,存儲(chǔ)成功后在數(shù)據(jù)庫表里就可以看到最下一行新增加的數(shù)據(jù),如圖3 所示。
圖3 表數(shù)據(jù)存儲(chǔ)
4.2.3 查詢建筑環(huán)境溫濕度的具體參數(shù)的測試
用戶可以根據(jù)需求選擇不同的查詢條件和查詢時(shí)間的選擇,通過點(diǎn)擊查詢按鈕,查詢相關(guān)的參數(shù)信息。例如查詢濕度的最大值和最小值,過程如圖4-6 所示。
圖4 選擇查詢條件
圖5 選擇查詢開始日期和結(jié)束日期
圖6 結(jié)果查詢顯示
4.2.4 實(shí)現(xiàn)溫濕度數(shù)據(jù)的實(shí)時(shí)顯示的編碼
當(dāng)啟動(dòng)應(yīng)用系統(tǒng)通信功能時(shí),可以實(shí)時(shí)的接收當(dāng)前Arduino UNO 開發(fā)板采集到的溫濕度數(shù)據(jù),并顯示如圖7所示。
圖7 當(dāng)前采集到的溫濕度數(shù)據(jù)顯示
4.2.5 實(shí)現(xiàn)對歷史數(shù)據(jù)進(jìn)行記錄,隨時(shí)可以對數(shù)據(jù)進(jìn)行分析和查詢;
實(shí)現(xiàn)將歷史數(shù)據(jù)保存在數(shù)據(jù)庫表里,可以隨時(shí)對數(shù)據(jù)庫表進(jìn)行相應(yīng)的查詢操作,并且實(shí)現(xiàn)對數(shù)據(jù)進(jìn)行簡單分析功能??赏ㄟ^拆線的方式來顯示歷史溫濕度數(shù)據(jù)和當(dāng)前溫濕度數(shù)據(jù),橫坐標(biāo)表示時(shí)間,縱坐標(biāo)表示溫度和濕度值,當(dāng)鼠標(biāo)放至曲線上時(shí),也可讀取到相應(yīng)時(shí)間上的溫度和濕度數(shù)據(jù),如圖8 所示。
圖8 歷史數(shù)據(jù)查詢
目前隨著物聯(lián)網(wǎng)技術(shù)的普及,特別是感知技術(shù)和接入技術(shù)的普及,為智能建筑中智能應(yīng)用的設(shè)計(jì)與實(shí)現(xiàn)提供了新的支持。本實(shí)驗(yàn)系統(tǒng)通過對溫濕度傳感器的數(shù)據(jù)采集控制,用戶通過客戶端實(shí)現(xiàn)實(shí)時(shí)獲取環(huán)境溫濕度數(shù)據(jù)并進(jìn)行相應(yīng)的數(shù)據(jù)分析處理操作,為后續(xù)相關(guān)應(yīng)用打下基礎(chǔ)。該實(shí)驗(yàn)可作為物聯(lián)網(wǎng)工程專業(yè)學(xué)生的綜合性、創(chuàng)新性實(shí)驗(yàn)開放。