<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux/Qt的智能家居系統設計

基于Linux/Qt的智能家居系統設計

作者: 時(shí)間:2013-02-25 來(lái)源:網(wǎng)絡(luò ) 收藏

針對的特點(diǎn)及應用背景,了一種家庭多功能控制。該采用飛思卡爾公司ARM Cortex A8系列的i.MX51處理器作為MCU,在其上移植嵌入式Linux作為軟件開(kāi)發(fā)平臺,并利用Qt相關(guān)技術(shù)為基礎友好的用戶(hù)界面,實(shí)現了ARM板的各功能模塊與服務(wù)器端的交互。同時(shí)具備數字可視對講、信息收發(fā)、家電控制、安防報警、家庭娛樂(lè )等功能。

本文引用地址:http://dyxdggzs.com/article/148088.htm

1 系統的架構和功能

家庭智能控制系統主要由室內分機、單元門(mén)口機、小區圍墻機、管理中心終端機、管理中心服務(wù)器以及附件組成。系統采用分布式網(wǎng)絡(luò )結構,可以根據住戶(hù)數量對系統的容量進(jìn)行擴充。

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

(2)單元門(mén)口機的主要功能是完成與所在單元樓的任意住戶(hù)以及管理中心機的可視通話(huà),除了具備留言/留影功能外,還提供觸摸屏校準、背光調節、密碼設置等功能。

(3)圍墻機的基本功能和單元門(mén)口機類(lèi)似,但可視對講、留言/留影功能是針對小區內所有住戶(hù)的。

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

2 系統的實(shí)現方案

2.1 Qt的信號/槽機制

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

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

Bool QObject::connect(const QObject* sender,

const char*signal,const QObject* receiver,const char* member)

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

2.2 XML格式的Socket多線(xiàn)程通信

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

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

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

2.3 并行數據庫

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

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

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

connect( this,SIGNAL(seek(const QString ) ),m_query,

SIGNAL(seek_execute(const QString )) );

connect( m_query,SIGNAL(seek(const QList

) ),this,SLOT( slotResult( const QList ) ) );

void text:: database() {

QString sql = select * from Text order by date desc ;

emit seek_execute (sql);

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>