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