智能家居遠程集控系統(tǒng)方案思考
掃描二維碼
隨時隨地手機看文章
1.簡介
物聯(lián)網(wǎng)近幾年的發(fā)展非常的火熱,各種智能設(shè)備的出現(xiàn)使得智能家居的發(fā)展越來越快。雖然發(fā)展火熱,卻沒有統(tǒng)一的標準,所以智能家居監(jiān)控系統(tǒng)需要一種穩(wěn)定統(tǒng)一的解決方案。
本系統(tǒng)主要是利用Exynos4412開發(fā)板作為開發(fā)環(huán)境,借助Linux操作系統(tǒng)來實現(xiàn)軟件上的需求,通過WIFI連接互聯(lián)網(wǎng),然后在嵌入式系統(tǒng)上搭建BOA服務(wù)器,通過移植MJPG-streamer軟件采集攝像頭數(shù)據(jù)。用戶只需要在電腦或者手機上通過瀏覽器訪問集成控制系統(tǒng)頁面,可實現(xiàn)對攝像頭的實時監(jiān)控和對LED的控制。
本文完成了智能家居監(jiān)控系統(tǒng)的整體設(shè)計,采用硬件結(jié)合,軟件設(shè)計和系統(tǒng)整體調(diào)試。根據(jù)開發(fā)的需要,各部分功能協(xié)調(diào),交叉的進行,實現(xiàn)一種高效穩(wěn)定的物聯(lián)網(wǎng)智能家居監(jiān)控系統(tǒng)的解決方案。
1.1 研究意義及背景
隨著網(wǎng)絡(luò)技術(shù)和各種智能設(shè)備技術(shù)的不斷發(fā)展,智能家居也與隨著時代的變化而不斷發(fā)展進步,尤其是萬物互聯(lián)使得智能家居進入千家萬戶成為可能。利用一個家庭網(wǎng)關(guān)可以控制家里的一切,而且還可以采集到用戶生活習(xí)慣的信息,結(jié)合大數(shù)據(jù),提供更加人性化的服務(wù),這是時代的進步也是科技給人們生活帶來的便捷。
物聯(lián)網(wǎng)智能家居監(jiān)控系統(tǒng)研究的意義在于如何提高人們的生活水平,同時對人們的生產(chǎn)生活方式的轉(zhuǎn)變也帶來很大的改變[1]。當沒人在家時,如果忘記了關(guān)掉家里的一些電器,此時只需要一臺能夠上網(wǎng)的電腦或者拿出手機,登錄智能家居遠程集控系統(tǒng),就可以輕松的掌握家里的一切情況,同時控制各種電器的使用。如果需要時時觀察家里的情況,還可以打開攝像頭,看家里情況,這樣有利于照顧家里的老人和小孩。
從宏觀上來說,智能家居監(jiān)控系統(tǒng)可以幫助人們更好的生活,減少電量的損耗,對于實現(xiàn)國家建設(shè)資源節(jié)約型,環(huán)境友好型社會有好處,同時可以預(yù)防火災(zāi),小偷等突發(fā)事件的發(fā)生,維護公共安全有很大的好處。所以,智能家居監(jiān)控系統(tǒng)的研究是很要必要的,也是未來發(fā)展的趨勢。
1.2 國內(nèi)外的發(fā)展趨勢
智能家居的概念第一次被提出是在1984年,當時在對一幢樓層進行改造,在該樓層里的各種設(shè)備進行智能家居的設(shè)計,達到能夠進行控制的效果。這樣,智能家居的概念就第一次被提出來了。智能家居從出現(xiàn)到現(xiàn)在,研究在不斷的進行,各個國家也在智能家居的概念上提出新的見解和思路,這個概念的總體目標是:將家庭的一切設(shè)備通過總線相連,然后交給一個智能控制系統(tǒng),通過這個控制系統(tǒng)就能呢個很好的掌控家里的一切環(huán)境,并且可感知外部環(huán)境的變化,讓居住環(huán)境和人更好的協(xié)調(diào)相處。
智能家居是物聯(lián)網(wǎng)細分領(lǐng)域發(fā)展較好的行業(yè),有研究機構(gòu)發(fā)布報告預(yù)測,智能家居在未來幾年將迅速增長,特別是智能家居設(shè)備制造行業(yè)和服務(wù)行業(yè)。在這樣大市場下,全球很多的大型企業(yè)都將未來的戰(zhàn)略定在智能家居市場,包括谷歌、蘋果、三星以及國內(nèi)小米、華為、BAT等各大科技公司,都已瞄準智能家居這一新風(fēng)口。去年我國智能家居市場規(guī)模預(yù)計突破1200億,智能家居的發(fā)展形式十分樂觀,也將在不久的將來走進千家萬戶。目前國內(nèi)的智能家居發(fā)展主要的瓶頸在于各大廠商都只是生產(chǎn)單品,沒有統(tǒng)一的制定統(tǒng)一的標準,導(dǎo)致很多模塊不能在集中控制,同時,智能家居的安全性也有待提高,解決這些難題是智能家居發(fā)展的必要之路。
ORVIBO的CEO王雄輝認為,在三年之內(nèi)智能家居將會有比較大的發(fā)展,即使不同的產(chǎn)品也能相互聯(lián)通,形成一整套的集控解決方案,以及通過智能家居“服務(wù)云”的方式打通,這種方式將會淘汰很多小規(guī)模的生產(chǎn)廠商,最終形成統(tǒng)一的標準,達到一個集控系統(tǒng)可以控制家庭各種設(shè)備的目的。隨著大數(shù)據(jù)的發(fā)展,生物智能,指紋安全,人臉檢測,語音分析等技術(shù)的不斷發(fā)展,未來的智能家居交互將會越來越友好,越來越智能,物聯(lián)網(wǎng)資深人士楊劍勇也表示,在不久的將來,智能家居也會更加方便人們的生產(chǎn)生活,隨著電腦技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展,人工智能應(yīng)用智能家居設(shè)備中將發(fā)揮巨大價值,通過對大數(shù)據(jù)的處理,準確的分析出人們的需求,能夠在生活中替人們解決一些問題。
1.3 本系統(tǒng)的主要任務(wù)
本系統(tǒng)主要利用Exynos4412開發(fā)板搭建家庭網(wǎng)關(guān)服務(wù)器。通過適配硬件,移植軟件,設(shè)計網(wǎng)頁等三個方面進行設(shè)計。
(1)適配硬件
本文主要使用的是USB2.0的攝像頭,同時用LED燈模擬家庭的照明和家電控制系統(tǒng)。
(2)軟件移植
該文的軟件部分主要包括Linux操作系統(tǒng)內(nèi)核的定制,根據(jù)需求來添加或者移除相應(yīng)的驅(qū)動。同時還包括Linux根文件系統(tǒng)的制作與移植,移植BOA服務(wù)器,移植MJPG-streamer網(wǎng)絡(luò)攝像頭驅(qū)動,編寫LED的驅(qū)動程序和應(yīng)用程序,來模擬家庭一些電器設(shè)備,最后是整體綜合分析。
(3)網(wǎng)頁設(shè)計
在網(wǎng)頁設(shè)計上采用html語言編寫靜態(tài)的網(wǎng)頁,在樣式上采用CSS3樣式,整體設(shè)計界面風(fēng)格看起來優(yōu)雅簡潔,美觀大方。同時為了實現(xiàn)動態(tài)交互的效果,還要應(yīng)該用到JavaScript。最后用cgi來編寫控制開發(fā)板上的LED的控制程序。
2. 總體方案設(shè)計
2.1 總體設(shè)計
根據(jù)系統(tǒng)要求,本智能家居控制系統(tǒng)采用ARM Cortex-A9 處理器作為核心處理器,在開發(fā)板上搭載WIFI模塊,USB攝像頭模塊。同時移植BOA服務(wù)器作為網(wǎng)頁處理服務(wù)器。在MJPG-streamer上將攝像頭采集到的視頻數(shù)據(jù)實時顯示在網(wǎng)頁上。總體設(shè)計方案如下圖2-1所示:

2.2 硬件方案
本系統(tǒng)硬件部分用Itop4412開發(fā)板為核心,外接WIFI模塊和USB攝像頭模塊,該開發(fā)板采用Exynos4412的主芯片,并且配置2GB雙通道DDR3的內(nèi)存,在系統(tǒng)的運行速度上比較快,適合處理大量數(shù)據(jù)的系統(tǒng)。加上配置16GB的存儲,也讓本開發(fā)板有著更大的存儲空間,對視頻數(shù)據(jù)的保存和相關(guān)配置信息存儲具有重要作用。在攝像頭的選擇上采用免驅(qū)攝像頭,該攝像頭可以直接插在開發(fā)板的USB插座上,只需要將數(shù)據(jù)通過USB線傳輸?shù)紸RM芯片上,在處理器上進行數(shù)據(jù)的處理。與此同時,在開發(fā)板上的GND,GPJ1(3),GPJ1(2),GPJ0(7),GPJ0(2),GPJ0(3),GPJ0(6)這七個引腳配置對應(yīng)的模式,由于輸出的電壓為1.7V,所以可以驅(qū)動LED。利用杜邦線連接到另一塊板子上,用來模擬家庭被控制的智能設(shè)備。
Exynos4412開發(fā)板簡介
為了保證USB攝像頭視頻采集的清晰度較高,也為了讓智能家居遠程監(jiān)控系統(tǒng)的性能更加穩(wěn)定。必須要采用性能比較高的處理器作為開發(fā)平臺。
本系統(tǒng)采用Exynos4412的主芯片,該芯片功能強大,性能好,適用于要求系統(tǒng)具有高穩(wěn)定性,高可靠性和很好地處理性能的場合。對于智能家居監(jiān)控系統(tǒng)而言,用戶需要很好地體驗效果,所以就必須保證系統(tǒng)的穩(wěn)定和可靠。選用Exynos4412的芯片對于該課題而言是個很好地選擇。既滿足了設(shè)計上的要求,在價格方面也很合理。實物圖如下圖2-2所示:

Exynos 4412芯片是三星發(fā)布的Cortex A9第二代中的其中一款,由于其性能比較高,也比較省電,所以在三星和魅族手機上都可以看到這款芯片的使用。
該芯片的主要特點是采用三星自家的電源管理芯片,在測試過程中表現(xiàn)非常好,不論是發(fā)熱的控制,還是電能的損耗都控制的非常合理。更重要的是可適配802.11b/g和802.11n的WIFI模塊,這樣可以讓數(shù)據(jù)傳輸?shù)母友杆俑咝?。同時,該芯片還可以根據(jù)需求來適配各種硬件,外設(shè)擴展十分豐富。
無線連接四合一單芯片MT6620模塊
聯(lián)發(fā)科技MT6620在單芯片中整合了FM收發(fā)器、GPS、藍牙4.0+HS和802.11n Wi-Fi這四種功能,由于其性能強大,四合一的芯片MT6620在手機使用比較廣泛,與此同時在封裝尺寸以及低功耗方面的優(yōu)勢,讓開發(fā)產(chǎn)品的時間大大縮短。這樣讓很多便攜式設(shè)備,包括手機、平板、PAD、PSP等設(shè)備具有聯(lián)網(wǎng)的功能。
MT6620 模塊采用先進復(fù)雜的無線電共存算法,在硬件架構(gòu)的設(shè)計上也采用比較先進的技術(shù),在各種音頻,視頻,圖像數(shù)據(jù)的傳輸上占有很大的優(yōu)勢。聯(lián)發(fā)科技獨家Symphony?軟件包,對于Android操作系統(tǒng)上先進的無線連接功能有很好的支持,這種良好的特性使得這個模塊具有很大的優(yōu)勢。
聯(lián)發(fā)科技MT6620支持很多無線連接標準,也對Wi-Fi標準支持特性很好,由于多種傳輸?shù)膮f(xié)議使得該芯片有著很高的性價比,在數(shù)據(jù)傳輸速度上也比較理想。與此同時,該芯片還支持藍牙和FM 無線電收發(fā)器。本系統(tǒng)采用該模塊作為WIFI連接互聯(lián)網(wǎng)的模塊,可具有很高的性能。實物圖如下圖2-3所示。

Web攝像頭視頻采集模塊
本文選用的是網(wǎng)絡(luò)攝像頭,也叫WEBCAM ,WEB CAMERA是一種結(jié)合了攝像頭和網(wǎng)絡(luò)壓縮技術(shù)的一種新型攝像頭,通過這種攝像頭,可以將數(shù)據(jù)通過網(wǎng)絡(luò)來傳輸,更重要的是,這種攝像頭使用起來十分簡單,將網(wǎng)絡(luò)攝像頭連接到電腦的USB端口,打開網(wǎng)絡(luò)瀏覽器就可以瀏覽攝像頭采集到的圖像信息了。
網(wǎng)絡(luò)攝像頭主要是將采集的視頻數(shù)據(jù)進行壓縮加密后傳到電腦上,電腦開啟服務(wù)器,將傳過來的信息通過局域網(wǎng),因特網(wǎng)或者無線網(wǎng)絡(luò)傳遞到用戶終端上。遠程客戶端用戶在能上網(wǎng)移動設(shè)備或者PC上通過瀏覽網(wǎng)頁,就可以實現(xiàn)對現(xiàn)場狀況的時時監(jiān)控。在需要監(jiān)控錄像的場合用處較大。由于其使用簡單,圖像清晰,所以在很多地方都使用這種攝像頭。下圖2-4是網(wǎng)絡(luò)攝像頭的實物圖。

2.3 軟件方案
本設(shè)計的重點主要是軟件的編寫,軟件主要從以下幾個方面進行設(shè)計。首先是選用什么樣的操作系統(tǒng)作為開發(fā)環(huán)境,由于Linux具有開源而且功能強大的特點,更重要的是他的網(wǎng)絡(luò)功能十分強大,選擇Linux作為本文的系統(tǒng)非常合適。然后在Linux操作系統(tǒng)上搭載網(wǎng)絡(luò)服務(wù)器,通過服務(wù)器將數(shù)據(jù)傳輸出去,在手機或者電腦上訪問對應(yīng)的網(wǎng)頁,就可以檢測到攝像頭捕捉到的視頻畫面。也可以將用戶發(fā)過來的控制指令進行解析,通過ARM處理器控制外圍設(shè)備,達到遠程控制的目的。上位機采用前端開發(fā)語言和cgi來進行設(shè)計,用戶只需要點擊按鈕或者開關(guān),就可以達到控制的目的。
Linux開發(fā)環(huán)境的搭建
Linux操作系統(tǒng)是由全世界Linux愛好者共同維護,并且將源碼開源在互聯(lián)網(wǎng)上,在網(wǎng)上由各種程序員進行維護和管理,目前已經(jīng)是最為流行的一款開放源代碼的操作系統(tǒng)。由于其開源的特點,越來越多的程序員自發(fā)的維護著這個系統(tǒng)。從1991年Linux的出現(xiàn)到現(xiàn)在,該系統(tǒng)的安全性和實用性正在不斷的加強,并且逐漸發(fā)展已經(jīng)成為一個有創(chuàng)造力的操作系統(tǒng)。在服務(wù)器市場上,Linux也越來越扮演著重要的作用。在中國市場上,Linux操作系統(tǒng)的作用也越來越重要,很多國產(chǎn)的操作系統(tǒng)也基于Linux內(nèi)核進行設(shè)計和修改。目前比較熱門Android手機也用到Linux操作系統(tǒng)。Linux在嵌入式領(lǐng)域也起到舉足輕重的作用,由于其系統(tǒng)的穩(wěn)定和安全,更重要的是需要的硬件資源配置要求不高,使得Linux操作系統(tǒng)很適合做一些嵌入式的項目。
本系統(tǒng)采用的開發(fā)環(huán)境是Linux,所以必須在Linux的主機上進行相關(guān)軟件的開發(fā)工作。為了設(shè)計的方便,采用VMware Workstation 12 Player虛擬機上安裝一個ubuntu的操作系統(tǒng)來進行相關(guān)源代碼的編譯。
對于一個基本的Linux的體系結(jié)構(gòu)包括用戶層和內(nèi)核層,底層主要利用內(nèi)核驅(qū)動來控制硬件,上層利用函數(shù)庫連接內(nèi)核空間,然后通過應(yīng)用層來起到控制硬件的作用,Linux的體系結(jié)構(gòu)如下圖2-5所示:

根據(jù)Linux操作系統(tǒng)的體系結(jié)構(gòu)的特點,Linux操作系統(tǒng)具有很好的耦合性,所以其底層的硬件可以根據(jù)內(nèi)核配置來裁剪。由于我們用到了MT6620模塊和網(wǎng)絡(luò)攝像頭的模塊,所以將這兩個設(shè)備的驅(qū)動配置進Linux內(nèi)核之中。
首先先將網(wǎng)絡(luò)攝像頭V4L USB驅(qū)動加入到內(nèi)核中。在這個過程中,用cd命令進入到內(nèi)核源碼目錄,查找到相應(yīng)的目錄后,在控制臺窗口輸入make menuconfig 命令,可以進入一個圖形的配置界面,該界面可以直觀的配置內(nèi)核。然后根據(jù)需求選擇Device Drivers --->,點擊Mutimedia support --->進入多媒體支持選項,然后在Video capture adapters --->中然后選擇V4L USB devices --->,進入到VL4 USB驅(qū)動的目錄,現(xiàn)在只需要將V4L USB devices --->的前面設(shè)置成[*],表示直接編譯進內(nèi)核。如圖2-7所示:

然后將MT6620 WIFI模塊的驅(qū)動編譯進內(nèi)核。
選擇Device Drivers ---> 進入設(shè)備驅(qū)動選項,選擇MediaTek Connectivity Combo Chip Support 將MediaTek Connectivity Combo Chip Support前面設(shè)置成[*],這樣就把WIFI模塊驅(qū)動編譯到內(nèi)核里面了,如下圖2-8所示:

按照上面的步驟裁剪好Linux內(nèi)核驅(qū)動硬件后,就可以返回到源碼目錄,用管理員root權(quán)限開始制作內(nèi)核文件。配置好驅(qū)動信息后就可以開始生成內(nèi)核文件了。最后將生成的zImage內(nèi)核鏡像文件下載到開發(fā)板上。這樣一個完整的內(nèi)核就制作完成了。
Linux操作系統(tǒng)根文件系統(tǒng)的移植
根文件系統(tǒng)是一種文件系統(tǒng),但是卻不同于普通的文件系統(tǒng),它需要保存Linux啟動時的一些配置信息,包括開發(fā)板的ip地址,或者一些開機自動啟動的一些進程等,無論是程序還是文件,都放在其對應(yīng)的目錄結(jié)構(gòu)之下。內(nèi)核文件的代碼也放在根文件系統(tǒng)中,在開機啟動時,會將初始化的腳本和一些重要的程序放在內(nèi)存中去執(zhí)行。
根文件系統(tǒng)在本中的作用十分重要,除了掛載BOA服務(wù)器外,很多程序和shell腳本都放在相應(yīng)的目錄中,對于后期程序的執(zhí)行有著十分關(guān)鍵的作用,并且在內(nèi)核啟動的過程中執(zhí)行一些初始化的腳本。在系統(tǒng)啟動時會自動掛載一些操作文件夾。其中包括以下常見的文件夾。下圖2-9是一些常見目錄結(jié)構(gòu)。

BusyBox 是制作根文件系統(tǒng)有一個比較好的工具,它可以根據(jù)需求來配置根文件系統(tǒng)的文件和目錄。這個工具里集成了一些比較好用的工具,BusyBox 有一些常用的命令像ls、echo和vi等一些比較常用的命令,這些命令對于大多數(shù)的Linux系統(tǒng)操作都能夠滿足要求,除此之外還包括一些強大的工具軟件,像telnet、grep、find、mount等命令,這些命令豐富了嵌入式Linux的功能,使功能更加齊全。所以BusyBox有著十分強大的功能,在制作根文件系統(tǒng)時利用這個工具就可以根據(jù)需求制作一個完整的根文件系統(tǒng)。在本文中,主要利用BusyBox來制作根文件系統(tǒng),首先將BusyBox安裝在宿主機上,在控制臺輸入指令sudo apt-get install busybox。此時該程序安裝在/bin目錄下,然后安裝源目錄,源目錄的作用為了編譯這個根文件系統(tǒng)的一些源代碼,每一個指令實際上就是一段程序。最后安裝libncurses-dev,輸入指令sudo apt-get install libncurses-dev。進過這三步,一個完整的BusyBox文件系統(tǒng)就在宿主機上搭建起來了,接下來是配置BusyBox。
配置根文件系統(tǒng)時,如果要用圖形界面,就可以直觀的配置BusyBox。首先進入配置界面,如下圖2-10所示:

由于根文件系統(tǒng)是運行在開發(fā)板上,所以需要指定對應(yīng)的ARM交叉編譯器,配置交叉編譯器如下圖2-11所示:

然而,此時的根文件系統(tǒng)還不是很完整,需要增加幾個目錄才能稱為完整的根文件系統(tǒng),必須的目錄有mnt,用來掛載外界的磁盤或者可移動的設(shè)備,還有l(wèi)ib目錄,用來存放系統(tǒng)必須的庫函數(shù),還有專門存放配置的etc目錄等。
交叉編譯環(huán)境的搭建
交叉編譯環(huán)境的搭建首先將交叉編譯工具移植到宿主機上,解壓到指定的目錄,此時,宿主機上就能夠使用交叉編譯函數(shù)的庫。目的是讓開發(fā)板上的內(nèi)核、根文件系統(tǒng)以及可運行的程序都用同一種gcc來進行編譯。然后根據(jù)下載的交叉編譯的gcc設(shè)置系統(tǒng)的環(huán)境變量,將放置交叉編譯工具的目錄添加到系統(tǒng)環(huán)境之中。
本文的開發(fā)環(huán)境是利用虛擬機上搭載ubuntu系統(tǒng),在ubuntu系統(tǒng)上配置gcc4.4.1版本,然后將環(huán)境變量添加進去,這樣就完成了交叉編譯環(huán)境的搭建。
BOA服務(wù)器的搭建
BOA是在嵌入式里比較常用的一種服務(wù)器,其功能比較強大,底層是由C語言來編寫服務(wù)端,所以占用資源比較少。功能上對于處理一般的問題是足夠的。在動態(tài)頁面的管理上也能很好的支持。當客戶通過瀏覽器來訪問時,就可以借助這個BOA服務(wù)器實現(xiàn)網(wǎng)頁與硬件的交互,達到控制的目的。具體移植過程如下:
(1)BOA服務(wù)器官網(wǎng)上下載源碼壓縮包,將壓縮包進行解壓,然后進行編譯。
(2)將編譯好的配置文件復(fù)制到根文件系統(tǒng)的/etc目錄中。
(3)建立主要的文件結(jié)構(gòu),不同的文件夾有著不同的功能,將網(wǎng)頁源碼放在/www目錄下,動態(tài)的處理代碼和函數(shù)放在/www/cgi-bin目錄中,其他的文件就放在/var目錄中,這樣就能很好的保持程序各個部分的分工明確。
(4)修改配置文件,指定對應(yīng)的文件和網(wǎng)頁源碼文件對應(yīng)的目錄。
(5)將編譯好的BOA極其文件夾轉(zhuǎn)移到開發(fā)板上,然后開啟BOA服務(wù)即可。
可以通過手機或者可上網(wǎng)設(shè)備連接開發(fā)板上的ip地址,就可以在設(shè)備上看到我們剛放在服務(wù)器上的網(wǎng)頁的效果。具體的效果如下圖2-12所示:

MJPG-streamer的移植
MJPG-streamer是網(wǎng)上的一種比較通用的網(wǎng)絡(luò)攝像頭的一種處理程序,它的功能很強大,可以直接把網(wǎng)絡(luò)攝像頭的視頻數(shù)據(jù)通過無線網(wǎng)或者有線網(wǎng)傳到客戶端的瀏覽器上,用戶只需要瀏覽網(wǎng)頁就可以看到采集到的視頻信息。本文采用的是MJPG-streamer結(jié)合BOA服務(wù)器的方式來實現(xiàn)遠程智能家居的監(jiān)視與控制。其具體移植過程如下:
首先在官網(wǎng)下在MJPG-streamer的源代碼,解壓到宿主機的指定的目錄。指定交叉編譯工具./configure --prefix=/home/vmuser --host=ARM-none-Linux-gnueabi,在完成上述操作后就可以進行源碼的最后編譯了。
GPIO口的配置使用
該程序主要的部分是如何配置并且使用ARM板的硬件資源,通過配置GPIO口的使用方式,配置成輸出模式。該部分主要作用就是對ARM引腳的使用進行配置。然后在遠程監(jiān)控系統(tǒng)上進行控制。
首先,在內(nèi)核源碼目錄中對GPIO引腳進行申請,將沒有使用的GPIO引腳釋放,然后使用vim include/Linux/gpio.h打開文件。查找到該函數(shù)對應(yīng)的硬件引腳的連接,最后編寫對應(yīng)引腳的驅(qū)動程序。該程序主要使用的是開發(fā)板上的GND,GPJ1(3),GPJ1(2),GPJ0(7),GPJ0(2),GPJ0(3),GPJ0(6)這八個引腳。在對ARM引腳使用時必須使用相應(yīng)的驅(qū)動程序來控制底層。所以先寫驅(qū)動程序來配置引腳。
驅(qū)動函數(shù)框架
對于智能家居控制系統(tǒng)而言,主要是利用弱電控制強電的方法,一般只需要操作引腳輸出一個比較小的電壓,然后通過繼電器來起到控制家庭電器開關(guān)的作用。所以核心的功能是讓ARM引腳根據(jù)特定的環(huán)境產(chǎn)生一個輸出信號。本文主要是采用LED來模擬家庭里的各種電器設(shè)備。
Linux的驅(qū)動函數(shù)主要作用是連接硬件資源,然后將資源交給用戶空間來管理。應(yīng)用層主要的作用就是操作這些驅(qū)動函數(shù),從而達到控制硬件的作用。Linux系統(tǒng)函數(shù)的整體特點如下圖2-13所示:

在Linux操作系統(tǒng)中,其驅(qū)動函數(shù)主要包括入口函數(shù),出口函數(shù),內(nèi)核空間到用戶空間的映射函數(shù)這幾個方面,所以在明確功能的情況下來配置驅(qū)動函數(shù)。Linux系統(tǒng)函數(shù)的控制方式如下圖2-14所示:

驅(qū)動函數(shù)的入口函數(shù)
在Linux用insmod命令安裝一個驅(qū)動后,會在/dev目錄上創(chuàng)建一個節(jié)點,而這個節(jié)點的控制就是內(nèi)核空間到用戶空間的一種方式。當安裝驅(qū)動時,會自動進入驅(qū)動函數(shù)的入口處。入口函數(shù)主要的作用是注冊一個設(shè)備,并且分配設(shè)備號。進入到驅(qū)動函數(shù)入口函數(shù)時,首先要注冊設(shè)備,再在內(nèi)核空間創(chuàng)建設(shè)備號。本文采用的是字符設(shè)備驅(qū)動程序,所以借助雜項設(shè)備類即可實現(xiàn),下面是GPIO驅(qū)動的入口函數(shù)。
/*函數(shù)的入口*/ static int my_dev_init(void) { /*注冊設(shè)備*/ major=register_chrdev(0,"mydev",&fops); //自動創(chuàng)建設(shè)備號 myclass=class_create(THIS_MODULE,"mydev"); if(IS_ERR(myclass))
{ /*錯誤的創(chuàng)建雜項設(shè)備的類*/ return -1;
}
mydevice=device_create(myclass,NULL,MKDEV(major,0),NULL,"mydev");
printk("mydev ok!"); return 0;
}
驅(qū)動函數(shù)的框架
在注冊設(shè)備,調(diào)用register_chrdev函數(shù)時,分配一個fops結(jié)構(gòu)體,這個結(jié)構(gòu)體主要用來操作底層的硬件,并且和應(yīng)用層的函數(shù)一一對應(yīng)。所以先編寫出這個結(jié)構(gòu)體框架,然后再完善函數(shù)功能。
/*寫出驅(qū)動的框架*/ struct file_operations fops=
{ .owner=THIS_MODULE,
.open=my_open,
.read=my_read,
.write=my_write,
.release=my_release,
};
在本文中,用到的比較重要的兩個函數(shù)是my_open和my_write兩個函數(shù)。
/*打開設(shè)備*/ static ssize_t my_open(struct inode *inode, struct file *file) { int ret; int i; for(i=0; i<6; i++)
{ //申請6個gpio口 ret = gpio_request(my_gpios[i], "LED"); if (ret) { return ret;
}
s3c_gpio_cfgpin(my_gpios[i], S3C_GPIO_OUTPUT); //將引腳設(shè)置為輸出模式 gpio_set_value(my_gpios[i], 1);
} return 0;
}
在open函數(shù)中,主要是申請使用這六個gpio引腳,然后將這六個引腳設(shè)置成輸出模式,并且設(shè)置成高電平。
static ssize_t my_write(struct file *file, const char __user *in, size_t size, loff_t *off) { int abc;
copy_from_user(&abc,in,sizeof(abc)); switch(abc)
{ case 1:
gpio_set_value(my_gpios[0], 1); break; case 2:
gpio_set_value(my_gpios[0], 0); break; case 3:
gpio_set_value(my_gpios[1], 1); break; case 4:
gpio_set_value(my_gpios[1], 0); break; case 5:
gpio_set_value(my_gpios[2], 1); break; case 6:
gpio_set_value(my_gpios[2], 0); break; case 7:
gpio_set_value(my_gpios[3], 1); break; case 8:
gpio_set_value(my_gpios[3], 0); break; case 9:
gpio_set_value(my_gpios[4], 1); break; case 10:
gpio_set_value(my_gpios[4], 0); break; case 11:
gpio_set_value(my_gpios[5], 1); break; case 12:
gpio_set_value(my_gpios[5], 0); break; default: break;
} return size;
}
本函數(shù)中將用戶空間傳遞過來的值進行判斷,不同的數(shù)字對應(yīng)著不同的操作,從而達到控制硬件的目的。
應(yīng)用層函數(shù)的編寫
應(yīng)用層主要是控制邏輯,不需要關(guān)心底層驅(qū)動如何控制。在Linux系統(tǒng)中只需要將設(shè)備當成文件操作即可。實際上編寫應(yīng)用函數(shù)只需要關(guān)心寫什么數(shù)據(jù)就可以達到什么效果,所以大大簡化了操作的難度。這也是Linux將驅(qū)動層和應(yīng)用層分開的一個好處。操作方式可以總結(jié)為為打開設(shè)備,向設(shè)備讀數(shù)據(jù)或者寫數(shù)據(jù),關(guān)閉設(shè)備,這三個步驟。用open函數(shù)打開fd=open(LEDs,O_RDWR|O_RDONLY|O_NONBLOCK)),打開設(shè)備后就可以操作該文件的讀寫函數(shù)了,本文主要用到寫函數(shù)write中向設(shè)備里寫數(shù)據(jù),這樣達到控制的目的,最后close(fd)關(guān)閉設(shè)備文件。
3.監(jiān)控系統(tǒng)平臺的客戶端
本文的控制平臺主要是利用瀏覽器,在電腦或者手機的瀏覽器上輸入相應(yīng)的ip地址就可以進入后臺管理系統(tǒng)。而用戶只需要操作網(wǎng)頁上的相應(yīng)的鏈接即可達到控制的目的。利用網(wǎng)頁的最大好處就是可以隨時隨地的利用各種能上網(wǎng)的平臺控制家庭的各種設(shè)備。Web前端采用html語言來展示,同時利用cgi對后端的服務(wù)器進行控制。
3.1 登錄界面的設(shè)計
對于一個智能家居的控制管理系統(tǒng),其安全性和保密性非常的重要,所以只能是智能家居系統(tǒng)的所有者才可以進入后臺管理系統(tǒng),對設(shè)備進行控制和管理[18]。在這里需要輸入用戶名和密碼才能進入。登錄界面如下圖3-1所示:

3.2 客戶端管理的總體布局
在集控系統(tǒng)中,主要集成數(shù)據(jù)管理和數(shù)據(jù)展示,還有集成控制。這里前端用CSS3和html,服務(wù)器采用BOA,在后臺控制上采用cgi來操作應(yīng)用函數(shù)。下圖3-2是智能家居集控系統(tǒng)的照明系統(tǒng)界面。

在網(wǎng)頁與服務(wù)器的交互上,采用的是ajax技術(shù),該技術(shù)可以在不刷新網(wǎng)頁的情況下向服務(wù)器提交數(shù)據(jù)。用按鈕及控件的數(shù)據(jù)改變事件或者點擊事件就可以觸發(fā)交互。在本文中,當用戶點擊網(wǎng)頁上的開關(guān)按鈕時,會觸發(fā)相應(yīng)的事件。當BOA服務(wù)器接收到事件后,可以在后臺處理cgi程序。
4. 智能家居監(jiān)控系統(tǒng)綜合調(diào)試分析
調(diào)試部分在整個項目的測試過程中有十分關(guān)鍵的作用,對于系統(tǒng)整體的穩(wěn)定性和后期的評估和維護有著關(guān)鍵性的作用。為了防止后期出現(xiàn)問題,整體項目的耦合性必須非常的好。然后在此基礎(chǔ)上添加功能才不用項目重構(gòu),只需要添加部分功能即可。所以這個項目必須是可更新的。本文主要在硬件,軟件,web這三個塊進行調(diào)試。在使用開發(fā)板時,必須搭建好相應(yīng)的開發(fā)環(huán)境,然后用特地的調(diào)試方法進行調(diào)試,將每個部分的問題降低到最小。而且要不斷的思考符合大眾的操作方式。讓不懂電路設(shè)計的用戶也能很容易的操作這套系統(tǒng)。
4.1 系統(tǒng)硬件調(diào)試
在硬件方面,前期的選材,中期的控制,后期維護這三個方面。在選擇器件方面要結(jié)合功能和現(xiàn)有的資源。ARM適合運行操作系統(tǒng),而且ARM的性能也比較高,適合像這種視頻處理這種大數(shù)據(jù)量的操作。智能家居也需要穩(wěn)定,不容易出現(xiàn)故障。智能家居還應(yīng)該包括各種設(shè)備,空調(diào),電視,燈,等設(shè)備。實際上設(shè)備只用操作GPIO即可,所以選擇ARM芯片的另一個好處是引腳資源豐富,便于后期的擴展。選擇網(wǎng)絡(luò)攝像頭好處是這種攝像頭是通用的,在市面上很容易購買到,增加了系統(tǒng)的耦合性。系統(tǒng)硬件調(diào)試比較關(guān)鍵的部分是中期控制,這個也是難點。首先要了解Linux操作系統(tǒng),然后在此基礎(chǔ)上操作ARM上的硬件資源。然后是知道如何操作WIFI模塊,網(wǎng)絡(luò)攝像頭,串口的通信協(xié)議,udp以及網(wǎng)絡(luò)的數(shù)據(jù)傳輸方式。
4.2 系統(tǒng)軟件調(diào)試
本系統(tǒng)的開發(fā)環(huán)境是利用ubuntu系統(tǒng)來作為系統(tǒng)的開發(fā)平臺,在此基礎(chǔ)上搭建嵌入式的gcc進行uboot,內(nèi)核,根文件系統(tǒng)的編譯和制作。對制作好的完整的Linux進行查看,主要是將開發(fā)板通過串口連接到電腦就可以看到內(nèi)核的打印信息。然后在控制臺上進行各種命令的控制。如果系統(tǒng)正常運行。表示制作的Linux沒有問題,接下來只需要調(diào)試驅(qū)動程序和服務(wù)器即可。當開啟BOA服務(wù)器,同時在同一個局域網(wǎng)內(nèi)的電腦或者手機進行測試,輸入相應(yīng)的ip地址,就可以看到在www目錄下的的網(wǎng)頁了,一般而言,都會在配置文件中指定www目錄下的默認顯示文件。本文配置的是index.html表示默認文件,該網(wǎng)頁就是登錄界面。
4.3 系統(tǒng)網(wǎng)頁調(diào)試
系統(tǒng)網(wǎng)頁是給用戶來進行控制和操作的,力求簡潔,美觀,功能齊全[20]。在這個方面上需要設(shè)計,所以樣式表很重要,采用CSS3可以設(shè)計出很多的特效,讓網(wǎng)頁看上去更加的美觀。通過連接服務(wù)器,然后連接到同一WIFI,登錄開發(fā)板的ip,可以看下圖4-1所示的結(jié)果。

該網(wǎng)頁界面主要是來驗證登錄是否成功。在輸入帳號或者密碼之后,判斷該帳號密碼是否正確,如果正確則進入主控制界面,可以看到攝像頭采集到的視頻信息。如圖4-2所示:

4.4 系統(tǒng)整體聯(lián)接調(diào)試
進入系統(tǒng)時首先開啟WIFI模塊,在這里由于ip地址可變,所以這里直接用命令來連接WIFI。用shell腳本來開啟WIFI。Shell腳本的編寫如下面的代碼所示。
#!/bin/sh wpa_passphrase abc “12345678”>> /etc/wap_supplicant.conf
/etc/init.d/mt6620
執(zhí)行該腳本程序,進行控制啟WIFI后可以看到WIFI模塊上的LED燈閃爍,表示W(wǎng)IFI模塊正常開啟。開啟BOA服務(wù)器和MJPG-streamer。這里也用shell腳本來執(zhí)行。
當開啟這兩個服務(wù)后,就可以在手機或者電腦上修改和控制開發(fā)板上的硬件了,此時在手機上輸入開發(fā)板的ip地址可以看到可以進入服務(wù)器的網(wǎng)頁,如圖4-3所示:

手機端的遠程集控系統(tǒng)也是以網(wǎng)頁的形式展示的,通過輸入用戶名和密碼,進入后臺管理系統(tǒng)。在該界面的操作即可遠程操作開發(fā)板上的硬件資源。手機端視頻展示效果如下圖4-4所示:

5.實物及代碼

主要的客戶端代碼(主界面)
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>智能家居管理界面title> <link rel="stylesheet" type="text/css" href="css/style.css" /> <script type="text/javascript" src="js/jquery-1.6.min.js">script> <script type="text/javascript" src="js/index.js">script> head> <body> <script language="Javascript" type="text/javascript"> setInterval("timer.innerHTML=new Date().toLocaleString()"); window.onload = function (){
setInterval("timer.innerHTML=new Date().toLocaleString()",1000);
} script> <div class="nav-top"> <span>智能家居遠程集控系統(tǒng)span> <div class="nav-topright"> <p id="timer"> p> <span>您好:管理員span> <span>注銷span> div> div> <div class="nav-down"> <div class="leftmenu1"> <div class="menu-oc"><img src="images/menu-all.png" />div> <ul> <li> <a class="a_list a_list1">家電控制a> <div class="menu_list menu_list_first"> <a href="light.html">照明系統(tǒng)a> <a href="kongtiao.html">空調(diào)控制a> <a href="chuanlian.html">窗簾系統(tǒng)a> <a href="door.html">門禁系統(tǒng)a> div> li> <li> <a class="a_list a_list2">實時數(shù)據(jù)a> <div class="menu_list"> <a href="hint.html">照明時間a> <a href="hint.html">空調(diào)時間a> <a href="hint.html">開機時間a> <a href="hint.html">電量統(tǒng)計a> div> li> <li> <a class="a_list a_list3">視頻監(jiān)控a> <div class="menu_list"> <a href="home.html">開啟視頻a> div> li> <li> <a class="a_list a_list3">設(shè)備信息a> <div class="menu_list"> <a href="#">服務(wù)信息a> <a href="#">聯(lián)系方式a> div> li> ul> div> <div class="leftmenu2"> <div class="menu-oc1"><img src="images/menu-all.png" />div> <ul> <li> <a class="j_a_list j_a_list1">a> <div class="j_menu_list j_menu_list_first"> <span class="sp1"><i>i>家電控制span> <a href="light.html">照明系統(tǒng)a> <a href="kongtiao.html">空調(diào)控制a> <a href="chuanlian.html">窗簾系統(tǒng)a> <a href="door.html">門禁系統(tǒng)a> div> li> <li> <a class="j_a_list j_a_list2">a> <div class="j_menu_list"> <span class="sp2"><i>i>實時數(shù)據(jù)span> <a href="hint.html">照明時間a> <a href="hint.html">空調(diào)時間a> <a href="hint.html">開機時間a> <a href="hint.html">電量統(tǒng)計a> div> li> <li> <a class="j_a_list j_a_list3">a> <div class="j_menu_list"> <span class="sp3"><i>i>視頻監(jiān)控span> <a href="home.html">開啟視頻a> div> li> ul> div> <div class="rightcon"> <div class="right_con"> <div style="text-align:center;"> <li> <font color="#4A374A" size="20">33font> li> div> <div style="text-align:center;"> <li> <font size="5" color="red">遠程攝像頭數(shù)據(jù)監(jiān)控font> li> <li> <img src="http://192.168.23.2:8080/?action=stream" width="512px" height="384px" /> li> div> div> div> div> body> html>
6.總結(jié)
本文根據(jù)物聯(lián)網(wǎng)的發(fā)展趨勢,結(jié)合硬件和軟件,設(shè)計出智能家居控制系統(tǒng)的解決方案,同時搭載的系統(tǒng)和使用的硬件都是自由裁剪,使得適配性很強。不同于很多的物聯(lián)網(wǎng)攝像頭,物聯(lián)網(wǎng)燈等單一的產(chǎn)品,采用統(tǒng)一集成管理的模式,讓操作更加簡潔明了。采用Linux操作系統(tǒng)作為開發(fā)系統(tǒng)的平臺除了占用內(nèi)存等資源比較少,用戶體驗性也很好。
科學(xué)技術(shù)的不斷進步,帶給人們很多好處,同時也促進了智能家居的發(fā)展。物聯(lián)網(wǎng)智能家居的崛起將是大勢所趨,在人們的生產(chǎn)生活中發(fā)揮著舉足輕重的作用。目前物聯(lián)網(wǎng)智能家居正在不斷發(fā)展,由近幾年的車聯(lián)網(wǎng)可以看出,在不久的將來,人們的生活越來越智能化。雖然智能家居的概念近幾年很火熱,但是缺少統(tǒng)一的標準,使得各種方案沒法統(tǒng)一,讓管理變得復(fù)雜。相信在不久的未來,這些問題都會被克服。