郝林煒+梁穎


摘 要:樹莓派(Raspberry Pi)卡片電腦原本是為學生計算機編程教育而設計開發的,自從其面世以來,樹莓派由于其強大的可擴展性及其優異的性能在Geek圈以及物聯網行業受到廣泛關注。而目前“云計算”、“云存儲”等“云”是當下IT行業發展的方向。將這二者結合而開發出的遠程實時監控以及遠程家居控制系統不論是從成本上,還是從其功能上都具有相當大的優勢,同時還能給用戶帶來良好的用戶體驗。文中將使用目前相當流行的編程語言Java與Python來說明如何實現遠程實時影像監控、室內溫濕度檢測及監控、家居電器控制等。
關鍵詞:樹莓派;云服務器;智能家居;云
中圖分類號:TP212.9 文獻標識碼:A 文章編號:2095-1302(2016)09-0045-03
0 引 言
在國內,智能家居、智能電器等新產品大量上市。而普通民用的物聯網設備往往需要購買昂貴的物聯網系統設備,這極大地阻礙了物聯網走向普通人家的道路。由于目前可用的互聯網設備以及它們所采用的軟件系統還有很多不人性化的細節及集成度不高等缺點,往往需要多個獨立設備結合使用。因此,價格低廉且開發、擴展方便的樹莓派便成為智能家居系統開發用機的不二選擇。
1 硬件簡介
1.1 樹莓派簡介
樹莓派由英國慈善組織“Raspberry Pi基金會”開發,原本是為學生計算機編程而設計的一種價格低廉的卡片電腦,但由于其使用開源易擴展的Linux操作系統,性能較強,接口豐富,因此常用于物聯網等自動控制設備方面。本文將以樹莓派2代B型機作為開發機,它采用了Broadcom BCM2836作為其SOC(片上系統),CPU基于ARM Cortex-A7架構,共四個核心,運行頻率為9 00 MHz,具有1 GB LPDDR2 RAM。在接口方面,樹莓派擁有15-針頭MIPI相機 (CSI)界面,可被樹莓派相機 (無紅外線版)使用;4個USB2.0規范接口;MicroSD卡槽;17個GPIO及HAT規格鋪設。
1.2 其他使用到的硬件
考慮到智能家居需要靈活布置,因此樹莓派連接網絡使用USB無線網卡。在傳感器方面,使用溫濕度傳感器DHT11。在視頻監控方面,使用樹莓派帶紅外線版CSI接口攝像頭。除此之外,使用繼電器控制家居的開關。DHT11數字溫濕度傳感器如圖1所示。
2 系統設計方案
2.1 系統總體設計方案
整個系統包含服務器端與樹莓派客戶端。服務器負責存儲數據、提供數據查詢接口、提供控制家居的接口。樹莓派客戶端負責讀取傳感器數據、發送從攝像頭獲得的圖像以及對家居(開/關)的控制。系統總體結構圖如圖2所示。
2.2 硬件設計方案
硬件設計方案主要將傳感器、繼電器與樹莓派的GPIO接口相連,樹莓派讀取傳感器獲取的數據,并通過控制繼電器的開/關來控制家電的開關狀態。樹莓派GPIO接口定義如圖3所示。
DHT11接線示意圖如圖4所示。將DHT11傳感器的2號針腳(DATA針腳)與樹莓派GPIO針腳相連以進行數據傳輸;1號針腳(VCC針腳)與樹莓派3 V正極供電連接;4號針腳接樹莓派GND作為地線。
3 軟件設計方案
樹莓派端主要使用Python編程語言。使用基于Linux的Raspbian操作系統中的Rpi.GPIO Python庫來對傳感器、繼電器等連接在GPIO接口的設備進行讀取和控制;使用MySQLdb庫讀取云數據庫中的數據并將傳感器數據寫入云數據庫。遠程監控方面使用C語言編寫的mjpg-streamer將攝像頭獲取的畫面進行編碼并建立可訪問的服務器,使用戶通過http協議訪問獲得監控畫面。
服務器端使用開源的MariaDB作為數據庫,該數據庫作為MySQL的開源版本,應用廣泛。服務器使用Tomcat,服務器端的編寫使用Java語言,運用SSH框架實現服務器端的軟件功能。
4 云服務器端軟件實現
4.1 云服務器環境框架
服務器端采用Tomcat+MariaDB架構,使用目前流行的SSH(Struts,Spring,Hibernate)框架搭建服務器端的軟件。MariaDB負責存儲整個系統產生的數據,包括溫度、濕度、家居的開關狀態及樹莓派的IP地址等。SSH框架負責系統的邏輯處理并提供REST風格的接口供客戶端調用。
4.2 REST風格的API
即提供訪問功能的URI(如開燈),客戶端使用GET方法請求http://example.com/smart/openlight此URI即可,方便客戶端的使用及編碼,因此在服務器中采用REST風格的API是實現客戶端與服務器端交互的不二之選。使用Struts2框架提供的action機制編寫對應的action操作控制數據庫中的家居狀態標識,樹莓派通過輪詢機制監測家居狀態的更改進而做出相應的動作。
5 樹莓派端軟件實現
5.1 安裝操作系統
從Raspberry Pi官方網站下載最新的Raspbian鏡像解壓得到img文件。將空白SD卡插入電腦,使用diskutil list命令確定SD卡的路徑,然后使用dd命令將img文件寫入SD卡,鏡像路徑為/Users/pi/Downloads/2016-03-18-raspbian-jessie.img,SD卡路徑為/dev/disk2,在終端中使用如下命令寫入磁盤鏡像:
將已寫入系統的SD卡插入樹莓派的SD卡插槽并通電開機,在終端使用如下命令安裝Python操作MySQL數據庫的必要組件python-mysqldb:
5.2 溫濕度傳感器軟件實現
DHT11是一款數字信號輸出的溫濕度復合傳感器,其信號如圖6所示。每個DHT11出廠前都會在校驗室中校準,校準系數以程序的形式存在OTP內存中。DHT11的原理圖以及在樹莓派上使用Python讀取DHT11信號關鍵代碼如下:
j+=1
5.3 家居控制軟件實現
使用繼電器控制家居的開關。樹莓派通過輪詢方式每隔一定時間便會查詢云服務器數據庫家居狀態表,如果查詢到有相應的開關變化,通過控制與繼電器相連的GPIO輸出電平的高低來控制繼電器的開關以達到控制家居開關的目的。
5.4 視頻監控軟件實現
樹莓派上提供了專供攝像頭使用的CSI接口,使得基于樹莓派的遠程視頻監控系統成為可能,我們只需將攝像頭與樹莓派上的CSI接口相連并在系統設置raspconfig中開啟支持攝像頭的選項,攝像頭就可以正常使用了。
由于遠程監控需要通過互聯網遠程查看攝像頭所捕獲的畫面,因此我們還需要使用一款開源軟件——mjpg-streamer。mjpg-streamer從webcam攝像頭采集圖像,并將圖像以流的形式通過基于IP的網絡傳輸到網絡瀏覽器。由于大部分編碼工作都是由攝像頭完成的,因此mjpg-streamer僅需要很少的CPU和內存資源就可以工作,非常適用于功耗較低的樹莓派。
mjpg-streamer使用C語言編寫,因此首先需要使用如下命令在樹莓派上安裝C編譯器cmake:sudo apt-get install cmake。除此之外,mjpg-streamer還需要jpeg編碼庫libjpeg8-dev的支持,同理,使用sudo apt-get install libjpeg8-dev在樹莓派上安裝該支持庫。
要配置mjpg-streamer需經過如下幾個步驟:
(1)將mjpg-streamer的壓縮包解壓;
(2)修改mjpg-streamer的配置文件,在樹莓派上用文本編輯器修改mjpg-streamer-master/mjpg-streamer-experimental/plugins/input_raspicam下的input_raspicam.c文件,根據自己的網絡帶寬調整監控圖像的幀率(fps)以及分辨率(width和height);
(3)編譯mjpg-streamer,將當前路徑移動到mjpg-streamer-experimental,使用make clean all命令進行編譯;
(4)制作啟動腳本,方便開啟監控,新建一個sh文件,將cd mjpg-streamer-master/mjpg-streamer-experimental./mjpg_streamer -i “./input_raspicam.so” -o “./output_http.so -w ./www”這兩條命令寫入文件并保存,使用 chmod 744命令賦予該文件可運行的權限;
(5)將運行該腳本的命令加入/etc/init.d文件,使其開機自動運行。
完成上述步驟后重啟樹莓派,通過瀏覽器訪問http://樹莓派的ip:8080即可查看實時監控情況。
6 結 語
基于樹莓派+云服務器的解決方案能較好地實現從公網遠程控制智能家居及遠程實時視頻監控,樹莓派的功耗和發熱極低,即使長時間運行也不會出現故障,而又因樹莓派采用Linux操作系統,可擴展性高,易于在其基礎上開發出更多的功能模塊,且系統設計簡單、搭建方便、成本低廉,是普通家庭采用智能家居方案的絕佳選擇。
參考文獻
[1]瞿中,熊安萍,蔣溢.計算機科學導論(第3版)[M].北京:清華大學出版社,2010.
(下轉第頁)
(上接第頁)
[2]Peter Norton.計算機導論(第 6 版)[M].楊繼萍,錢偉,等,譯.北京:清華大學出版社,2009.
[3]郭衛斌,楊建國.計算機導論[M].上海:華東理工大學出版社,2012.