壹
本項(xiàng)目開發(fā)了一種家庭設(shè)備控制平臺(tái),提供家庭環(huán)境的實(shí)時(shí)監(jiān)控功能(溫度、濕度、火災(zāi)報(bào)警),提供安防功能(視頻監(jiān)控,紅外人體識(shí)別,錄像和抓拍),針對(duì)老人和職場(chǎng)人士的日常事務(wù)管理方案,此外還有家庭ftp服務(wù)器,wifi熱點(diǎn)等輔助功能。系統(tǒng)以樹莓派及openHAB2為基礎(chǔ),力圖將家電設(shè)備納入統(tǒng)一管理,提供高度集成的管理界面,可通過(guò)手機(jī)、電腦直接對(duì)家庭環(huán)境進(jìn)行監(jiān)測(cè)和控制。
系統(tǒng)設(shè)計(jì)方案
貳
1. 總體設(shè)計(jì)
本系統(tǒng)以樹莓派和openHAB2為基礎(chǔ),結(jié)合單片機(jī)控制的傳感器,實(shí)現(xiàn)輔助管理平臺(tái)的功能。其中,以flask框架建立web服務(wù)器,實(shí)現(xiàn)與openHAB2的交互。本服務(wù)器向下通過(guò)GPIO口與單片機(jī)通訊,接收單片機(jī)上各個(gè)傳感器的狀態(tài);向上與openHAB2交互,可以實(shí)時(shí)返回請(qǐng)求數(shù)據(jù)或傳遞用戶命令,執(zhí)行相關(guān)功能。
2. 樹莓派系統(tǒng)設(shè)計(jì)
樹莓派作為本地服務(wù)端,兼顧flask框架下webserver的實(shí)現(xiàn)和openHAB2的運(yùn)行。Webserver結(jié)合Rpi.GPIO模塊以實(shí)現(xiàn)和單片機(jī)的通訊。數(shù)據(jù)獲取方式為自定義的“接收請(qǐng)求-發(fā)送數(shù)據(jù)”的被動(dòng)模式,該模式是阻塞式設(shè)計(jì),數(shù)據(jù)的發(fā)送和接收完全由樹莓派控制,增強(qiáng)可靠性。從單片機(jī)獲得的數(shù)據(jù)在服務(wù)器中進(jìn)行處理,之后直接返回給openHAB2。OpenHAB2中的界面為自定義界面,每個(gè)磁貼實(shí)現(xiàn)單獨(dú)的一種或一個(gè)功能,該頁(yè)面支持用戶根據(jù)自身需要進(jìn)行更改,方便后期添加新功能。
3.單片機(jī)系統(tǒng)設(shè)計(jì)
本系統(tǒng)使用廉價(jià)的51單片機(jī)做下位機(jī),單片機(jī)負(fù)責(zé)管理溫度傳感器、濕度傳感器、煙霧傳感器、蜂鳴器。人體紅外識(shí)別模塊從單片機(jī)系統(tǒng)中脫離出來(lái),單獨(dú)委托給樹莓派直接管理,以提高系統(tǒng)反應(yīng)速度。
硬件系統(tǒng)設(shè)計(jì)
叁
1.單片機(jī)的設(shè)計(jì)
① 程序目的:通過(guò)c51單片機(jī)讀取DHT11溫度濕度傳感器的數(shù)據(jù),以及MQ-2煙霧傳感器的數(shù)據(jù),并使用一種自定義的數(shù)據(jù)傳輸方式,將讀取到的數(shù)據(jù)傳輸給樹莓派,由樹莓派處理傳輸?shù)臄?shù)據(jù)。
②程序思路:讀取DTH11溫度濕度傳感器中的數(shù)據(jù)(在wendushidu.c中),將讀取到的40位二進(jìn)制數(shù)據(jù),取其前16位轉(zhuǎn)化為三位十進(jìn)制數(shù)字(濕度),取中間16位轉(zhuǎn)化為有一位小數(shù)的三位十進(jìn)制數(shù)字(溫度),將濕度與溫度合并轉(zhuǎn)化為六位十進(jìn)制數(shù)據(jù)并將其傳送給main.c進(jìn)行處理。
讀取MQ-2煙霧傳感器的數(shù)據(jù)(在main.c中),將煙霧傳感器輸出高低電平給單片機(jī)的P2^6引腳,判斷引腳的高低電平就可以知道周圍環(huán)境煙霧是否達(dá)到設(shè)定值。
C51與樹莓派的通訊:在main.c中將從wendushidu.c接收的六位十進(jìn)制數(shù)據(jù)轉(zhuǎn)化為有三位十進(jìn)制數(shù)字(濕度),三位十進(jìn)制數(shù)字(溫度),都帶有一位小數(shù),將接受到的煙霧傳感器數(shù)據(jù)轉(zhuǎn)化為一位十進(jìn)制數(shù)據(jù)。將每一位十進(jìn)制數(shù)據(jù)轉(zhuǎn)化為四位二進(jìn)制數(shù)據(jù),有7位十進(jìn)制數(shù)據(jù),轉(zhuǎn)化為28位二進(jìn)制數(shù)據(jù),其中前12位為濕度,中間十二位為溫度,最后四位為煙霧標(biāo)志值。當(dāng)樹莓派發(fā)送給c51的P3^2管腳一個(gè)低電平時(shí),c51觸發(fā)中斷,進(jìn)入main.c中的中斷函數(shù)。當(dāng)樹莓派發(fā)送給c51的P3^1管腳一個(gè)高電平時(shí),c51的P2^1便發(fā)送給樹莓派一個(gè)高低電平,也就是一位二進(jìn)制數(shù)據(jù),c51等待下一次P2^1管腳低電平,樹莓派給P2^1管腳高電平。重復(fù)上述操作28次,便將濕度溫度煙霧標(biāo)志值這28位二進(jìn)制數(shù)據(jù)傳遞給樹莓派,樹莓派將c51的P3^2管腳拉高,結(jié)束完整的一次傳輸。重復(fù)中斷操作,就可以實(shí)現(xiàn)實(shí)時(shí)讀取傳感器數(shù)據(jù)并傳輸數(shù)據(jù)到樹莓派。
③ 溫度濕度傳感器DTH11:DHT11是一款有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度傳感器。 其精度濕度+-5%RH, 溫度+-2℃,量程濕度20-90%RH, 溫度0~50℃。DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度復(fù)合傳感器,它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性和卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性價(jià)比極高等優(yōu)點(diǎn)。每個(gè)DHT11傳感器都在極為精確的濕度校驗(yàn)室中進(jìn)行校準(zhǔn)。校準(zhǔn)系數(shù)以程序的形式存在OTP內(nèi)存中,傳感器內(nèi)部在檢測(cè)信號(hào)的處理過(guò)程中要調(diào)用這些校準(zhǔn)系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡(jiǎn)易快捷。超小的體積、極低的功耗,使其成為該類應(yīng)用中,在苛刻應(yīng)用場(chǎng)合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。
DHT11與c51的接線說(shuō)明▼
將DHT11的2引腳接到c51的P3^6引腳,VCC接5v正電源,GND接地;
DHT11的程序說(shuō)明:見程序文件c51程序.txt
1)初始化DHT11 見函數(shù)DHT11_start()
2)從DHT11中讀取一位數(shù)據(jù) 見函數(shù)DHT11_rec_byte()
3)從DHT11中讀取四十位數(shù)據(jù),并將其轉(zhuǎn)化為濕度溫度,返回 出函數(shù)見函數(shù)DHT11_receive()
④煙霧傳感器MQ-2:適用于家庭或者工廠的氣體泄漏檢測(cè)裝置,適宜與液化氣,丁烷,丙烷,甲烷,酒精,氫氣,煙霧等檢測(cè)裝置。故因此,MQ-2可以準(zhǔn)確來(lái)說(shuō)是一個(gè)多種氣體探測(cè)器。MQ-2的探測(cè)范圍極其的廣泛。它的優(yōu)點(diǎn):靈敏度高、響應(yīng)快、穩(wěn)定性好、壽命長(zhǎng)、驅(qū)動(dòng)電路簡(jiǎn)單。
MQ-2的工作原理:MQ-2型煙霧傳感器屬于二氧化錫半導(dǎo)體氣敏材料,屬于表面離子式N型半導(dǎo)體。處于200~300攝氏度時(shí),二氧化錫吸附空氣中的氧,形成氧的負(fù)離子吸附,使半導(dǎo)體中的電子密度減少,從而使其電阻值增加。當(dāng)與煙霧接觸時(shí),如果晶粒間界處的勢(shì)壘收到煙霧的調(diào)至而變化,就會(huì)引起表面導(dǎo)電率的變化利用這一點(diǎn)就可以獲得這種煙霧存在的信息,煙霧的濃度越大,導(dǎo)電率越大,輸出電阻越低,則輸出的模擬信號(hào)就越大。
調(diào)定MQ-2上的螺母,就可以調(diào)節(jié)檢測(cè)的限定值,當(dāng)未達(dá)到限定值時(shí),DO輸出高電平;當(dāng)煙霧或有害氣體濃度過(guò)大時(shí),達(dá)到限定的濃度值,DO輸出低電平。
MQ-2與c51接線說(shuō)明:
MQ-2有四個(gè)管腳,分別為VCC,GND,AO,DO。VCC管腳接+5V,GND管腳接地,AO懸空,DO接c51上的P2^6;
MQ-2的程序說(shuō)明:見c51文檔中的main.c文件
MQ-2的DO管腳發(fā)出的電平傳遞到c51上的P2^6上,讀取P2^6上的電平高低就可以判斷是否周圍環(huán)境的煙霧有害氣體濃度是否達(dá)到限定值,當(dāng)達(dá)到限定值時(shí),P2^6讀取到低電平;當(dāng)未達(dá)到限定值時(shí),P2^6讀取到的時(shí)低電平。
2.樹莓派GPIO口設(shè)計(jì)
對(duì)樹莓派GPIO口的設(shè)計(jì)上,采用單獨(dú)功能的GPIO口進(jìn)行通訊。其中單片機(jī)由樹莓派GPIO模塊供電,樹莓派與下位機(jī)通訊使用三個(gè)引腳,樹莓派控制臺(tái)燈功能的實(shí)現(xiàn)使用了區(qū)別于單片機(jī)供電的另外兩個(gè)電源和兩個(gè)地,繼電器模塊使用一電源,臺(tái)燈供電由繼電器控制,繼電器作用信號(hào)由樹莓派控制,向上由openHAB2的用戶界面經(jīng)用戶觸發(fā)。
3.其他器件的連接
蜂鳴器直連在煙霧監(jiān)測(cè)模塊上,不經(jīng)過(guò)單片機(jī),保證可靠。
軟件設(shè)計(jì)方案
肆
1.OpenHAB2的介紹和設(shè)計(jì)
①介紹
openHAB全稱為open Home Automation Bus,即開放式家庭自動(dòng)化總線,該項(xiàng)目旨在為家庭自動(dòng)化構(gòu)建提供一個(gè)通用的集成平臺(tái)。openHAB是一個(gè)純Java打造的開源項(xiàng)目,完全基于OSGi(Open Service Gateway Initiative),并使用Jetty作為web服務(wù)器。Jetty和Equinox OSGi運(yùn)行時(shí)一起構(gòu)成了openHAB的核心基礎(chǔ)。
? 工作原理
openHAB的設(shè)計(jì)是廠商中立的,且與硬件/協(xié)議無(wú)關(guān)。openHAB通過(guò)綁定(binding),匯集了不同的總線系統(tǒng)、硬件設(shè)備和接口協(xié)議。這些綁定可以通過(guò)openHAB事件總線發(fā)送和接收命令,并更新狀態(tài)。開發(fā)者可以在openHAB的基礎(chǔ)上設(shè)計(jì)獨(dú)特的操作界面,以開放自己的家庭自動(dòng)化系統(tǒng),或者利用其他技術(shù)來(lái)創(chuàng)建設(shè)備的新的控制方式。
? 平臺(tái)架構(gòu)
openHAB平臺(tái)架構(gòu)圖如上所示。openHAB平臺(tái)架構(gòu)具有極強(qiáng)的模塊化設(shè)計(jì)特點(diǎn),用戶可以動(dòng)態(tài)的向平臺(tái)添加新的功能,移除不需要的模塊。基于此特性,在平臺(tái)開發(fā)過(guò)程中,可以更加靈活的對(duì)系統(tǒng)的功能進(jìn)行控制和擴(kuò)展。
②設(shè)計(jì)
? 總體設(shè)計(jì)
openHAB平臺(tái)的總體設(shè)計(jì)示意圖如下所示。
用戶交互界面我們采用openHAB提供的HABPanel,該UI界面具有美觀、易操作、信息展示全面的特點(diǎn)。通過(guò)添加窗口小部件(Widget)即可將我們所需的功能模塊添加到用戶界面上,進(jìn)行操作與展示。
總體設(shè)計(jì)分為五個(gè)模塊,分別是:天氣預(yù)報(bào)模塊、燈光控制模塊、攝像監(jiān)控模塊、溫濕度檢測(cè)模塊和日程管理模塊。
? 天氣預(yù)報(bào)模塊
天氣預(yù)報(bào)模塊示意圖如下所示。
天氣預(yù)報(bào)模塊使用openHAB提供的weather binding。通過(guò)配置該binding,調(diào)用天氣服務(wù)提供商提供的天氣預(yù)報(bào)API獲取天氣信息,然后在openHAB配置文件中將這些天氣服務(wù)數(shù)據(jù)item化,最后在HABPanel的Widget中進(jìn)行調(diào)用,即可將天氣情況展示在界面上。在widget中天氣數(shù)據(jù)會(huì)通過(guò)后臺(tái)服務(wù)傳遞的數(shù)據(jù)進(jìn)行實(shí)時(shí)更新。
Item配置文件代碼如下:
Weather Binding配置文件代碼如下:
此處我們使用的是ForecastIo提供的API,該API支持五天的天氣預(yù)報(bào)數(shù)據(jù)。通過(guò)輸入ForecastIo提供的API(apikey)以及目標(biāo)地的經(jīng)緯度(latitude、longtitude)便可獲得所需地點(diǎn)的天氣數(shù)據(jù)。
? 燈光控制模塊
燈光控制模塊示意圖如下圖所示。
燈光控制模塊使用openHAB提供的HTTP Binding。通過(guò)在openHAB配置文件中生成燈光控制開關(guān)實(shí)例,然后該實(shí)例調(diào)用HTTP Binding服務(wù)向基于Flask框架實(shí)現(xiàn)的本地服務(wù)器發(fā)送開關(guān)命令從而實(shí)現(xiàn)燈光的控制。在HABPanel界面生成Button Widget,調(diào)用燈光控制開關(guān)實(shí)例,然后便可以通過(guò)點(diǎn)擊該按鈕實(shí)現(xiàn)對(duì)燈光的開關(guān)控制了。
Item配置文件代碼如下:
? 攝像監(jiān)控模塊
攝像監(jiān)控模塊示意圖如下所示。
攝像監(jiān)控模塊共有三部分構(gòu)成(紅線圈出部分)
對(duì)應(yīng)圖像展示W(wǎng)idget、攝像頭直接控制Widget和紅外人體感應(yīng)控制Widget。該模塊采用HTTP
Binding和GPIO Binding。通過(guò)在openHAB配置文件中生成攝像頭直接控制開關(guān)實(shí)例,然后該實(shí)例調(diào)用HTTP Binding服務(wù)向基于Flask框架實(shí)現(xiàn)的本地服務(wù)器發(fā)送開關(guān)命令從而實(shí)現(xiàn)攝像頭的直接開關(guān)控制。另一方面,通過(guò)添加人體感應(yīng)傳感器,還可實(shí)現(xiàn)感應(yīng)到有人出現(xiàn)后自動(dòng)打開攝像頭的操作,紅外人體感應(yīng)傳感器與樹莓派的引腳連接后,通過(guò)GPIO Binding將傳感器信號(hào)在配置文件中實(shí)例化,將GPIO口傳送過(guò)來(lái)的高低電平信號(hào)(人出現(xiàn)與否的信號(hào))傳送到實(shí)例化的對(duì)象上,然后通過(guò)openHAB中的自定義Rule實(shí)現(xiàn)感應(yīng)后將攝像頭控制開關(guān)打開從而打開攝像頭的操作。
在HABPanel中添加上相應(yīng)Widget后即可通過(guò)點(diǎn)按開關(guān)按鈕實(shí)現(xiàn)攝像頭的開關(guān)操作。
Item配置文件代碼如下:
Rule配置文件代碼如下:
? 溫濕度檢測(cè)模塊
溫濕度檢測(cè)模塊示意圖如下所示。
該模塊主要使用了InfluxDB和Grafana。InfluxDB用于存儲(chǔ)溫濕度傳感器傳送過(guò)來(lái)的溫濕度數(shù)據(jù)。Grafana用于溫濕度數(shù)據(jù)的可視化展示,通過(guò)調(diào)用InfluxDB中的數(shù)據(jù),即可展示出直觀的數(shù)據(jù)。最后在HABPanel中定義一個(gè)
frame Widget,將動(dòng)態(tài)溫濕度數(shù)據(jù)圖表鏈接綁定到該Widget上,通過(guò)不斷刷新InfluxDB中的數(shù)據(jù),即可實(shí)現(xiàn)圖表的動(dòng)態(tài)展示。
溫濕度數(shù)據(jù)通過(guò)task.py腳步本從樹莓派的GPIO口進(jìn)行讀取,并直接POST到數(shù)據(jù)庫(kù)中,進(jìn)行更新。
? 日程管理模塊
日程管理模塊示意圖如下圖所示。
該模塊通過(guò)引用第三方日程管理平臺(tái)(SuperProductivity),然后在林格愛(ài)一個(gè)Panel中自定義Widget綁定平臺(tái)提供的接口即可實(shí)現(xiàn)日程管理的操作,用戶側(cè)滑打開task
Panel,然后輸入相應(yīng)日程任務(wù)即可將事項(xiàng)加入到日程表中。該平臺(tái)還支持日程的導(dǎo)出和本地日程文件的導(dǎo)入,操作極為方便。除此之外通過(guò)點(diǎn)擊頂部的Back to Home按鈕還可迅速跳轉(zhuǎn)到home Panel主界面,檢測(cè)home的其他數(shù)據(jù)和操作其他硬件設(shè)備。
2. Flask框架的介紹及設(shè)計(jì)
① 介紹
Flask是一個(gè)使用 Python 編寫的輕量級(jí) Web 應(yīng)用框架。其WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。Flask也被稱為 “microframework” ,因?yàn)樗褂煤?jiǎn)單的核心,用extension 增加其他功能。Flask沒(méi)有默認(rèn)使用的 數(shù)據(jù)庫(kù)、窗體驗(yàn)證工具。
② 設(shè)計(jì)
? 基于Flask的Web服務(wù)器代碼
此段代碼過(guò)長(zhǎng),請(qǐng)點(diǎn)擊“閱讀原文”查看
此代碼通過(guò)定義路由的方法,對(duì)每個(gè)不同的功能定義不同的url,openHAB2通過(guò)訪問(wèn)特定url觸發(fā)特定代碼段,結(jié)合RPi.GPIO實(shí)現(xiàn)具體功能。代碼簡(jiǎn)單易懂,變量名稱直白,便不再多加注釋。
? 傳感器的監(jiān)控程序代碼
此段代碼過(guò)長(zhǎng),請(qǐng)點(diǎn)擊“閱讀原文”查看
此段將傳感器的主要功能封裝成一個(gè)名為task的模塊,在主程序中調(diào)用以實(shí)現(xiàn)其功能。腳本將數(shù)據(jù)從單片機(jī)中讀出,進(jìn)行格式處理,再post給openHAB2用于繪制圖像。
3.51單片機(jī)的程序
此段代碼非常長(zhǎng),請(qǐng)點(diǎn)擊“閱讀原文”查看
4. 其他
Wifi熱點(diǎn)的功能使用creat_ap實(shí)現(xiàn),詳見:github*
日程管理功能由super-productivity實(shí)現(xiàn),詳見:網(wǎng)址*
結(jié)論
伍
本系統(tǒng)實(shí)現(xiàn)了基于樹莓派和openHAB2的家庭設(shè)備控制平臺(tái),提供家庭環(huán)境的實(shí)時(shí)監(jiān)控功能(溫度、濕度、火災(zāi)報(bào)警),提供安防功能(視頻監(jiān)控,紅外人體識(shí)別,錄像和抓拍),針對(duì)老人和職場(chǎng)人士的日常事務(wù)管理方案,此外還有家庭ftp服務(wù)器,wifi熱點(diǎn)等輔助功能。系統(tǒng)以樹莓派及openHAB2為基礎(chǔ),通過(guò)openHAB2和flask框架天然的適應(yīng)性,將家電設(shè)備納入統(tǒng)一管理,提供高度集成的管理界面,可通過(guò)手機(jī)、電腦直接對(duì)家庭環(huán)境進(jìn)行監(jiān)測(cè)和控制。此外,由于openHAB2的高度靈活性,可以根據(jù)自身要求添加相應(yīng)的功能,在flask框架下的webserver中加入對(duì)應(yīng)的響應(yīng)即可實(shí)現(xiàn)定制功能,系統(tǒng)開發(fā)適應(yīng)性強(qiáng)。
評(píng)論