王鋼,黃連麗,張松峰,陶玉龍
(湖北汽車工業學院電氣與信息工程學院,十堰442000)
隨著計算機技術的不斷發展,家居的智能化已經逐漸成為現實,因而對這方面的應用和學習是必不可少的。本課題基于Python 語言[1]在樹莓派上進行系統開發,充分利用樹莓派這個完美的中介點,用戶通過運用網絡技術實現移動端、家庭中控和PC 端對系統進行實時的監控家居的狀況。系統采用兩套方案,一是只實現基本的數據采集和家庭安防控制等功能,二是在原有的基礎上加強對系統的管理,實時監測系統的運行狀態。具體完成的功能分為兩類,一為家居安防[2],二為數據采集[3]。家居安防主要通過在終端設備上以視頻的形式顯現出來,家居中再通過人體紅外傳感器、開關傳感器等類似的傳感器作為輔助功能,加強家居的安全性。數據采集部分主要通過一些傳感器所產生的實時數據,系統進行分析給用戶的衣食住行提供策略。
如圖1 所示,此次設計需要的傳感器及硬件模塊如圖所示。這些模塊通過樹莓派的擴展板和樹莓派GPIO 引腳口相連。每個傳感器占用了一個或者兩個GPIO 引腳口。每個傳感器連接的GPIO 口統計結果如表1 所示。

圖1 傳感器硬件模塊

表1 傳感器引腳占用統計表
(1)樹莓派攝像頭模塊實現
通過樹莓派攝像頭模塊實現的功能主要側重于對家居指定位置進行實時拍照,通過獲取到捕捉的圖片存放到指定的路徑,在后端進行處理,進而使前端實時使用這一路徑中指定的圖片。其核心代碼如下所示。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)煙霧傳感器模塊實現
通過煙霧傳感器模塊主要實時的功能就是當發生煤氣泄漏能將第一時間將變化數據傳給后臺,后臺將獲取到的數據傳送給用戶。其核心代碼如下所示。
#!/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,False):
print("煙霧模塊正常....")
time.sleep(2)
(3)火焰傳感器模塊實現
通過火焰傳感器模塊主要實時的功能是當有不正常的產生,通過硬件能實時返回一個高低電平,向系統后臺進行一個反饋,其核心代碼如下所示。
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,False):
print("火焰模塊正常....")
time.sleep(2)
智能家居系統IFSS 總體程序主要由兩部分構成,第一部分為樹莓派端的服務器程序和控制程序,另一部分為Android 手機App 程序,兩者依靠Socket 通信進行交流,從而實現Android 手機客戶端對于樹莓派服務器端的控制[4]。
樹莓派連接的所有傳感器都是通過GPIO 引腳與樹莓派主板相連,通過設置對應引腳的狀態來與特定的傳感器的進行通信。如溫濕度傳感器共有三個引腳,一個是接3V 電源,另一個接GPIO 口并設置該口模式為輸出,還有一個接地線。編寫驅動程序時只需要從GPIO 口進行讀取數據并進行分析即可。超聲波測距模塊的原理是其不斷的向外發射超聲波,然后通過計算接收到反射波所需要的時間來計算與障礙物之間的距離,我們需要設計好其相應的計算公式。其計算公式為:時間差×340÷2。人體紅外傳感器的主要原理是接收其前方120o的扇形里的紅外光線,然后來分析是否有人,其探測距離可以調整,為了適應本次課題,將其精確度設計到了3 米。
火焰傳感器和其他的傳感器模塊類似,其工作原理探測周圍一定范圍內的空間來確定其周圍是否有明火。如果探測到周圍有明火則輸出一個高電平,樹莓派再從火焰傳感器對應的引腳去讀取發出的高電平從而做出反應。
樹莓派端的服務器程序流程如圖2 所示。
程序開始執行后首先執行服務器自檢程序,此時不論是哪一部分的自檢程序報錯,都及時發出語音報警并提示用戶做修理工作。只有自檢程序通過后,服務器才開始正式運行。此時開始一個子線程,子線程的工作是定時從各個傳感器讀取數據并存入到傳感器對象的相關屬性當中,該線程循環執行,直至主程序結束運行。主線程此時開始執行Socket 類中的accept 方法,即循環監聽設定好的端口,如果有客戶端連接,那么為該客戶端分配新的線程來接收和處理相關指令,主線程繼續循環監聽端口等待連接。

圖2 服務器程序流程圖
Android 手機客戶端[5]的程序流程如圖3 所示:當用戶點擊打開App 后,首先連接樹莓派服務器,如果連接失敗,則立即彈出對話框提示用戶連接服務器失敗。只有當網絡良好連接成功后,程序進入登錄界面。用戶需要在登錄界面手動輸入賬號ID 和登錄密碼,點擊登錄后,程序首先會對用戶輸入的賬號和密碼的格式進行檢查,如果格式不正確,則會提示用戶重新填寫,如果格式正確,則程序將用戶賬號和密碼打包發送給服務器進行驗證,如果驗證通過,則進入程序主頁面。如果驗證不通過,則提示用戶密碼錯誤,用戶可以選擇重新輸入密碼或者是點擊忘記密碼,當用戶點擊忘記密碼后,程序跳轉到重置用戶密碼界面,此時需要用戶輸入新的密碼和自己預存的手機號碼,然后服務器會給手機客戶端發送驗證碼,用戶填入驗證碼后,再點擊確認修改,然后就以跳轉回登錄界面進行賬號登錄任務。

圖3 客戶端程序流程圖
本設計通過PC 端、中控端及手機端能夠對家居進行實時精確地監控,服務端能對數據進行整合分析及時對家居內可能發生的狀況進行預警分析,也能夠對家居內發生的緊急事件進行預警和一定自動處理能力。中控和手機端能夠實時接收到服務端的預警,進而觸發相應的事件。