徐 文,孟 文,曾 麗
(西南交通大學(xué) 機械工程學(xué)院,成都 610031)
隨著科技的進步,以安卓智能手機為通信終端的實時信息處理能力飛速增強,這預(yù)示著物聯(lián)網(wǎng)將成為科技發(fā)展的必然趨勢[1]。智能家居屬于物聯(lián)網(wǎng)的范疇,視頻監(jiān)控系統(tǒng)是智能家居系統(tǒng)的一部分,且在智能家居系統(tǒng)中占有重要位置,用戶通過手機可以直觀地看到監(jiān)測場所的實時畫面,這對于家庭安防和智能生活有著十分重要的意義。
本文介紹了一種遠(yuǎn)程視頻監(jiān)控系統(tǒng)的設(shè)計方案,通過WiFi無線通訊方式進行信息傳輸,由STM32F105RBT6 ARM芯片作為下位機核心控制器,Android智能手機作為控制終端[2]。本系統(tǒng)可遠(yuǎn)距離實時掌握家中情況,并通過滑動手機屏幕實現(xiàn)攝像頭云臺的轉(zhuǎn)動,從而達到對房間全方位的監(jiān)控。
系統(tǒng)總體設(shè)計包括STM32F105控制器的設(shè)計、Android智能手機終端應(yīng)用軟件的設(shè)計以及WiFi模塊和家用路由器的設(shè)置。系統(tǒng)整體結(jié)構(gòu)如圖1所示,STM32F105控制器主要用于解析上位機的控制代碼、處理分析傳感器信息、并上傳舵機位置信息。WiFi模塊工作在STA站點模式,家用路由器工作在AP熱點模式[3-5],WiFi模塊接入家用路由器產(chǎn)生的無線信號就可以連入到Internet,從而實現(xiàn)外網(wǎng)訪問。在Android智能手機終端上安裝相應(yīng)的應(yīng)用軟件,該軟件能給用戶提供了一個良好的用戶界面,用戶只需將手機連接到外網(wǎng)并打開應(yīng)用軟件登陸,就可以在應(yīng)用軟件界面上看到實時上傳的視頻畫面。
圖1 系統(tǒng)整體結(jié)構(gòu)Fig.1 Overall system structure
本智能家居視頻監(jiān)控系統(tǒng)的主控芯片選用STM32F105RBT6,它是以ARM的Cortex-M3為內(nèi)核的高性能處理器,最高工作頻率可達72 MHz,內(nèi)置高速存儲器,含高達128 KB的內(nèi)置閃存存儲器用于存放程序和數(shù)據(jù),片上集成各種外設(shè)功能,該芯片不僅工作性能穩(wěn)定而且擁有超低功耗。大量的快速I/O口可方便后續(xù)擴展功能。片上PA9、PA10端口用于和WiFi模塊進行串口通訊,PA2、PA3端口為舵機的信號輸出端。芯片采用3.3 V直流供電,由于USB供電的普及,本系統(tǒng)采用USB接口供電,AMS1117-3.3降壓芯片可以把5 V電壓降低得到穩(wěn)定的3.3 V電壓供芯片工作使用,具體電路原理如圖2所示。
圖2 電源電路Fig.2 Power circuit diagram
本系統(tǒng)選用以AR9331WiFi芯片為核心的WiFi通訊模塊,支持802.11b/g/n無線標(biāo)準(zhǔn),支持TCP/IP網(wǎng)絡(luò)協(xié)議棧,支持多種工作模式,WiFi模塊在工作前,為其燒錄開源的 OpenWrt固件[6],OpenWrt是一個高度模塊化和自動化的嵌入式Linux系統(tǒng),常常被用于工業(yè)控制、智能家居、無線路由器和小型機器人等多種場合,用戶可以通過OpenWrt強大的網(wǎng)絡(luò)組件進行各種控制功能的開發(fā),本系統(tǒng)根據(jù)功能需要在OpenWrt固件上安裝串口和視頻程序驅(qū)動,分別用來實現(xiàn)串口通訊和啟動USB攝像頭,WiFi模塊上有一段程序叫做mjpg-streamer,這段程序用于把USB攝像頭的視頻進行編碼,然后通過WiFi無線信號返回給上位機[7]。為了實現(xiàn)攝像頭云臺功能,本系統(tǒng)采用舵機來實現(xiàn)云臺上下左右4個方向上的轉(zhuǎn)動。舵機采用輝勝的9G舵機,其運用范圍廣泛,在微機電系統(tǒng)中一般作為基本的輸出執(zhí)行機構(gòu),其簡單的控制和輸出使得單片機系統(tǒng)非常容易與之接口。
STM32F105處理器模塊上電后,首先進行系統(tǒng)初始化,包括串口初始化、系統(tǒng)時鐘初始化等,然后延時30 s,這里延時是因為WiFi通訊模塊上電后,初始化需要的時間比較長。處理器模塊的主要功能是接收來自WiFi模塊的信息并解析相應(yīng)代碼,然后驅(qū)動舵機完成相應(yīng)的角度轉(zhuǎn)動??刂浦噶罡袷饺绫?所示。
表1 通訊協(xié)議Tab.1 Communication protocol
舵機是PWM脈寬調(diào)制控制,輸入的是角度值,它的角度又對應(yīng)PWM波的占空比,所以在對其進行控制時,需在程序中先將角度值進行轉(zhuǎn)化,另外,為了防止舵機由于轉(zhuǎn)動角度過大而燒毀,應(yīng)對其設(shè)定初值。舵機控制流程如圖3所示。
視頻監(jiān)控系統(tǒng)上位機Android手機客戶端的設(shè)計工作主要包括手機UI界面設(shè)計、Android手機端Socket通信、Android端的數(shù)據(jù)處理 3個方面。
圖3 舵機控制流程Fig.3 Flow chart of steering gear control
UI設(shè)計即用戶操作界面設(shè)計,本文采用Eclipse開發(fā)平臺,在Eclipse中創(chuàng)建工程文件,Android手機的UI界面是通過res目錄下的XML文件來定義用戶界面,利用XML文件進行UI設(shè)計的優(yōu)點是代碼結(jié)構(gòu)簡潔明了,而且還體現(xiàn)MVC原則。首先在main.xml文件中添加一個線性布局管理器Linear-Layout作為相關(guān)組件的容器,然后添加組件并設(shè)置組件的各種屬性,最后在LinearLayout中添加id為title1的TextView組件顯示小標(biāo)題。在視頻監(jiān)控界面中設(shè)置了3個EditText和1個AnalogClock顯示時間,方便用戶在其中輸入視頻地址、IP地址和端口號。在主界面中點擊監(jiān)控視頻按鈕時,界面自動跳轉(zhuǎn)到視頻監(jiān)控登錄界面,主控界面和視頻登錄界面如圖4所示。
圖4 主界面與視頻登錄界面Fig.4 Main interface and video login interface
Socket通信是一種基于TCP/IP的通信協(xié)議,它在通訊的兩端各建立一個Socket,并通過Socket產(chǎn)生數(shù)據(jù)流來進行網(wǎng)絡(luò)數(shù)據(jù)傳輸[8]。Android中實現(xiàn)Socket通信的類有 2個:Socket類和 ServerSocket類。客戶端可使用Socket的構(gòu)造器來連接到指定服務(wù)器,代碼格式為Socket(InetAddress/String re moteAddress,int port),上述代碼中的 2個參數(shù) InetAddress/String remoteAddress代表服務(wù)器的IP地址,int port代表通信端口,通過這行代碼客戶端就可以建立到指定IP地址的Socket連接;ServerSocket類用于創(chuàng)建TCP服務(wù)器端,它可通過調(diào)用Socket accept()方法建立監(jiān)聽客戶端連接請求的Socket對象。服務(wù)器端首先在port端口建立了一個Server-Socket對象A,然后通過A對象調(diào)用accept()方法建立一個新的Socket對象用于監(jiān)聽來自客戶端的連接請求。當(dāng)2個通信實體之間成功建立了Socket通信鏈路之后就可以進行數(shù)據(jù)傳輸了,Socket類提供 getInputStream()和 getOutputStream()2 個方法分別獲取數(shù)據(jù)輸入流和輸出流,發(fā)送數(shù)據(jù)時只需要往輸出流中寫入數(shù)據(jù),接收數(shù)據(jù)時需要從輸入流中讀出數(shù)據(jù),代碼執(zhí)行過程非常簡單,格式如下:
當(dāng)WiFi模塊上傳視頻文件時,手機端可調(diào)用getInputStream()方法來接收視頻數(shù)據(jù);當(dāng)用戶通過手機來控制舵機云臺,則手機終端可調(diào)用getOutputStream()方法來實現(xiàn)數(shù)據(jù)對外的發(fā)送。
數(shù)據(jù)處理包括視頻流的解碼和控制指令的發(fā)送。首先APP啟動Mymainfrm.java文件[9],進入視頻監(jiān)控登錄界面并輸入視頻地址,通過點擊“啟動”按鈕,程序執(zhí)行 Intent.setclass(Mymainfrm.this,Myvideo.class)語句,界面跳轉(zhuǎn)到 Myvideo.xml控制界面,視頻流的解碼在MysurfaceView.java中進行,該文件主要用于視頻解碼,它被Myvideo.java文件調(diào)用,視頻解碼程序流程如圖5所示。
圖5 視頻解碼流程Fig.5 Video decoding flow chart
通過滑動屏幕實現(xiàn)舵機的轉(zhuǎn)動在Myvideo.java文件中實現(xiàn),設(shè)計思路是“滑動距離=改變角度大小”,在手機屏幕事件處理方法OntouchEvent()里設(shè)置監(jiān)聽器[10],當(dāng)手指在屏幕按下的時候記錄起始位置坐標(biāo),當(dāng)手指離開屏幕時記錄手指最后位置。改變的距離量就對應(yīng)舵機的轉(zhuǎn)動角度,“具體角度=當(dāng)前角度+改變角度”,最后利用 update angle(angle)實現(xiàn)角度值的更新。角度值改變流程如圖6所示。
圖6 角度值改變流程Fig.6 Angle changing flow chart
為了實現(xiàn)遠(yuǎn)程監(jiān)控,首先需要對WiFi無線通訊模塊和家用路由器進行設(shè)置,以家用路由器作為“橋梁”,實現(xiàn)外網(wǎng)訪問,具體步驟為
(1)設(shè)置轉(zhuǎn)發(fā)規(guī)則,登陸家庭路由器的192.168.1.1在管理界面,添加2個端口轉(zhuǎn)發(fā)規(guī)則,端口8080為視頻端口,端口2001為控制端口,并使用192.168.1.108作為轉(zhuǎn)發(fā)的目標(biāo)客戶端(WiFi板IP地址);
(2)設(shè)置靜態(tài)地址分配,MAC地址即為WiFi板的MAC地址,IP地址固定為192.168.1.108;
(3)將WiFi板的模式從AP模式改成Client模式,在配置模式的頁面,修改為Client模式,同時BSSID項填入家庭路由的SSID名稱;
(4)點擊 WWAN 接口的“修改”,把“協(xié)議”選為靜態(tài)地址,IP設(shè)置為家庭路由器上指定的靜態(tài)地址“192.168.1.108”,子網(wǎng)掩碼為“255.255.255.0”,執(zhí)行保存;
(5)點擊“LAN”設(shè)置 LAN 口 IP 地址,設(shè)置為192.168.2.1執(zhí)行保存;
(6)關(guān)閉防火墻:在防火墻配置頁面里面,把“啟用SYN-flood防御”去掉,下面的所有選項,凡是“禁止”的一概設(shè)為“允許”,并保存。
以上設(shè)置實質(zhì)就是端口映射,就是將外網(wǎng)主機的IP地址的一個端口映射到內(nèi)網(wǎng)中的設(shè)備,并提供相應(yīng)的服務(wù)。當(dāng)用戶訪問該IP的這個端口時,服務(wù)器自動將請求映射到對應(yīng)局域網(wǎng)內(nèi)部的終端。
通過以上章節(jié)的描述以及對WiFi無線通訊模塊和家用路由器的設(shè)置來搭建系統(tǒng)硬件平臺,系統(tǒng)運行如圖7所示。本實驗采用TP-LINK TL-WR890N 450M無線路由器,智能手機型號為三星7805V,首先系統(tǒng)上電,路由器會自動撥號上網(wǎng),待WiFi模塊啟動后,手機就可以通過4G網(wǎng)絡(luò)或WiFi熱點經(jīng)由外網(wǎng)來實現(xiàn)遠(yuǎn)程視頻監(jiān)控,經(jīng)實驗證明該系統(tǒng)能穩(wěn)定運行,每秒可傳輸8~10幀畫面,視頻畫面流暢,無卡頓現(xiàn)象。圖7中手機畫面為攝像頭所拍攝到的畫面。
圖7 系統(tǒng)運行Fig.7 System operation diagram
本文利用WiFi無線通訊技術(shù)和Android智能手機應(yīng)用軟件開發(fā)平臺設(shè)計了一款低成本低功耗的遠(yuǎn)程視頻監(jiān)控系統(tǒng)。用戶可以遠(yuǎn)程通過Android手機實時監(jiān)控現(xiàn)場,并且該監(jiān)控系統(tǒng)能很好地與智能家居系統(tǒng)結(jié)合,很大程度上提升了用戶體驗。
[1]季建華.基于物聯(lián)網(wǎng)的智能家居遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].計算機應(yīng)用與軟件,2015,32(11):143-146.
[2]鹿曼.基于Android的智能家居控制系統(tǒng)的設(shè)計與實現(xiàn)[D].山東:山東建筑大學(xué),2013.
[3]盧林杰,秦會斌.基于STM8S103和WIFI的智能家居照明系統(tǒng)設(shè)計[J].電氣自動化,2014,36(3):101-103.
[4]常志沛.基于Android的智能手機視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D].遼寧:大連海事大學(xué),2011.
[5]劉宇鵬.基于ARM的智能家居視頻監(jiān)控系統(tǒng)[D].河北:燕山大學(xué),2010.
[6]鄭濤.基于安卓智能手機的遠(yuǎn)程監(jiān)視系統(tǒng)研究[D].陜西:西安科技大學(xué),2014.
[7]張恒.智能視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D]陜西:西安電子科技大學(xué),2011.
[8]李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2013.
[9]李剛.瘋狂Java講義[M].北京:電子工業(yè)出版社,2008.
[10]吳亞峰,杜化美,蘇亞光.Android編程典型實例與項目開發(fā)[M].北京:電子工業(yè)出版社,2011.