鄧二偉,黃 冰西北民族大學(xué)電氣工程學(xué)院,甘肅蘭州 730000
對智能家居數(shù)據(jù)交互的研究
鄧二偉,黃 冰
西北民族大學(xué)電氣工程學(xué)院,甘肅蘭州 730000
隨著Internet網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,隨著嵌入式系統(tǒng)的創(chuàng)新應(yīng)用,隨著物聯(lián)網(wǎng)概念的深入普及,智能家居物聯(lián)網(wǎng)技術(shù)愈來愈受廣大人民群眾的青睞。近年來,智能家居系統(tǒng)迅速發(fā)展,涉及很多的技術(shù)領(lǐng)域。要把物體連接到網(wǎng)絡(luò)中,最主要的就是數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸交互問題。本文主要針對數(shù)據(jù)交互問題作出簡單研究,提出一套簡單方便實用的智能家居系統(tǒng)方案。
嵌入式;數(shù)據(jù)交互;智能家居
目前,智能家居系統(tǒng)設(shè)計方案有很多種,例如,基于云端服務(wù)器、微信公眾平臺以及云端數(shù)據(jù)庫等設(shè)計的智能家居系統(tǒng)??紤]到技術(shù)問題,本次研究提出一種基于B/S網(wǎng)絡(luò)構(gòu)架(瀏覽器/服務(wù)器)的智能家居系統(tǒng)方案。該網(wǎng)絡(luò)構(gòu)架簡單來說就是通過網(wǎng)絡(luò)傳輸協(xié)議使得瀏覽器與Web服務(wù)器之間進(jìn)行數(shù)據(jù)交互。服務(wù)器需要用到必要的模塊,例如數(shù)據(jù)獲取模塊、數(shù)據(jù)處理模塊以及數(shù)據(jù)存儲模塊。數(shù)據(jù)獲取可以用動態(tài)網(wǎng)頁或其他技術(shù)來提取瀏覽器提交的表單數(shù)據(jù);數(shù)據(jù)處理可以利用Python等程序?qū)Λ@取的數(shù)據(jù)進(jìn)行處理;數(shù)據(jù)存儲可以利用數(shù)據(jù)庫等技術(shù)。這里,通過CGI接口或者Python讀取數(shù)據(jù)庫對服務(wù)器中獲取的數(shù)據(jù)進(jìn)行處理并與其他設(shè)備進(jìn)行交互。
CGI接口即通用網(wǎng)關(guān)接口,是服務(wù)器提供信息服務(wù)的標(biāo)準(zhǔn)接口。通過該接口,服務(wù)器就能獲取客戶端通過瀏覽器提交的數(shù)據(jù),將數(shù)據(jù)轉(zhuǎn)交給程序進(jìn)行處理,或者與外圍設(shè)備進(jìn)行數(shù)據(jù)交互。該接口由兩部分組成,一是服務(wù)器中的網(wǎng)頁,二是服務(wù)器后臺運行的CGI程序。
根據(jù)該原理,可以提出一套數(shù)據(jù)交互方案:第一步,搭建Web服務(wù)器,編寫HTML網(wǎng)頁以及其他網(wǎng)頁;第二步,編寫CGI服務(wù)器后臺應(yīng)用程序。該流程大致如下:首先,客戶端通過網(wǎng)絡(luò)傳輸協(xié)議訪問服務(wù)器,將網(wǎng)頁中的表單數(shù)據(jù)提交;然后,服務(wù)器后臺運行的CGI程序?qū)?shù)據(jù)獲取后,將獲取的數(shù)據(jù)分離后進(jìn)行處理,然后將數(shù)據(jù)與其他接口進(jìn)行交互。
目前,LAMP是應(yīng)用比較廣泛的嵌入式網(wǎng)絡(luò)服務(wù)器,它指的是在Linux系統(tǒng)下,安裝Apache服務(wù)器、MySQL數(shù)據(jù)庫和搭建PHP環(huán)境。由于可以通過PHP訪問數(shù)據(jù)庫,因此,這里可以將網(wǎng)頁中的表單信息獲取后直接存入數(shù)據(jù)庫,然后通過Python對數(shù)據(jù)庫的訪問,將數(shù)據(jù)再次提取出來。
因此,這里又產(chǎn)生了一套方案:第一步,搭建LAMP服務(wù)器;第二步,編寫PHP網(wǎng)頁;第三步,編寫Python程序訪問數(shù)據(jù)庫,將數(shù)據(jù)提取后與其他外圍設(shè)備進(jìn)行數(shù)據(jù)交互。需要注意的是,在PHP訪問數(shù)據(jù)庫時,一定要修改PHP的配置文件,使其能夠使用操作數(shù)據(jù)庫的函數(shù)。
由于PHP獨特的語法,它可以比CGI更快速地運行動態(tài)網(wǎng)頁。它做出的動態(tài)頁面與其他的編程語言相比,可以將程序嵌入到HTML語言中,執(zhí)行效率比HTML標(biāo)記的CGI要高許多。根據(jù)上述兩種方案的穩(wěn)定性、實用性和難易程度綜合考慮,本次研究采用方案二。
在PHP獲取網(wǎng)頁表單數(shù)據(jù)之前,要了解網(wǎng)頁中的表單數(shù)據(jù)的提交方式。在HTML標(biāo)記的表單中,有GET 和POST兩種提交表單的方式。這兩種方式的不同點有一下幾點:第一,前者是從服務(wù)器上獲得數(shù)據(jù),而后者是想服務(wù)器發(fā)送數(shù)據(jù);第二,前者是把參數(shù)隊列加到了URL中,而后者將表單數(shù)據(jù)隱藏起來;第三,前者傳送的數(shù)據(jù)量較小,而后者傳送的數(shù)據(jù)量較大,一般情況下不受限制;第四,前者的安全性較差,因為在提交表單時可以用地址欄看到它的URL,從而暴露了該用戶提交的表單信息,而后者的安全性較高,它所提交的信息均被隱藏。
根據(jù)上述兩種方式的特點,這里采用POST方式提交表單信息。因此,在PHP程序中,需要用到POST方式來獲取表單信息,當(dāng)然也可以使用GET方式獲取,關(guān)鍵在于網(wǎng)頁中表單的提交方式。PHP獲取表單信息的方式很簡單,關(guān)鍵在于對網(wǎng)頁表單中各個標(biāo)記的命名,為了區(qū)分各個功能模塊,要將每個表單模塊的命名加以區(qū)分。這樣,網(wǎng)頁腳本程序能夠方便獲取各部分模塊的表單數(shù)據(jù)。
PHP訪問數(shù)據(jù)庫的前提,是在它的配置文件中取消對數(shù)據(jù)庫鏈接訪問的屏蔽。這樣,在編寫網(wǎng)頁程序中才能連接數(shù)據(jù)庫。在編寫網(wǎng)頁程序中,首先要建立表單,里面設(shè)置一些單選框、復(fù)選框以及一些輸入文本框等,表單的提交方式上述文章以介紹,這里用何種方式可以自行選擇。當(dāng)用戶點擊提交按鈕時,網(wǎng)頁代碼提取表單中的數(shù)據(jù),將數(shù)據(jù)整合后存放在一個集合中以便存入數(shù)據(jù)庫。
為了方便存放數(shù)據(jù),服務(wù)器要提前建立好數(shù)據(jù)庫和表,數(shù)據(jù)類型可根據(jù)網(wǎng)頁中的表單數(shù)據(jù)進(jìn)行選擇,比如建立列名為溫度,數(shù)據(jù)類型為字符型,長度為4等。本
次研究共建立兩個表,一個供網(wǎng)頁存放數(shù)據(jù),以便服務(wù)器讀取客戶端提交的表單數(shù)據(jù);另一個供服務(wù)器存放數(shù)據(jù),網(wǎng)頁通過讀取數(shù)據(jù)庫中的數(shù)據(jù)將嵌入式服務(wù)器收集到的數(shù)據(jù)。
網(wǎng)頁中訪問數(shù)據(jù)庫的方法分為幾個步驟,連接數(shù)據(jù)庫;選擇數(shù)據(jù)庫;插入數(shù)據(jù);獲取數(shù)據(jù)庫表的結(jié)果集等。智能家居服務(wù)器可以編寫兩個網(wǎng)頁,一個用來做控制網(wǎng)頁,另一個用作監(jiān)控網(wǎng)頁。監(jiān)控網(wǎng)頁中,通過腳本程序?qū)?shù)據(jù)庫的訪問和數(shù)據(jù)的讀取,從數(shù)據(jù)結(jié)果集中分離各個表中屬性的數(shù)據(jù),最后再網(wǎng)頁中顯示出來,以此完成數(shù)據(jù)監(jiān)控目的??刂凭W(wǎng)頁中,同樣先鏈接數(shù)據(jù)庫,選擇數(shù)據(jù)庫后,將整合好的網(wǎng)頁表單數(shù)據(jù)插入到數(shù)據(jù)庫表中。最后嵌入式系統(tǒng)將數(shù)據(jù)庫讀取,與其他外圍設(shè)備進(jìn)行數(shù)據(jù)交互,以此達(dá)到控制目的。
Python是一種腳本語言,本身并不凸顯,但由于其具有豐富和強(qiáng)大的庫以及第三方支持庫令其使用廣泛。它為許多模塊提供了接口,甚至提供了其他編程語言的接口,并能夠與其他一些語言融會貫通,尤其是C/C++,這使得該語言變得萬能起來。本次研究為了完成目標(biāo),需要用到操作數(shù)據(jù)庫的第三方庫、串口通信的第三方庫以及支持GPIO的第三方庫等。
利用Python操縱數(shù)據(jù)時,其步驟大致和PHP操作數(shù)據(jù)類似,利用數(shù)據(jù)庫操作數(shù)據(jù)。從數(shù)據(jù)庫中讀取網(wǎng)頁表單提交后存儲的控制信息,將控制信息編碼為指令后操作嵌入式引腳或者通過串口發(fā)送數(shù)據(jù)或者控制其他外圍設(shè)備等,以此完成控制功能;另一方面,將采集到的信息數(shù)據(jù)整理好后存在數(shù)據(jù)庫中,網(wǎng)頁通過訪問數(shù)據(jù)庫將采集的數(shù)據(jù)通過網(wǎng)頁顯示出來,從而達(dá)到監(jiān)控目的。
根據(jù)上述各模塊功能的實現(xiàn)方案,將各個模塊組成系統(tǒng)。通過網(wǎng)絡(luò)傳輸協(xié)議,用戶可遠(yuǎn)程登錄該系統(tǒng)服務(wù)器,可訪問上述建立的監(jiān)控和控制頁面。用戶可操作頁面上的表單模塊,將控制信息通過表單提交到服務(wù)器中,經(jīng)過一系列的數(shù)據(jù)交互,從而控制某些設(shè)備的開關(guān)或者數(shù)據(jù)量的大小。嵌入式服務(wù)器將外圍設(shè)備采集的數(shù)據(jù)存放在數(shù)據(jù)庫中,網(wǎng)頁經(jīng)過對數(shù)據(jù)庫的訪問將數(shù)據(jù)在頁面中顯示出來,用戶即可知被監(jiān)控的數(shù)據(jù)。
當(dāng)然,上述遠(yuǎn)程訪問僅僅局限于內(nèi)網(wǎng),如果要實現(xiàn)外網(wǎng)遠(yuǎn)程訪問,就要將內(nèi)網(wǎng)映射到互聯(lián)網(wǎng)中。可以通過注冊域名,將服務(wù)器放在外網(wǎng)中,或者利用花生棒硬件將內(nèi)網(wǎng)映射到外網(wǎng)。利用花生棒時,進(jìn)入花生殼官網(wǎng)打開登錄界面,里面有配置花生棒的過程。配置成功后,不僅在內(nèi)網(wǎng)可以完成遠(yuǎn)程監(jiān)控管理,在外網(wǎng)甚至是手機(jī)只要有網(wǎng)絡(luò)的地方均可以訪問服務(wù)器。綜上研究說明,上述方案是可實施的,通過遠(yuǎn)程訪問本地服務(wù)器和本地數(shù)據(jù)庫,將數(shù)據(jù)通過嵌入式設(shè)備交互到外圍設(shè)備。
[1]郝磊.嵌入式家居環(huán)境監(jiān)測系統(tǒng)設(shè)計[D].成都:電子科技大學(xué),2013.
[2]孟平.多功能智能家居系統(tǒng)的設(shè)計與實現(xiàn)[D].哈爾濱:哈爾濱理工大學(xué),2014.
[3]姜超.基于物聯(lián)網(wǎng)的智能家居系統(tǒng)的設(shè)計與實現(xiàn)[D].長春:吉林大學(xué),2014.
TP3
A
1674-6708(2016)168-0094-01
鄧二偉,西北民族大學(xué)電氣工程學(xué)院,研究方向為嵌入式物聯(lián)網(wǎng)。
黃冰,西北民族大學(xué)電氣工程學(xué)院。