基于Linux-Qt的智能家居系統(tǒng)設(shè)計(jì)_第1頁
基于Linux-Qt的智能家居系統(tǒng)設(shè)計(jì)_第2頁
基于Linux-Qt的智能家居系統(tǒng)設(shè)計(jì)_第3頁
基于Linux-Qt的智能家居系統(tǒng)設(shè)計(jì)_第4頁
基于Linux-Qt的智能家居系統(tǒng)設(shè)計(jì)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于Linux/Qt的智能家居系統(tǒng)設(shè)計(jì)

針對智能家居的特點(diǎn)及應(yīng)用背景,設(shè)計(jì)了一種家庭多功能限制系統(tǒng)。該系統(tǒng)采納飛思卡爾公司armCortexA8系列的i.MX51處理器作為MCU,在其上移植嵌入式Linux作為軟件開發(fā)平臺,并利用Qt相關(guān)技術(shù)為基礎(chǔ)設(shè)計(jì)友好的用戶界面,實(shí)現(xiàn)了arm板的各功能模塊與服務(wù)器端的交互。系統(tǒng)同時(shí)具備數(shù)字可視對講、信息收發(fā)、家電限制、安防報(bào)警、家庭消遣等功能。

1系統(tǒng)的架構(gòu)和功能

家庭智能限制系統(tǒng)主要由室內(nèi)分機(jī)、單元門口機(jī)、小區(qū)圍墻機(jī)、管理中心終端機(jī)、管理中心服務(wù)器以及附件組成。系統(tǒng)采納分布式網(wǎng)絡(luò)結(jié)構(gòu),可以依據(jù)住戶數(shù)量對系統(tǒng)的容量進(jìn)行擴(kuò)充。

(1)室內(nèi)機(jī)是用戶在室內(nèi)進(jìn)行操作的主要平臺,其功能組成為:可視對講、信息服務(wù)、家電限制、安防報(bào)警、家庭消遣等??梢晫χv模塊主要實(shí)現(xiàn)雙向可視通話、視頻監(jiān)控、留言/留影、開鎖等功能;信息服務(wù)模塊主要用來收發(fā)物業(yè)信息和小區(qū)廣播,支持文本、圖片形式,并實(shí)現(xiàn)與可視對講模塊的影音共享;家電限制模塊包括對燈光、窗簾、空調(diào)、電梯等設(shè)施的無線限制,并預(yù)設(shè)了情境模式;安防報(bào)警模塊支持對煙感、門磁、煤氣泄漏檢測等的自動報(bào)警,并可通過GPRS/3G技術(shù)將報(bào)警信息傳送到用戶手機(jī)上;家庭消遣模塊支持常見格式的音視頻文件的播放(主要依靠硬件解碼)以及對常見格式的圖片的閱讀(電子相框)。

(2)單元門口機(jī)的主要功能是完成與所在單元樓的隨意住戶以及管理中心機(jī)的可視通話,除了具備留言/留影功能外,還供應(yīng)觸摸屏校準(zhǔn)、背光調(diào)整、密碼設(shè)置等功能。

(3)圍墻機(jī)的基本功能和單元門口機(jī)類似,但可視對講、留言/留影功能是針對小區(qū)內(nèi)全部住戶的。

(4)中心機(jī)是整個(gè)系統(tǒng)的神經(jīng)中樞,管理人員通過管理中心的限制設(shè)備管理各子系統(tǒng)的終端,其功能包括:可視對講、視頻監(jiān)控、查看報(bào)警信息、解除設(shè)備故障、信息服務(wù)、系統(tǒng)設(shè)置、遠(yuǎn)程管理等。

2系統(tǒng)的實(shí)現(xiàn)方案

2.1Qt的信號/槽機(jī)制

Qt是一個(gè)跨平臺的C++應(yīng)用程序框架,完全面對對象、易于擴(kuò)展且允許真正的組件編程。Qt的C++類庫封裝了適應(yīng)不同操作系統(tǒng)的訪問細(xì)微環(huán)節(jié),這使得它能夠快速地部署于各種桌面與嵌入式系統(tǒng)中[1]。

信號/槽機(jī)制是Qt的核心特性,這種機(jī)制真正實(shí)現(xiàn)了消息的封裝,完全可以取代原始的回調(diào)和消息機(jī)制。信號和槽的連接通過connect()函數(shù)完成,connect()函數(shù)是QObject類中的靜態(tài)函數(shù),其函數(shù)原型如下:

BoolQObject::connect(constQObject*sender,

constchar*signal,constQObject*receiver,constchar*member)

其中,sender和receiver是指向QObject的指針,signal和slot是不帶有參數(shù)的函數(shù)名。

2.2基于XML格式的Socket多線程通信

Linux中的網(wǎng)絡(luò)編程主要通過Socket接口實(shí)現(xiàn),在Qt環(huán)境里,對Socket進(jìn)行了封裝,并建立了相應(yīng)的QTcpSocket類來實(shí)現(xiàn)TCP客戶端和服務(wù)器的通信。QTcpSocket繼承了QIODevice,所以QTcpSocket可以運(yùn)用QDataStream進(jìn)行數(shù)據(jù)的讀取和寫入。

可擴(kuò)展標(biāo)記語言XML(eXtensibleMarkupLanguage)是一種用于數(shù)據(jù)交換和數(shù)據(jù)存儲的多用途文本格式。對于XML格式的數(shù)據(jù),Qt中的QtXml模塊供應(yīng)了DOM和SAX兩種處理方式。本文采納的DOM方式把XML文檔轉(zhuǎn)換成一個(gè)可以遍歷的樹形結(jié)構(gòu),這樣便可以隨意訪問其中的節(jié)點(diǎn),因此要明顯簡潔得多。

室內(nèi)機(jī)和中心機(jī)之間的通信采納多線程方式實(shí)現(xiàn)。多線程方式具有降低內(nèi)存、提高程序響應(yīng)速度等優(yōu)點(diǎn),特殊適用于嵌入系統(tǒng)。系統(tǒng)中建立了三個(gè)主線程:(1)GUI線程:用于執(zhí)行main()主函數(shù),響應(yīng)用戶的界面操作;(2)tcpServer偵聽線程:用于對指定端口進(jìn)行監(jiān)聽;(3)tcpSocket傳輸線程:負(fù)責(zé)消息的接收和回復(fù)。下面以用戶主動更新小區(qū)廣播為例具體說明Socket通信的流程:(1)室內(nèi)機(jī)首先啟動一個(gè)線程,將用戶的更新懇求結(jié)構(gòu)轉(zhuǎn)化成標(biāo)準(zhǔn)的XML格式(假如是新設(shè)備第一次開機(jī),要先手動進(jìn)行IP的設(shè)置),(2)調(diào)用connectToHost()函數(shù)懇求與中心機(jī)建立連接,處于監(jiān)聽狀態(tài)的中心機(jī)接到懇求后,就會安排一個(gè)Socket套接字來處理連接:首先依據(jù)解析出來的XML的Type節(jié)點(diǎn)推斷懇求類型,假如是純文本則從數(shù)據(jù)庫的Text表讀取,假如是圖片則從硬盤讀取,然后調(diào)用QIODevice::write()函數(shù)發(fā)送;(3)室內(nèi)機(jī)接到應(yīng)答信號readyRead()后就起先進(jìn)行信息的收取,依據(jù)消息的Type節(jié)點(diǎn)類型分別寫入數(shù)據(jù)庫和硬盤。Socket多線程通信流程如圖1所示。

2.3并行數(shù)據(jù)庫設(shè)計(jì)

為了實(shí)現(xiàn)數(shù)據(jù)庫的并行操作,使GUI界面與數(shù)據(jù)庫相分別,從而讓界面能更快地響應(yīng)用戶的一般操作,同樣要用到Qt的多線程編程。在系統(tǒng)啟動時(shí),首先要建立一個(gè)全局對象m_query,以便于各個(gè)實(shí)體類與數(shù)據(jù)庫類進(jìn)行連接。這樣,每當(dāng)有數(shù)據(jù)庫操作懇求時(shí)便會實(shí)例化一個(gè)m_query來創(chuàng)建一個(gè)線程用于處理該懇求。m_query對象中包含兩個(gè)類:(1)QueryThread,用于為每個(gè)數(shù)據(jù)操作創(chuàng)建一個(gè)線程;(2)Worker,用于實(shí)現(xiàn)數(shù)據(jù)庫的相關(guān)操作,如加載數(shù)據(jù)庫驅(qū)動、進(jìn)行數(shù)據(jù)查詢/插入/刪除等。

圖2為數(shù)據(jù)庫的查詢操作流程。首先在實(shí)體類里創(chuàng)建兩個(gè)connect連接,分別用于發(fā)送和接收查詢結(jié)果,并生成SQL語句向QueryThread提交查詢懇求信號。QueryThread收到懇求后為其創(chuàng)建一個(gè)線程,并交由Worker類進(jìn)行具體數(shù)據(jù)庫查詢操作。Worker類得出查詢結(jié)果后,先傳遞給QueryThread,再由其將查詢結(jié)果返回到實(shí)體類。

關(guān)鍵代碼如下:

connect(this,SIGNAL(seek(constQString&)),m_query,

SIGNAL(seek_execute(constQString&)));

connect(m_query,SIGNAL(seek(constQList

&)),this,SLOT(slotResult(constQList&)));

voidtext::database(){

QStringsql=“select*fromTextorderbydatedesc“;

emitseek_execute(sql);

}

2.4音視頻同步傳輸技術(shù)

i.MX51處理器包含了支持硬件視頻編解碼的VPU單元,并自帶了完整的多媒體解決方案。因此,系統(tǒng)中采納其自帶的多媒體軟件包進(jìn)行音視頻流的采集和編解碼[2]。

考慮到小區(qū)內(nèi)可視通話時(shí)因并發(fā)數(shù)過大而可能導(dǎo)致的網(wǎng)絡(luò)擁塞狀況,系統(tǒng)還須要供應(yīng)肯定的QoS機(jī)制來保證在網(wǎng)絡(luò)帶寬較低時(shí)也能達(dá)到音視頻的同步傳輸。本文采納基于時(shí)間戳的實(shí)時(shí)同步傳輸技術(shù),通過設(shè)置可變大小的緩沖區(qū)機(jī)制,依據(jù)小區(qū)網(wǎng)絡(luò)狀況自動調(diào)整傳輸參數(shù),以音頻質(zhì)量優(yōu)先保證為原則,依據(jù)時(shí)間戳實(shí)時(shí)調(diào)整視頻數(shù)據(jù)的播放。具體實(shí)現(xiàn)過程如下[3]:

(1)發(fā)送端采納兩個(gè)獨(dú)立的進(jìn)程分別對音視頻信息進(jìn)行采樣和打包,然后放到各自的緩沖隊(duì)列中等待發(fā)送。

(2)音視頻數(shù)據(jù)通過同一個(gè)通道發(fā)送到網(wǎng)絡(luò)(采納信號量機(jī)制保證音視頻數(shù)據(jù)對通道的互斥訪問)。

(3)由于音視頻兩個(gè)數(shù)據(jù)包的長度差別很大,所以將接收端收到的數(shù)據(jù)依據(jù)包的大小進(jìn)行區(qū)分。

(4)音視頻各自拆包組幀。由于人的聽覺對聲音的不連續(xù)比視覺對圖像的不連續(xù)更敏感,所以采納音頻流作為主流,視頻流作為從流??蛻舳私邮盏揭纛l數(shù)據(jù)包后,不必與視頻數(shù)據(jù)包協(xié)調(diào)就可馬上播放,而視頻幀到達(dá)時(shí)則依據(jù)時(shí)間戳進(jìn)行對比,從而進(jìn)行相應(yīng)的同步處理。

(5)為保證音視頻的實(shí)時(shí)同步,采納多線程分別對音頻和視頻進(jìn)行播放。

3i.MX51平臺移植

3.1搭建LTIB開發(fā)環(huán)境

LTIB(LinuxTargetImageBuilder)是飛思卡爾公司開發(fā)的一個(gè)用于部署B(yǎng)SP的工具,含有U-Boot等引導(dǎo)加載程序,支持Bootloader和內(nèi)核映像的構(gòu)建。利用該工具,可以定制出符合GNU/Linux標(biāo)準(zhǔn)的跨平臺的根文件系統(tǒng)。本設(shè)計(jì)選擇運(yùn)用飛思卡爾公司供應(yīng)的L2.6.31_10.07.11_ER_source.tar.gz集成源碼包,在一臺安裝了Ubuntu10.04操作系統(tǒng)的PC機(jī)上配置安裝LTIB[4]。其過程如下:

(1)解壓縮源碼包,執(zhí)行./install進(jìn)入安裝LTIB的吩咐提示。

(2)執(zhí)行./ltib進(jìn)入LTIB的配置界面。

(3)在LTIB配置Platform時(shí)選擇i.MX51平臺。

(4)配置Kernel時(shí)選擇CLAAWVGAPanel(LCD觸摸屏驅(qū)動)和SoCAudiosupportforIMX-SGTL5000(聲卡驅(qū)動),其他保持默認(rèn)。

(5)將交叉編譯工具arm-none-linux-gnueabi-gcc加入PATH環(huán)境變量,在ltib根書目執(zhí)行下述吩咐,交叉編譯Qt庫:

./ltib-mprep-pqt-embedded.spec

./ltib-mscbuild-pqt-embedded.spec

(6)執(zhí)行makeinstall,在ltib下的rootfs書目就會生成相應(yīng)的U-Boot、內(nèi)核和文件系統(tǒng),將將其復(fù)制到目標(biāo)板的TF卡上。

3.2架設(shè)NFS文件系統(tǒng)

為了簡化調(diào)試過程和縮短開發(fā)周期,在Linux主機(jī)上建立了NFS網(wǎng)絡(luò)文件系統(tǒng),這樣就實(shí)現(xiàn)了宿主機(jī)與目標(biāo)板的文件共享。開發(fā)過程簡化為:Linux主機(jī)編譯生成目標(biāo)平臺的可執(zhí)行文件→復(fù)制文件到NFS共享書目→目標(biāo)板運(yùn)行程序,從而省去了重復(fù)制作鏡像、下載鏡像、重啟開發(fā)板等步驟,節(jié)約了大量的開發(fā)時(shí)間。目標(biāo)板的NFS啟動信息如圖3所示。

4系統(tǒng)測試及結(jié)果

4.1并發(fā)測試

并發(fā)測試主要用來測試多個(gè)用戶同時(shí)訪問同一個(gè)應(yīng)用程序、同一個(gè)數(shù)據(jù)記錄時(shí)是否存在死鎖或其他問題。由于本系統(tǒng)是面對一個(gè)小區(qū)的住戶,因此系統(tǒng)的并發(fā)測試尤為重要。

數(shù)據(jù)庫并發(fā)測試:室內(nèi)機(jī)開啟多個(gè)線程同時(shí)訪問中心機(jī)服務(wù)器,界面并不會因大量的數(shù)據(jù)操作而出現(xiàn)“凍結(jié)”現(xiàn)象,CPU占用穩(wěn)定,數(shù)據(jù)庫返回結(jié)果顯示正常。

信息發(fā)布測試:中心機(jī)開啟多個(gè)線程同時(shí)發(fā)送廣播信息,各室內(nèi)機(jī)接收正常,不會出現(xiàn)顯示錯(cuò)誤或“丟包”現(xiàn)象。

4.2跨網(wǎng)段測試

考慮到小區(qū)用戶一般在幾百甚至上千,一個(gè)網(wǎng)段的IP地址不能滿意需求。為了檢測在不同網(wǎng)段下通信模塊能否正常工作,運(yùn)用一臺華為S5300交換機(jī)(switch)和兩臺華為5200交換機(jī)搭建了一個(gè)小型的網(wǎng)絡(luò)環(huán)境進(jìn)行相關(guān)測試。如圖4所示,測試采納IPv4靜態(tài)路由,使不同網(wǎng)段的隨意兩臺室內(nèi)機(jī)之間能夠互通。測試表明,分屬不同網(wǎng)段的室內(nèi)機(jī)之間,可視通話、信息互發(fā)等模塊均正常工作,從而驗(yàn)證了本設(shè)計(jì)方案的可行性。

4.3可視對講性能測試

可視對講性能測試主要是檢測室內(nèi)機(jī)終端中音視頻的采集、編解碼、收發(fā)和顯示。對于音視頻的采集、收發(fā)和顯示,可通過揚(yáng)聲器和LCD顯示直觀地檢測。而對編解碼的測試則比較困難,本設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論