徐 文,孟 文,曾 麗
(西南交通大學 機械工程學院,成都 610031)
隨著科技的進步,以安卓智能手機為通信終端的實時信息處理能力飛速增強,這預示著物聯網將成為科技發展的必然趨勢[1]。智能家居屬于物聯網的范疇,視頻監控系統是智能家居系統的一部分,且在智能家居系統中占有重要位置,用戶通過手機可以直觀地看到監測場所的實時畫面,這對于家庭安防和智能生活有著十分重要的意義。
本文介紹了一種遠程視頻監控系統的設計方案,通過WiFi無線通訊方式進行信息傳輸,由STM32F105RBT6 ARM芯片作為下位機核心控制器,Android智能手機作為控制終端[2]。本系統可遠距離實時掌握家中情況,并通過滑動手機屏幕實現攝像頭云臺的轉動,從而達到對房間全方位的監控。
系統總體設計包括STM32F105控制器的設計、Android智能手機終端應用軟件的設計以及WiFi模塊和家用路由器的設置。系統整體結構如圖1所示,STM32F105控制器主要用于解析上位機的控制代碼、處理分析傳感器信息、并上傳舵機位置信息。WiFi模塊工作在STA站點模式,家用路由器工作在AP熱點模式[3-5],WiFi模塊接入家用路由器產生的無線信號就可以連入到Internet,從而實現外網訪問。在Android智能手機終端上安裝相應的應用軟件,該軟件能給用戶提供了一個良好的用戶界面,用戶只需將手機連接到外網并打開應用軟件登陸,就可以在應用軟件界面上看到實時上傳的視頻畫面。

圖1 系統整體結構Fig.1 Overall system structure
本智能家居視頻監控系統的主控芯片選用STM32F105RBT6,它是以ARM的Cortex-M3為內核的高性能處理器,最高工作頻率可達72 MHz,內置高速存儲器,含高達128 KB的內置閃存存儲器用于存放程序和數據,片上集成各種外設功能,該芯片不僅工作性能穩定而且擁有超低功耗。大量的快速I/O口可方便后續擴展功能。片上PA9、PA10端口用于和WiFi模塊進行串口通訊,PA2、PA3端口為舵機的信號輸出端。芯片采用3.3 V直流供電,由于USB供電的普及,本系統采用USB接口供電,AMS1117-3.3降壓芯片可以把5 V電壓降低得到穩定的3.3 V電壓供芯片工作使用,具體電路原理如圖2所示。

圖2 電源電路Fig.2 Power circuit diagram
本系統選用以AR9331WiFi芯片為核心的WiFi通訊模塊,支持802.11b/g/n無線標準,支持TCP/IP網絡協議棧,支持多種工作模式,WiFi模塊在工作前,為其燒錄開源的 OpenWrt固件[6],OpenWrt是一個高度模塊化和自動化的嵌入式Linux系統,常常被用于工業控制、智能家居、無線路由器和小型機器人等多種場合,用戶可以通過OpenWrt強大的網絡組件進行各種控制功能的開發,本系統根據功能需要在OpenWrt固件上安裝串口和視頻程序驅動,分別用來實現串口通訊和啟動USB攝像頭,WiFi模塊上有一段程序叫做mjpg-streamer,這段程序用于把USB攝像頭的視頻進行編碼,然后通過WiFi無線信號返回給上位機[7]。為了實現攝像頭云臺功能,本系統采用舵機來實現云臺上下左右4個方向上的轉動。舵機采用輝勝的9G舵機,其運用范圍廣泛,在微機電系統中一般作為基本的輸出執行機構,其簡單的控制和輸出使得單片機系統非常容易與之接口。
STM32F105處理器模塊上電后,首先進行系統初始化,包括串口初始化、系統時鐘初始化等,然后延時30 s,這里延時是因為WiFi通訊模塊上電后,初始化需要的時間比較長。處理器模塊的主要功能是接收來自WiFi模塊的信息并解析相應代碼,然后驅動舵機完成相應的角度轉動。控制指令格式如表1所示。

表1 通訊協議Tab.1 Communication protocol
舵機是PWM脈寬調制控制,輸入的是角度值,它的角度又對應PWM波的占空比,所以在對其進行控制時,需在程序中先將角度值進行轉化,另外,為了防止舵機由于轉動角度過大而燒毀,應對其設定初值。舵機控制流程如圖3所示。
視頻監控系統上位機Android手機客戶端的設計工作主要包括手機UI界面設計、Android手機端Socket通信、Android端的數據處理 3個方面。

圖3 舵機控制流程Fig.3 Flow chart of steering gear control
UI設計即用戶操作界面設計,本文采用Eclipse開發平臺,在Eclipse中創建工程文件,Android手機的UI界面是通過res目錄下的XML文件來定義用戶界面,利用XML文件進行UI設計的優點是代碼結構簡潔明了,而且還體現MVC原則。首先在main.xml文件中添加一個線性布局管理器Linear-Layout作為相關組件的容器,然后添加組件并設置組件的各種屬性,最后在LinearLayout中添加id為title1的TextView組件顯示小標題。在視頻監控界面中設置了3個EditText和1個AnalogClock顯示時間,方便用戶在其中輸入視頻地址、IP地址和端口號。在主界面中點擊監控視頻按鈕時,界面自動跳轉到視頻監控登錄界面,主控界面和視頻登錄界面如圖4所示。

圖4 主界面與視頻登錄界面Fig.4 Main interface and video login interface
Socket通信是一種基于TCP/IP的通信協議,它在通訊的兩端各建立一個Socket,并通過Socket產生數據流來進行網絡數據傳輸[8]。Android中實現Socket通信的類有 2個:Socket類和 ServerSocket類。客戶端可使用Socket的構造器來連接到指定服務器,代碼格式為Socket(InetAddress/String re moteAddress,int port),上述代碼中的 2個參數 InetAddress/String remoteAddress代表服務器的IP地址,int port代表通信端口,通過這行代碼客戶端就可以建立到指定IP地址的Socket連接;ServerSocket類用于創建TCP服務器端,它可通過調用Socket accept()方法建立監聽客戶端連接請求的Socket對象。服務器端首先在port端口建立了一個Server-Socket對象A,然后通過A對象調用accept()方法建立一個新的Socket對象用于監聽來自客戶端的連接請求。當2個通信實體之間成功建立了Socket通信鏈路之后就可以進行數據傳輸了,Socket類提供 getInputStream()和 getOutputStream()2 個方法分別獲取數據輸入流和輸出流,發送數據時只需要往輸出流中寫入數據,接收數據時需要從輸入流中讀出數據,代碼執行過程非常簡單,格式如下:

當WiFi模塊上傳視頻文件時,手機端可調用getInputStream()方法來接收視頻數據;當用戶通過手機來控制舵機云臺,則手機終端可調用getOutputStream()方法來實現數據對外的發送。
數據處理包括視頻流的解碼和控制指令的發送。首先APP啟動Mymainfrm.java文件[9],進入視頻監控登錄界面并輸入視頻地址,通過點擊“啟動”按鈕,程序執行 Intent.setclass(Mymainfrm.this,Myvideo.class)語句,界面跳轉到 Myvideo.xml控制界面,視頻流的解碼在MysurfaceView.java中進行,該文件主要用于視頻解碼,它被Myvideo.java文件調用,視頻解碼程序流程如圖5所示。

圖5 視頻解碼流程Fig.5 Video decoding flow chart
通過滑動屏幕實現舵機的轉動在Myvideo.java文件中實現,設計思路是“滑動距離=改變角度大小”,在手機屏幕事件處理方法OntouchEvent()里設置監聽器[10],當手指在屏幕按下的時候記錄起始位置坐標,當手指離開屏幕時記錄手指最后位置。改變的距離量就對應舵機的轉動角度,“具體角度=當前角度+改變角度”,最后利用 update angle(angle)實現角度值的更新。角度值改變流程如圖6所示。

圖6 角度值改變流程Fig.6 Angle changing flow chart
為了實現遠程監控,首先需要對WiFi無線通訊模塊和家用路由器進行設置,以家用路由器作為“橋梁”,實現外網訪問,具體步驟為
(1)設置轉發規則,登陸家庭路由器的192.168.1.1在管理界面,添加2個端口轉發規則,端口8080為視頻端口,端口2001為控制端口,并使用192.168.1.108作為轉發的目標客戶端(WiFi板IP地址);
(2)設置靜態地址分配,MAC地址即為WiFi板的MAC地址,IP地址固定為192.168.1.108;
(3)將WiFi板的模式從AP模式改成Client模式,在配置模式的頁面,修改為Client模式,同時BSSID項填入家庭路由的SSID名稱;
(4)點擊 WWAN 接口的“修改”,把“協議”選為靜態地址,IP設置為家庭路由器上指定的靜態地址“192.168.1.108”,子網掩碼為“255.255.255.0”,執行保存;
(5)點擊“LAN”設置 LAN 口 IP 地址,設置為192.168.2.1執行保存;
(6)關閉防火墻:在防火墻配置頁面里面,把“啟用SYN-flood防御”去掉,下面的所有選項,凡是“禁止”的一概設為“允許”,并保存。
以上設置實質就是端口映射,就是將外網主機的IP地址的一個端口映射到內網中的設備,并提供相應的服務。當用戶訪問該IP的這個端口時,服務器自動將請求映射到對應局域網內部的終端。
通過以上章節的描述以及對WiFi無線通訊模塊和家用路由器的設置來搭建系統硬件平臺,系統運行如圖7所示。本實驗采用TP-LINK TL-WR890N 450M無線路由器,智能手機型號為三星7805V,首先系統上電,路由器會自動撥號上網,待WiFi模塊啟動后,手機就可以通過4G網絡或WiFi熱點經由外網來實現遠程視頻監控,經實驗證明該系統能穩定運行,每秒可傳輸8~10幀畫面,視頻畫面流暢,無卡頓現象。圖7中手機畫面為攝像頭所拍攝到的畫面。

圖7 系統運行Fig.7 System operation diagram
本文利用WiFi無線通訊技術和Android智能手機應用軟件開發平臺設計了一款低成本低功耗的遠程視頻監控系統。用戶可以遠程通過Android手機實時監控現場,并且該監控系統能很好地與智能家居系統結合,很大程度上提升了用戶體驗。
[1]季建華.基于物聯網的智能家居遠程監控系統設計與實現[J].計算機應用與軟件,2015,32(11):143-146.
[2]鹿曼.基于Android的智能家居控制系統的設計與實現[D].山東:山東建筑大學,2013.
[3]盧林杰,秦會斌.基于STM8S103和WIFI的智能家居照明系統設計[J].電氣自動化,2014,36(3):101-103.
[4]常志沛.基于Android的智能手機視頻監控系統的設計與實現[D].遼寧:大連海事大學,2011.
[5]劉宇鵬.基于ARM的智能家居視頻監控系統[D].河北:燕山大學,2010.
[6]鄭濤.基于安卓智能手機的遠程監視系統研究[D].陜西:西安科技大學,2014.
[7]張恒.智能視頻監控系統的設計與實現[D]陜西:西安電子科技大學,2011.
[8]李剛.瘋狂Android講義[M].北京:電子工業出版社,2013.
[9]李剛.瘋狂Java講義[M].北京:電子工業出版社,2008.
[10]吳亞峰,杜化美,蘇亞光.Android編程典型實例與項目開發[M].北京:電子工業出版社,2011.