王鋼,黃連麗,張松峰,陶玉龍
(湖北汽車工業(yè)學(xué)院電氣與信息工程學(xué)院,十堰442000)
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,家居的智能化已經(jīng)逐漸成為現(xiàn)實(shí),因而對這方面的應(yīng)用和學(xué)習(xí)是必不可少的。本課題基于Python 語言[1]在樹莓派上進(jìn)行系統(tǒng)開發(fā),充分利用樹莓派這個(gè)完美的中介點(diǎn),用戶通過運(yùn)用網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)移動(dòng)端、家庭中控和PC 端對系統(tǒng)進(jìn)行實(shí)時(shí)的監(jiān)控家居的狀況。系統(tǒng)采用兩套方案,一是只實(shí)現(xiàn)基本的數(shù)據(jù)采集和家庭安防控制等功能,二是在原有的基礎(chǔ)上加強(qiáng)對系統(tǒng)的管理,實(shí)時(shí)監(jiān)測系統(tǒng)的運(yùn)行狀態(tài)。具體完成的功能分為兩類,一為家居安防[2],二為數(shù)據(jù)采集[3]。家居安防主要通過在終端設(shè)備上以視頻的形式顯現(xiàn)出來,家居中再通過人體紅外傳感器、開關(guān)傳感器等類似的傳感器作為輔助功能,加強(qiáng)家居的安全性。數(shù)據(jù)采集部分主要通過一些傳感器所產(chǎn)生的實(shí)時(shí)數(shù)據(jù),系統(tǒng)進(jìn)行分析給用戶的衣食住行提供策略。
如圖1 所示,此次設(shè)計(jì)需要的傳感器及硬件模塊如圖所示。這些模塊通過樹莓派的擴(kuò)展板和樹莓派GPIO 引腳口相連。每個(gè)傳感器占用了一個(gè)或者兩個(gè)GPIO 引腳口。每個(gè)傳感器連接的GPIO 口統(tǒng)計(jì)結(jié)果如表1 所示。
圖1 傳感器硬件模塊
表1 傳感器引腳占用統(tǒng)計(jì)表
(1)樹莓派攝像頭模塊實(shí)現(xiàn)
通過樹莓派攝像頭模塊實(shí)現(xiàn)的功能主要側(cè)重于對家居指定位置進(jìn)行實(shí)時(shí)拍照,通過獲取到捕捉的圖片存放到指定的路徑,在后端進(jìn)行處理,進(jìn)而使前端實(shí)時(shí)使用這一路徑中指定的圖片。其核心代碼如下所示。def get_picture():
with picamera.PiCamera()as camera:
camera.resolution=(1024,768)
camera.start_preview()
time.sleep(1)
name=str(datetime.datetime.now())
camera.capture('/home/pi/SmartHome1804/static/CmaeraPng/picture/'+name+'.jpg')get_picture()
(2)煙霧傳感器模塊實(shí)現(xiàn)
通過煙霧傳感器模塊主要實(shí)時(shí)的功能就是當(dāng)發(fā)生煤氣泄漏能將第一時(shí)間將變化數(shù)據(jù)傳給后臺(tái),后臺(tái)將獲取到的數(shù)據(jù)傳送給用戶。其核心代碼如下所示。
#!/usr/bin/env python3
#encoding:utf-8
import RPi.GPIO as gp
import time
gp.setmode(gp.BCM)
gp.setwarnings(False)
gp.setup(26,gp.OUTPUT)
while True:
if gp.output(26,True):
print("有煙霧.....")
elif gp.output(26,F(xiàn)alse):
print("煙霧模塊正常....")
time.sleep(2)
(3)火焰?zhèn)鞲衅髂K實(shí)現(xiàn)
通過火焰?zhèn)鞲衅髂K主要實(shí)時(shí)的功能是當(dāng)有不正常的產(chǎn)生,通過硬件能實(shí)時(shí)返回一個(gè)高低電平,向系統(tǒng)后臺(tái)進(jìn)行一個(gè)反饋,其核心代碼如下所示。
import RPi.GPIO as gp
import time
gp.setmode(gp.BCM)
gp.setwarnings(False)
gp.setup(26,gp.OUTPUT)
while True:
if gp.output(26,True):
print("有火焰.....")
elif gp.output(26,F(xiàn)alse):
print("火焰模塊正常....")
time.sleep(2)
智能家居系統(tǒng)IFSS 總體程序主要由兩部分構(gòu)成,第一部分為樹莓派端的服務(wù)器程序和控制程序,另一部分為Android 手機(jī)App 程序,兩者依靠Socket 通信進(jìn)行交流,從而實(shí)現(xiàn)Android 手機(jī)客戶端對于樹莓派服務(wù)器端的控制[4]。
樹莓派連接的所有傳感器都是通過GPIO 引腳與樹莓派主板相連,通過設(shè)置對應(yīng)引腳的狀態(tài)來與特定的傳感器的進(jìn)行通信。如溫濕度傳感器共有三個(gè)引腳,一個(gè)是接3V 電源,另一個(gè)接GPIO 口并設(shè)置該口模式為輸出,還有一個(gè)接地線。編寫驅(qū)動(dòng)程序時(shí)只需要從GPIO 口進(jìn)行讀取數(shù)據(jù)并進(jìn)行分析即可。超聲波測距模塊的原理是其不斷的向外發(fā)射超聲波,然后通過計(jì)算接收到反射波所需要的時(shí)間來計(jì)算與障礙物之間的距離,我們需要設(shè)計(jì)好其相應(yīng)的計(jì)算公式。其計(jì)算公式為:時(shí)間差×340÷2。人體紅外傳感器的主要原理是接收其前方120o的扇形里的紅外光線,然后來分析是否有人,其探測距離可以調(diào)整,為了適應(yīng)本次課題,將其精確度設(shè)計(jì)到了3 米。
火焰?zhèn)鞲衅骱推渌膫鞲衅髂K類似,其工作原理探測周圍一定范圍內(nèi)的空間來確定其周圍是否有明火。如果探測到周圍有明火則輸出一個(gè)高電平,樹莓派再從火焰?zhèn)鞲衅鲗?yīng)的引腳去讀取發(fā)出的高電平從而做出反應(yīng)。
樹莓派端的服務(wù)器程序流程如圖2 所示。
程序開始執(zhí)行后首先執(zhí)行服務(wù)器自檢程序,此時(shí)不論是哪一部分的自檢程序報(bào)錯(cuò),都及時(shí)發(fā)出語音報(bào)警并提示用戶做修理工作。只有自檢程序通過后,服務(wù)器才開始正式運(yùn)行。此時(shí)開始一個(gè)子線程,子線程的工作是定時(shí)從各個(gè)傳感器讀取數(shù)據(jù)并存入到傳感器對象的相關(guān)屬性當(dāng)中,該線程循環(huán)執(zhí)行,直至主程序結(jié)束運(yùn)行。主線程此時(shí)開始執(zhí)行Socket 類中的accept 方法,即循環(huán)監(jiān)聽設(shè)定好的端口,如果有客戶端連接,那么為該客戶端分配新的線程來接收和處理相關(guān)指令,主線程繼續(xù)循環(huán)監(jiān)聽端口等待連接。
圖2 服務(wù)器程序流程圖
Android 手機(jī)客戶端[5]的程序流程如圖3 所示:當(dāng)用戶點(diǎn)擊打開App 后,首先連接樹莓派服務(wù)器,如果連接失敗,則立即彈出對話框提示用戶連接服務(wù)器失敗。只有當(dāng)網(wǎng)絡(luò)良好連接成功后,程序進(jìn)入登錄界面。用戶需要在登錄界面手動(dòng)輸入賬號ID 和登錄密碼,點(diǎn)擊登錄后,程序首先會(huì)對用戶輸入的賬號和密碼的格式進(jìn)行檢查,如果格式不正確,則會(huì)提示用戶重新填寫,如果格式正確,則程序?qū)⒂脩糍~號和密碼打包發(fā)送給服務(wù)器進(jìn)行驗(yàn)證,如果驗(yàn)證通過,則進(jìn)入程序主頁面。如果驗(yàn)證不通過,則提示用戶密碼錯(cuò)誤,用戶可以選擇重新輸入密碼或者是點(diǎn)擊忘記密碼,當(dāng)用戶點(diǎn)擊忘記密碼后,程序跳轉(zhuǎn)到重置用戶密碼界面,此時(shí)需要用戶輸入新的密碼和自己預(yù)存的手機(jī)號碼,然后服務(wù)器會(huì)給手機(jī)客戶端發(fā)送驗(yàn)證碼,用戶填入驗(yàn)證碼后,再點(diǎn)擊確認(rèn)修改,然后就以跳轉(zhuǎn)回登錄界面進(jìn)行賬號登錄任務(wù)。
圖3 客戶端程序流程圖
本設(shè)計(jì)通過PC 端、中控端及手機(jī)端能夠?qū)揖舆M(jìn)行實(shí)時(shí)精確地監(jiān)控,服務(wù)端能對數(shù)據(jù)進(jìn)行整合分析及時(shí)對家居內(nèi)可能發(fā)生的狀況進(jìn)行預(yù)警分析,也能夠?qū)揖觾?nèi)發(fā)生的緊急事件進(jìn)行預(yù)警和一定自動(dòng)處理能力。中控和手機(jī)端能夠?qū)崟r(shí)接收到服務(wù)端的預(yù)警,進(jìn)而觸發(fā)相應(yīng)的事件。