江寧+桂斌


【摘 要】隨著物聯網技術的發展,智能家居已經悄然走進了千家萬戶。而在這些繁雜的系統中為了實現異地控制與監測,網關模塊是必不可少的。本文正是根據這種需求提出了一種基于嵌入式Linux+QT的,使用433MHz作為通信媒介的一種智能家居網關設計。從而能夠實現對智能家居子節點的協調、控制以及將它們接入互聯網實現遠程控制與監控等功能。
【關鍵詞】物聯網;嵌入式;433MHz通信;QT
0 概述
智能家居(英文:smart home, home automation)是以住宅為平臺,利用綜合布線技術、網絡通信技術、安全防范技術、自動控制技術、音視頻技術將家居生活有關的設施集成,構建高效的住宅設施與家庭日程事務的管理系統,提升家居安全性、便利性、舒適性、藝術性,并實現環保節能的居住環境。
目前常見的智能家居網關產品有的直接采用微機系統,使用其他系統的產品也多采用基于wifi的通信手段并且軟件定制化很強。因此,導致的結果是功耗較高、可容納子節點較少、添加子節點后系統升級麻煩。本文正是為了解決這些缺點,提出一種可能的解決方案。
本文使用ARM核心板作為基礎,配合433MHz無線收發模塊設計了一個智能網關。該系統包含智能網關1個和用于與之測試通信的子節點若干。
1 硬件設計
1.1 硬件總設計
本系統包含智能網關1個和用于與之測試通信的子節點若干。在網關上應當配有方便人機交互的裝置,例如觸摸屏,同時應當能夠接入到互聯網,具有網卡控制器。對于節點而言,并不是本文討論的重點,但是其應該具備一定的傳感器或控制器,然后通過微處理器將傳感器數據轉換成特定格式的數據幀由無線通信模塊發出與網關通信或者將接收到的數據根據相關邏輯驅動控制器動作。
而無線通信模塊的選取必須避免人們日益寬敞的家居面積以及鋼筋墻壁所帶來的通信盲區。同時,由于設備24小時工作,其空閑功耗必須較低。而對于環境數據以及控制信號其數據量卻并不大。為了滿足上述需求,本文選取國產匯承HC-21 433MHz通信模塊作為無線傳輸介質。其空閑電流小于1mA,而通信距離則可大于600m,并具有良好的穿墻能力。彌補了傳統智能家居使用wifi帶來的高功耗及穿墻能力不足,也避免了zigbee復雜的布設過程。
1.2 網關硬件設計
通過分析既定的需求,該系統必須能夠流暢的執行多任務,因為至少有433MHz數據通信和網絡請求處理兩個繁重的任務需要不斷執行。而且,最為整個家庭控制的核心,還需要有人機交互的友好界面,如果使用時下流行的LCD觸摸屏對于系統的性能是有較高的用途的。因此綜合上述分析,本文選取Banana pi開發板作為網關的核心。
本開發板擁有一顆Cortex-A7 雙核核心以及1GB內存板載有線+無線網卡并且留有LVDS觸摸屏接口。能夠滿足多任務并發同時CPU內置的顯卡能夠處理一般的人機交互界面。
1.3 子節點硬件設計
子節點負責對相關監測量進行采集或響應網關發來的指令控制相應的控制器動作,而這種工作狀態具有實時性和突發性。因此,子節點需要有一定的邏輯處理能力,較好的I/O性能以及較低的功耗。
本系統選取溫濕度采集和調光燈這兩個常見的功能作為節點功能以供測試網關的功能。為了滿足上述需求采用STM32F103C8T6作為控制核心,其具有Cortex M3的內核并且支持休眠模式。
2 軟件設計
2.1 軟件總設計
本系統軟件部分除了提供有好的用戶UI和實現網絡控制的框架外。需要解決2個根本矛盾:互斥資源排他性訪問、并發性與433MHz通信慢速的矛盾。對于矛盾1不能簡單使用P-V操作來完成,因為家居操作具有明顯的順序性對于嵌入式系統利用這點這將節省大量硬件開銷;針對矛盾2為了節省成本也不能采用增加收發器的方式來增加速率。
綜上,本系統提出以下軟件結構來解決這些問題。
2.2 串口驅動層
這是由一系列類組成的軟件模塊,主要功能是向下連接操作系統API操縱串口,向上封裝操作,將初始化、寫、讀等操作進行封裝方便上層調用。串口驅動最主要要解決的是讀取問題,由于Linux不支持事件驅動讀取方式。故提出解決方案,創建守護進程監視串口,有數據來就啟動軟件定時器每次定時器到期就查看串口緩沖數據有沒有增加,有則在啟動一次定時器周期,若無則向輪詢接收線程發送一信號,同步阻塞接收線程收到信號后返回緩沖區全部字節。
由于串口訪問排他性,為了避免程序中錯誤的多次實例化需要將該類設為單例模式。同時,繼續向上封裝數據操作方法,并防止程序在多個線程內重復訪問串口,在這些方法中均使用了互斥鎖。
2.3 HTTP監聽程序
HTTPListener類對TCP連接進行監聽,然后解析Http數據包,并且將連接存入連接池。基于線程類QThread派生出HttpConnectionHandle和 HttpQuestHandler子類進行Http數據包的處理。最終QuestHandler繼承HttpQuestHandler并重寫虛函數Service實現獲取請求內容。然后反序列化請求內容交由串行化調度器完成任務,期間阻塞本線程直到任務完成向客戶端發回響應。若完成時間過長,則停止阻塞返回超時錯誤。
2.4 脫機寄存器
為了解決無線信道并發的沖突,本系統使用串行化調度器。但是實際應用中大多數時間信道是閑置的,僅當例如用戶下達某一操作時信道將同時發生多個原子操作從而降低通信效率,433MHz的低速率特點將加劇這一現象。
因此,本系統采用脫機寄存器,將硬件控制位抽象到網關作為緩沖。從而解決了極低速通信與高并發之間的矛盾,而且增加了數據吞吐率和信道利用率。
2.5 串行化調度器和任務隊列
串口的使用具有互斥性,雖然Linux底層對此有排他性訪問限制,但是一次串口操作并不能滿足一個邏輯功能。為了實現原子操作,解決方案有二:一是,剖析Linux底層代碼,將這些特殊功能寫入驅動,將串口進一步邏輯化,編寫自己的設備。為了降低開發精力,故選擇第二種方案,即在應用層人為調度這些任務。
首先為原子操作建立基類,然后添加到任務隊列中,最后串行化調度器依照優先級取出這些操作,通過統一抽象入口函數進行處理。其工作流程如圖3所示。
2.6 其他模塊
UI采用派生自QWidget的豐富控件庫構建,然后設置對應的槽接收來定時器的信號進行周期性更新。同時定時器也負責周期性更新離線寄存器的值。
最后網頁服務采用Nginx服務器,其小巧、占用資源少、并發性好特別適合本系統。客戶端采用HTML5+Ajax給用戶提供美觀、便利的界面。
3 小結
智能家居的發展體現出了人們追求高質量生活的趨勢。而其中智能網關的發展程度充分體現出整個智能家居的發展程度。如今許多產品多在智能家居中扮演子節點,而多家產品又難以統一連接,加之網關標準的缺失使得其偏離了物聯網的主旨。而本系統的提出正好解決了這個問題,在種種近距無線離通信技術不成熟的今天通過充分利用嵌入式系統的資源和對軟件的合理設計完全可能設計出又“快”又“好”的智能系統。正如本文使用的433MHz模塊,其優點不言而喻,若是用軟件手段規避其超低速的缺點它依舊能夠和主流技術抗衡。
因此,在通用型嵌入式硬件性能過剩的今天,如何合理組織軟件系統利用現有硬件條件構建起完整的智能家居系統將是一個重要課題。
[責任編輯:許麗]