,
(1.咸陽(yáng)師范學(xué)院 計(jì)算機(jī)學(xué)院,咸陽(yáng) 712000;2.蘇州大學(xué) )
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,特別是無線網(wǎng)絡(luò)技術(shù)的快速發(fā)展,智能手機(jī)、智能電器等智能設(shè)備不斷上市,智能家居已進(jìn)入消費(fèi)領(lǐng)域。智能家居是指集射頻技術(shù)、綜合布線、計(jì)算機(jī)網(wǎng)絡(luò)、安防、自動(dòng)控制等于一體的智能化家居控制系統(tǒng)[1]。目前,物聯(lián)網(wǎng)設(shè)備價(jià)格高、設(shè)計(jì)復(fù)雜、軟件集成度不高,極大地阻礙了智能家居的普及。因此,如何設(shè)計(jì)一套價(jià)格低廉、易于擴(kuò)展、使用便捷的智能家居系統(tǒng)已成為業(yè)界關(guān)注的熱點(diǎn),Raspberry Pi技術(shù)(中文名“樹莓派”,簡(jiǎn)寫為RPI)的出現(xiàn)為本設(shè)計(jì)奠定了基礎(chǔ)。
(1)RaspberryPi介紹
2012年3月,英國(guó)劍橋大學(xué)埃本·阿普頓(Eben Epton)發(fā)售了世界上最小的臺(tái)式機(jī),尺寸只有卡片大小,但卻具有普通PC機(jī)的全部功能,這就是Raspberry Pi電腦板,中文譯為“樹莓派”[2]。Raspberry Pi是一款基于Linux嵌入式系統(tǒng)的卡片式電腦,它提供了USB、I2C總線和HDMI等接口,可選用C、Python語(yǔ)言等通過裝載Linux 系統(tǒng)和相應(yīng)的應(yīng)用程序?qū)崿F(xiàn)多種功能[3-4]。
設(shè)計(jì)選用樹莓派3代B型機(jī)作為開發(fā)機(jī),它采用Broadcom BCM2837作為其SoC(片上系統(tǒng)),CPU 基于ARM Cortex-A7架構(gòu)、4核、主頻1.2 GHz,具體參數(shù)見表1。
表1 Raspberry Pi 3代B型機(jī)參數(shù)表[5]
續(xù)表1
(2)其他硬件
智能家居系統(tǒng)中包含ESP2866模塊、顯示器、鼠標(biāo)、鍵盤、WiFi攝像頭等硬件。其中,ESP8266具有 WiFi功能,其核心是一塊Diamond Standard 106Micro控制器以及一個(gè)低功耗的32位RISC控制器[6]。同時(shí),它擁有可以直接運(yùn)行代碼的處理器,具備GPIO、I2C、ADC、SPI、PWM等模塊,并支持AP(Access Point)、STA(Station)、AP+STA共存模式,可使用高效的AT指令[7]。
智能家居系統(tǒng)主要由Raspberry Pi 3代B型機(jī)、云服務(wù)平臺(tái)、WIFI攝像頭、ESP2866模塊、紅外線傳感器、PC機(jī)(或移動(dòng)終端)等設(shè)備通過有線或無線方式互聯(lián)構(gòu)成(如圖1所示)。
圖1 智能家居系統(tǒng)總體結(jié)構(gòu)
云服務(wù)器主要負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),提供數(shù)據(jù)查詢接口;PC機(jī)提供控制家居的接口,Raspberry Pi客戶端負(fù)責(zé)讀取傳感器數(shù)據(jù),發(fā)送從攝像頭獲得的圖像以及對(duì)智能開關(guān)的控制。
ESP8266、WiFi攝像頭、PC機(jī)等與Raspberry Pi的GPIO接口相連。Raspberry Pi的1號(hào)引腳與ESP8266引腳2、4連接,Raspberry Pi的6號(hào)、8號(hào)、10號(hào)引腳分別與ESP8266的8號(hào)、1號(hào)、5號(hào)引腳相連接。Raspberry Pi讀取傳感器獲取的數(shù)據(jù),并通過ESP8266模塊來控制LED的打開或關(guān)閉,ESP8266引腳[9]模塊定義如圖2、圖3所示。
圖2 ESP2866引腳
系統(tǒng)軟件設(shè)計(jì)過程中主要在Linux環(huán)境下編寫監(jiān)控程序,利用編寫JavaScript附件實(shí)現(xiàn)小燈與Homekit的聯(lián)動(dòng);使用Python編寫程序控制GPIO引腳電平的高低,進(jìn)而通過語(yǔ)音助手實(shí)現(xiàn)語(yǔ)音控制小燈的打開與關(guān)閉;采用 shell腳本控制攝像頭進(jìn)行拍照,通過Python語(yǔ)言將照片上傳到云服務(wù)器(七牛云)中。
Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,它是自由軟件,源代碼和解釋器CPython遵循 GPL(GNU General Public License)協(xié)議[10-11]。Python語(yǔ)言主要具有簡(jiǎn)潔性、易讀性以及可擴(kuò)展性的特點(diǎn),它具有豐富和強(qiáng)大的庫(kù),能夠把用其他語(yǔ)言制作的各種模塊(尤其是C/C++)很輕松地聯(lián)結(jié)在一起[12-13]。
JavaScript是一種動(dòng)態(tài)類型、弱類型且基于原型的腳本語(yǔ)言,內(nèi)置支持類型JavaScript引擎,廣泛用于客戶端[14]。它的主要特點(diǎn)是可以直接嵌入HTML頁(yè)面,跨平臺(tái),具有動(dòng)態(tài)性,簡(jiǎn)單緊湊。
七牛云[15]是國(guó)內(nèi)領(lǐng)先的企業(yè)級(jí)云服務(wù)商,專注于以數(shù)據(jù)管理為中心的云計(jì)算業(yè)務(wù)研發(fā)和運(yùn)營(yíng),主要提供云計(jì)算、大數(shù)據(jù)平臺(tái)、人工智能平臺(tái)等產(chǎn)品,并提供一站式視頻云解決方案。
Linux有非常多的發(fā)行版本,開源社區(qū)版本則以Debian為代表。Debian作為適合于服務(wù)器的操作系統(tǒng),比Ubuntu要穩(wěn)定得多[16]。Debian系統(tǒng)基礎(chǔ)核心小、穩(wěn)定性高,而且占用系統(tǒng)資源少,所以本次開發(fā)過程中選用Linux 的Debian版本[17]。
監(jiān)控模塊開發(fā)的基本步驟如下:
① 安裝系統(tǒng)和基本設(shè)置;
② 在樹莓派上進(jìn)入終端,開發(fā)采用Debian系統(tǒng),執(zhí)行sudo raspi-config命令,打開config攝像頭可用,關(guān)機(jī)將攝像頭安裝在開發(fā)板上;
③ 在七牛云平臺(tái)上創(chuàng)建一個(gè)對(duì)象存儲(chǔ),保存sk碼與ak碼;
④ 添加代碼,寫一個(gè).sh腳本,安裝七牛云的python.SDK,在命令行輸入sudo pip install qiniu,在take_photo.sh目錄下建立一個(gè)test.py,以保證每次執(zhí)行take_photo.sh腳本,都可以讓樹莓派拍一張照片并且發(fā)送至七牛云上進(jìn)行保存。
軟件設(shè)計(jì)及調(diào)試步驟如下:
① Debian系統(tǒng)下配置拍攝頭(如圖4);
② 七牛云平臺(tái)下申請(qǐng)ak與sk;
燈光控制模塊開發(fā)的基本步驟如下:
① 用戶用自己的賬號(hào)登陸Linux系統(tǒng);
② 打開lx終端;
③ 進(jìn)入cd/home/pi/Documents/hap-nodejs文件夾并輸入node Core.js配置相關(guān)環(huán)境;
④ 手機(jī)中打開homekat,添加配件,找到自定義的Led燈,并輸入pin碼進(jìn)行配對(duì);
⑤ 配對(duì)成功后通過siri進(jìn)行對(duì)小燈的控制。
燈光控制模塊開發(fā)的過程如下:
① 安裝系統(tǒng),下載鏡像包,用Win32將系統(tǒng)燒進(jìn)SD卡。
② 用已有賬號(hào)登陸系統(tǒng)(超級(jí)用戶),安裝python-dev和python-tyt,再安裝libavahi與libdnssd,下載node,查看node與npm的版本,如果版本過低則進(jìn)行升級(jí),從github克隆homekitbridge并進(jìn)入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 //復(fù)制配置文件
sudo /usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf //啟動(dòng)服務(wù)
③ 進(jìn)入assessoriess文件夾,并新建一個(gè)燈光附件,將相應(yīng)代碼放入文件夾內(nèi),保存并退出。
④ 創(chuàng)建一個(gè)python文件夾控制GPIO電平,進(jìn)入HAP-NodeJS文件,建一個(gè)新的.py文件夾,在這個(gè)文件夾里新建兩個(gè).py文件,將控制GPIO電平的兩段代碼分別放入,根據(jù)控制GPIO的代碼將小燈接在GPIO引腳上,測(cè)試python能否正常運(yùn)行。
sudo tar xvf node-v5.8.0-linux-armv7l.tar.xz //解壓
sudo npm install-g node-gyp //安裝node
⑤ 調(diào)試運(yùn)行(如圖4所示)。
圖4 輸入指令調(diào)試界面
打開手機(jī)中的智能家居APP,在七牛云云端查看監(jiān)控拍攝的記錄(如圖5所示),通過設(shè)計(jì)的燈光附件,輸入pin碼進(jìn)行配對(duì),成功后打開siri通過語(yǔ)音控制LED燈的打開與關(guān)閉(如圖6所示)。
圖5 監(jiān)控拍攝的畫面
圖6 語(yǔ)音控制打開小燈
本設(shè)計(jì)選用Raspberry Pi 3(樹莓派3代)作為智能家居系統(tǒng)的開發(fā)版,由于Raspberry Pi具有價(jià)格低、通用性及兼容性強(qiáng)的特點(diǎn),降低了開發(fā)成本。同時(shí),選用七牛云公司提供的公有云對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行存儲(chǔ),縮短了開發(fā)周期。
經(jīng)測(cè)試,智能家居系統(tǒng)實(shí)現(xiàn)了對(duì)家庭環(huán)境遠(yuǎn)程監(jiān)控,且監(jiān)控畫面清晰,由于監(jiān)控?cái)?shù)據(jù)選擇云端存儲(chǔ)避免了本地?cái)?shù)據(jù)人為或自然災(zāi)害而造成的損壞。
燈光控制模塊實(shí)現(xiàn)了通過手機(jī)APP語(yǔ)音遠(yuǎn)程控制室內(nèi)LED的打開或關(guān)閉,極大地方便了人們外出時(shí)對(duì)家居燈光的查詢和控制,有一定的應(yīng)用價(jià)值。
[1] 陶在紅,楊宇,常建華.基于 ZigBee的智能家居控制系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2014,37 (23):9-12.
[2] 倪瑛,王宏磊.基于藍(lán)牙的微信智能門鎖的設(shè)計(jì)[J]. 南京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2016, 16(4):16-18.
[3] 張懷柱, 姚林林, 沈揚(yáng),等. 基于樹莓派的農(nóng)作物低空觀測(cè)系統(tǒng)設(shè)計(jì)[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版, 2015, 33(6):625-631.
[4] MEMBREY P,HOWS D.樹莓派學(xué)習(xí)指南:基于Linux[M].北京:人民郵電出版社, 2014:165-184.
[5] 微雪電子.關(guān)于Raspberry Pi 3 Model B[EB/OL].[2017-10-08].http://www.waveshare.net/shop/RPi3-B.htm.
[6] 基于ESP8266的物聯(lián)網(wǎng)解決方案[EB/OL].[2017-11]. http://www.51hei.com/bbs/dpj-47428-1.html.
[7] 段亞林, 謝永斌. 基于Nucleus的通信終端中AT指令模塊的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)測(cè)量與控制, 2015, 23(11):3744-3746.
[8] Warren Gay.精通Raspberry Pi[M].北京:清華大學(xué)出版社,2015.
[9] 范興隆. ESP8266在智能家居監(jiān)控系統(tǒng)中的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2016, 16(9):52-56.
[10] 王家崢. 基于主機(jī)的實(shí)時(shí)可疑網(wǎng)址檢測(cè)系統(tǒng)[D]. 長(zhǎng)春:吉林大學(xué), 2016.
[11] Sanjay Misra,Ferid Cafer. Estimating complexity of programs in Python language[J]. Technical Gazette,2011,18(1).
[12] Python基礎(chǔ)入門教程[EB/OL].[2017-11].http://blog.csdn.net/new0801/article/details/60957843.
[13] 曹華雄,顧乃杰,李燚.面向Python程序的靜態(tài)死鎖檢測(cè)方法的研究[J].小型微型計(jì)算機(jī)系統(tǒng), 2017, 38(3):465-471.
[14] 翟梅, 陳健, 張鴻洋. 基于MOOCs的個(gè)性化學(xué)習(xí)評(píng)價(jià)系統(tǒng)的設(shè)計(jì)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015, 25(12):165-168.
[15] 七牛云中標(biāo)湖北長(zhǎng)江云服務(wù)廣電布局政企市場(chǎng)——關(guān)于IT產(chǎn)業(yè)和產(chǎn)業(yè)IT的一切[EB/OL].[2017-11] .http://www.ccw.com.cn/article/view/128699.
[16] 周曉梅,宋燕燕.基于云存儲(chǔ)的校園文件管理系統(tǒng)研究與應(yīng)用[J].電子世界, 2016(2):37-41.
[17] 吳婷婷, 陸靜. Debian環(huán)境下局域網(wǎng)時(shí)間同步系統(tǒng)的構(gòu)建[J].長(zhǎng)江大學(xué)學(xué)報(bào):自科版, 2011,8(11):71-72.
張偉(碩士),主要從事物聯(lián)網(wǎng)與嵌入式系統(tǒng)等方面的教學(xué)和科研工作;王宜懷(博導(dǎo)),主要研究方向?yàn)榍度胧较到y(tǒng)應(yīng)用。