,
(1.咸陽師范學院 計算機學院,咸陽 712000;2.蘇州大學 )
隨著計算機技術的不斷發展,特別是無線網絡技術的快速發展,智能手機、智能電器等智能設備不斷上市,智能家居已進入消費領域。智能家居是指集射頻技術、綜合布線、計算機網絡、安防、自動控制等于一體的智能化家居控制系統[1]。目前,物聯網設備價格高、設計復雜、軟件集成度不高,極大地阻礙了智能家居的普及。因此,如何設計一套價格低廉、易于擴展、使用便捷的智能家居系統已成為業界關注的熱點,Raspberry Pi技術(中文名“樹莓派”,簡寫為RPI)的出現為本設計奠定了基礎。
(1)RaspberryPi介紹
2012年3月,英國劍橋大學埃本·阿普頓(Eben Epton)發售了世界上最小的臺式機,尺寸只有卡片大小,但卻具有普通PC機的全部功能,這就是Raspberry Pi電腦板,中文譯為“樹莓派”[2]。Raspberry Pi是一款基于Linux嵌入式系統的卡片式電腦,它提供了USB、I2C總線和HDMI等接口,可選用C、Python語言等通過裝載Linux 系統和相應的應用程序實現多種功能[3-4]。
設計選用樹莓派3代B型機作為開發機,它采用Broadcom BCM2837作為其SoC(片上系統),CPU 基于ARM Cortex-A7架構、4核、主頻1.2 GHz,具體參數見表1。

表1 Raspberry Pi 3代B型機參數表[5]

續表1
(2)其他硬件
智能家居系統中包含ESP2866模塊、顯示器、鼠標、鍵盤、WiFi攝像頭等硬件。其中,ESP8266具有 WiFi功能,其核心是一塊Diamond Standard 106Micro控制器以及一個低功耗的32位RISC控制器[6]。同時,它擁有可以直接運行代碼的處理器,具備GPIO、I2C、ADC、SPI、PWM等模塊,并支持AP(Access Point)、STA(Station)、AP+STA共存模式,可使用高效的AT指令[7]。
智能家居系統主要由Raspberry Pi 3代B型機、云服務平臺、WIFI攝像頭、ESP2866模塊、紅外線傳感器、PC機(或移動終端)等設備通過有線或無線方式互聯構成(如圖1所示)。

圖1 智能家居系統總體結構
云服務器主要負責數據的存儲,提供數據查詢接口;PC機提供控制家居的接口,Raspberry Pi客戶端負責讀取傳感器數據,發送從攝像頭獲得的圖像以及對智能開關的控制。
ESP8266、WiFi攝像頭、PC機等與Raspberry Pi的GPIO接口相連。Raspberry Pi的1號引腳與ESP8266引腳2、4連接,Raspberry Pi的6號、8號、10號引腳分別與ESP8266的8號、1號、5號引腳相連接。Raspberry Pi讀取傳感器獲取的數據,并通過ESP8266模塊來控制LED的打開或關閉,ESP8266引腳[9]模塊定義如圖2、圖3所示。

圖2 ESP2866引腳
系統軟件設計過程中主要在Linux環境下編寫監控程序,利用編寫JavaScript附件實現小燈與Homekit的聯動;使用Python編寫程序控制GPIO引腳電平的高低,進而通過語音助手實現語音控制小燈的打開與關閉;采用 shell腳本控制攝像頭進行拍照,通過Python語言將照片上傳到云服務器(七牛云)中。
Python是一種面向對象的解釋型計算機程序設計語言,它是自由軟件,源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議[10-11]。Python語言主要具有簡潔性、易讀性以及可擴展性的特點,它具有豐富和強大的庫,能夠把用其他語言制作的各種模塊(尤其是C/C++)很輕松地聯結在一起[12-13]。
JavaScript是一種動態類型、弱類型且基于原型的腳本語言,內置支持類型JavaScript引擎,廣泛用于客戶端[14]。它的主要特點是可以直接嵌入HTML頁面,跨平臺,具有動態性,簡單緊湊。
七牛云[15]是國內領先的企業級云服務商,專注于以數據管理為中心的云計算業務研發和運營,主要提供云計算、大數據平臺、人工智能平臺等產品,并提供一站式視頻云解決方案。
Linux有非常多的發行版本,開源社區版本則以Debian為代表。Debian作為適合于服務器的操作系統,比Ubuntu要穩定得多[16]。Debian系統基礎核心小、穩定性高,而且占用系統資源少,所以本次開發過程中選用Linux 的Debian版本[17]。
監控模塊開發的基本步驟如下:
① 安裝系統和基本設置;
② 在樹莓派上進入終端,開發采用Debian系統,執行sudo raspi-config命令,打開config攝像頭可用,關機將攝像頭安裝在開發板上;
③ 在七牛云平臺上創建一個對象存儲,保存sk碼與ak碼;
④ 添加代碼,寫一個.sh腳本,安裝七牛云的python.SDK,在命令行輸入sudo pip install qiniu,在take_photo.sh目錄下建立一個test.py,以保證每次執行take_photo.sh腳本,都可以讓樹莓派拍一張照片并且發送至七牛云上進行保存。
軟件設計及調試步驟如下:
① Debian系統下配置拍攝頭(如圖4);
② 七牛云平臺下申請ak與sk;
燈光控制模塊開發的基本步驟如下:
① 用戶用自己的賬號登陸Linux系統;
② 打開lx終端;
③ 進入cd/home/pi/Documents/hap-nodejs文件夾并輸入node Core.js配置相關環境;
④ 手機中打開homekat,添加配件,找到自定義的Led燈,并輸入pin碼進行配對;
⑤ 配對成功后通過siri進行對小燈的控制。
燈光控制模塊開發的過程如下:
① 安裝系統,下載鏡像包,用Win32將系統燒進SD卡。
② 用已有賬號登陸系統(超級用戶),安裝python-dev和python-tyt,再安裝libavahi與libdnssd,下載node,查看node與npm的版本,如果版本過低則進行升級,從github克隆homekitbridge并進入HAP-NodeJS文件夾,安裝模塊,重建npm(主要命令如下)。
sudo apt-get install git //安裝 git
sudo vim config.mk //編輯 config.mk
sudo apt-get install uuid-dev xsltproc docbook-xsl
//安裝 pre-reqs
sudo cp mosquitto.conf /etc/mosquito //復制配置文件
sudo /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf //啟動服務
③ 進入assessoriess文件夾,并新建一個燈光附件,將相應代碼放入文件夾內,保存并退出。
④ 創建一個python文件夾控制GPIO電平,進入HAP-NodeJS文件,建一個新的.py文件夾,在這個文件夾里新建兩個.py文件,將控制GPIO電平的兩段代碼分別放入,根據控制GPIO的代碼將小燈接在GPIO引腳上,測試python能否正常運行。
sudo tar xvf node-v5.8.0-linux-armv7l.tar.xz //解壓
sudo npm install-g node-gyp //安裝node
⑤ 調試運行(如圖4所示)。

圖4 輸入指令調試界面
打開手機中的智能家居APP,在七牛云云端查看監控拍攝的記錄(如圖5所示),通過設計的燈光附件,輸入pin碼進行配對,成功后打開siri通過語音控制LED燈的打開與關閉(如圖6所示)。

圖5 監控拍攝的畫面

圖6 語音控制打開小燈
本設計選用Raspberry Pi 3(樹莓派3代)作為智能家居系統的開發版,由于Raspberry Pi具有價格低、通用性及兼容性強的特點,降低了開發成本。同時,選用七牛云公司提供的公有云對監控數據進行存儲,縮短了開發周期。
經測試,智能家居系統實現了對家庭環境遠程監控,且監控畫面清晰,由于監控數據選擇云端存儲避免了本地數據人為或自然災害而造成的損壞。
燈光控制模塊實現了通過手機APP語音遠程控制室內LED的打開或關閉,極大地方便了人們外出時對家居燈光的查詢和控制,有一定的應用價值。

[1] 陶在紅,楊宇,常建華.基于 ZigBee的智能家居控制系統設計[J].現代電子技術,2014,37 (23):9-12.
[2] 倪瑛,王宏磊.基于藍牙的微信智能門鎖的設計[J]. 南京工業職業技術學院學報, 2016, 16(4):16-18.
[3] 張懷柱, 姚林林, 沈揚,等. 基于樹莓派的農作物低空觀測系統設計[J].吉林大學學報:信息科學版, 2015, 33(6):625-631.
[4] MEMBREY P,HOWS D.樹莓派學習指南:基于Linux[M].北京:人民郵電出版社, 2014:165-184.
[5] 微雪電子.關于Raspberry Pi 3 Model B[EB/OL].[2017-10-08].http://www.waveshare.net/shop/RPi3-B.htm.
[6] 基于ESP8266的物聯網解決方案[EB/OL].[2017-11]. http://www.51hei.com/bbs/dpj-47428-1.html.
[7] 段亞林, 謝永斌. 基于Nucleus的通信終端中AT指令模塊的設計與實現[J]. 計算機測量與控制, 2015, 23(11):3744-3746.
[8] Warren Gay.精通Raspberry Pi[M].北京:清華大學出版社,2015.
[9] 范興隆. ESP8266在智能家居監控系統中的應用[J].單片機與嵌入式系統應用, 2016, 16(9):52-56.
[10] 王家崢. 基于主機的實時可疑網址檢測系統[D]. 長春:吉林大學, 2016.
[11] Sanjay Misra,Ferid Cafer. Estimating complexity of programs in Python language[J]. Technical Gazette,2011,18(1).
[12] Python基礎入門教程[EB/OL].[2017-11].http://blog.csdn.net/new0801/article/details/60957843.
[13] 曹華雄,顧乃杰,李燚.面向Python程序的靜態死鎖檢測方法的研究[J].小型微型計算機系統, 2017, 38(3):465-471.
[14] 翟梅, 陳健, 張鴻洋. 基于MOOCs的個性化學習評價系統的設計[J]. 計算機技術與發展, 2015, 25(12):165-168.
[15] 七牛云中標湖北長江云服務廣電布局政企市場——關于IT產業和產業IT的一切[EB/OL].[2017-11] .http://www.ccw.com.cn/article/view/128699.
[16] 周曉梅,宋燕燕.基于云存儲的校園文件管理系統研究與應用[J].電子世界, 2016(2):37-41.
[17] 吳婷婷, 陸靜. Debian環境下局域網時間同步系統的構建[J].長江大學學報:自科版, 2011,8(11):71-72.
張偉(碩士),主要從事物聯網與嵌入式系統等方面的教學和科研工作;王宜懷(博導),主要研究方向為嵌入式系統應用。