高偲程, 馬廣焜, 李 想, 劉智宇
(沈陽工業大學 軟件學院, 沈陽 110023)
對于突發事件及不法侵害,很多人由于不能得到及時救助而遇險[1]。對于事故者來說,能得到及時的救護是首要條件。如果對事故者進行準確定位,并發出位置信息至指定的移動智能通訊設備就可以大大減輕事故所造成的危害。可以通過GPS進行地理位置定位。然而國內研發的大部分GPS產品都局限于車載導航產品,面向大眾的手持GPS報警產品并不多見。個人GPS定位報警系統以其體積小、便于攜帶、價格低廉、獨立使用等優點將成為重點研究方向之一。本系統通過GPS模塊獲取移動端的位置信息,并使用移動網絡上傳至云服務器,服務器將數據轉發給客戶端,客戶端解析數據并在地圖上顯示移動端的位置。當發生緊急情況時可以做到一鍵報警,防止人身財產受到侵害。
目前常見的定位技術主要有GPS衛星定位、藍牙定位和WiFi信號定位技術。
GPS[2]是由美國在上世紀70年代首倡研制,并發展至今,尤其是近幾年來,GPS在商業領域的發展勢頭堪稱強勁。以GPS為代表的應用產品、新產品,迅速地進入日常工作、生活和娛樂中。對于定位報警,國外在公共報警系統中已斬獲較為先進的開發和應用。1997年6月美國聯邦通信委員會(FCC)通過了一項法令來強制推行911無線服務(E911)[3]。目前,E911報警的方式還是以語音為主,未來幾年將實現短信、視頻等報警方式。
隨著各大手機陸續加入對藍牙4.0標準在軟硬件上的支持隊列,霍丙乾等人研發設計了一種基于藍牙4.0模塊的電子防丟器[4]。該防丟器由母機和子機構成,子機為內置藍牙4.0模塊防丟物,母機為內置藍牙4.0的Android智能手機。當子母機超過預定的距離時,發出報警。該系統有距離的局限性,雖然可以報警卻不能做到實時跟蹤位置信息。
隨著智能終端設備的普及應用和WiFi信號的覆蓋范圍日益擴大,趙萌等人重點研發了一種基于Android操作系統、WiFi以及GPS等技術為核心的GPS導航應用系統[5]。借助該系統,基于Android系統的移動終端可方便地查詢自身位置,并獲取各種基于位置的服務。但是該系統僅限于通過Android手機獲取實時位置的信息。
本文提出的基于Android平臺的個人GPS定位報警系統是GPS定位與實時報警相結合,相比于傳統的單一定位或報警裝置,具有及時性、隱蔽性、大眾性、易攜帶、范圍廣等優點。
本系統的研究將圍繞2個方面展開,分別是:硬件平臺的設計與軟件App的開發。具體來說,在硬件平臺上主要包括控制單元模塊、GPS信號接收模塊、位置信息發送模塊和報警模塊。軟件部分包括位置信息轉發模塊、位置信息接收模塊、定位模塊。本次研發系統的功能架構設計如圖1所示。

圖1 系統功能圖Fig. 1 System function diagram
考慮到GPS模塊只能提供定位的數字信息,而不能直接傳送到服務器,因此就需要使用單片機對GPS模塊的數據進行接收,通過GSM網絡將數據發送到服務器。本次研究針對硬件平臺的功能設計內容可闡釋解析如下。
(1)控制單元模塊。嵌入式系統作為控制單元,統籌管理終端的整個運作,以單片機為核心,用于協調和控制模塊各個功能單元,主要實現監控中心指令并相應獲取坐標信息,發送坐標數據等功能。
(2)GPS信號處理單元。通過GPS模塊實時獲取使用者地理位置信息,并進行壓縮處理以方便傳輸。
(3)位置信息傳輸單元。通過訪問服務器地址,將坐標數據實時上傳到中轉服務器上。
(4)報警單元。個人GPS定位報警系統是通過GSM系統下的Sim模塊以短信息形式將求救短信傳送到指定手機號碼。
系統的軟件部分主要研究內容可分述如下。
(1)位置信息轉發模塊。服務器把從硬件部分獲取的數據轉發給客戶端程序。
(2)位置信息接收模塊。不斷從服務器上讀取數據,并引入邏輯解析,提取經緯度等地理位置信息發送給定位模塊。
(3)定位模塊。把獲取的經緯度信息在地圖上進行匹配并根據位置信息的變化,不斷刷新匹配結果,達到實時追蹤的效果。
本系統設計上主要分為移動端、服務器端和客戶端。其中,移動端由GPS模塊、單片機和GSM模塊組成;服務器端由中轉服務器組成;客戶端由GSM模塊、高德地圖API和手機APP組成,如圖2所示。

圖2 基于Android系統的個人GPS定位報警示意圖
Fig.2PersonalGPSpositioningalarmdiagrambasedonAndroidsystem
移動端使用GPS模塊進行定位,將GPS模塊采集到的數據通過GSM網絡上傳到云服務器,并開發Android客戶端的程序對云服務器轉發的用戶位置信息實現接收,再將接收到的數據在地圖上進行匹配。同時,當移動端用戶發出報警信息時,客戶端用戶可以接收短信并展開定位追蹤。
移動端通過GPS定位獲取用戶的實時位置信息,將其傳輸到控制單元進行分析處理,再通過GSM網絡上傳到中轉服務器,與此同時使用GSM模塊中的SIM卡,向預留手機號發送求救短信實現報警功能。客戶端部分通過訪問中轉服務器并不斷刷新獲取終端實時位置信息,將其反饋到手機終端App的地圖中,實現實時追蹤定位功能。研究中,針對系統結構功能設計可詳述如下。
(1)移動端利用基于Wiring的Arduino編程語言在結合了Processing的Arduino開發環境中來設計生成[6-7]。
單片機采用的是Arduino的Mega 2560單片機。Arduino Mega 2560是采用USB接口的核心電路板,具有54路數字輸入/輸出,適合需要大量I/O接口的研究設計。概括來說,其優點是簡單易學,適合初步接觸的單片機使用者,并且有多端I/O接口,適合本系統的GPS/GPRS模塊的接入[8]。
(2)服務器為租用的騰訊云服務器,服務器程序是以C#語言為基礎進行開發的,通過Socket套接字實現與移動端的實時通訊和信息交流。服務器的后臺程序接收到移動端數據后,將其存入數據庫供客戶端調用,當客戶端發出訪問請求時,便將對應的數據信息發送給客戶端。
(3)客戶端開發了手機APP應用程序,主要利用Java語言在Android Studio環境平臺上進行編程。當監護人收到報警短信后,打開客戶端,客戶端的位置信息模塊可以自行連接高德地圖的API接口[9],通過高德地圖的API設備應用程序端口,用戶可以訪問高德地圖的服務和數據,向服務器發送位置信息訪問請求,接收到所請求的信息后,轉入數據解析,提取經緯度信息,并將其在地圖上進行標記。
系統在開發過程中關于其重點關鍵問題,可給出如下研究論述。
GPS模塊可提供定位功能,通過與單片機相連可發送位置坐標信息。
當移動端啟動定位時,GPS模塊開始接收信號。首先打開串口讀取GPS數據判斷是否收到$GPGGA(GPS數據輸出格式語句),如果未收到,則繼續讀取GPS數據;收到,則讀取GGA字符串并截取位置信息。然后對GPS獲取到的信息進行解析,通過switch語句分別獲取當前位置的緯度信息和經度信息。最后運用AT指令代碼將數據上傳到服務器。
個人GPS定位報警系統是通過短信息形式將位置信息傳送到手機指定號碼的接收人。短信息在移動終端之間的傳送主要是基于GSM網絡發布的Sim短信息服務。具體是由單片機根據發送短消息的特定步驟,采用AT命令控制GSM模塊發送短消息,是系統設計中至關重要的內容之一。
處理器通過向串口發送接收AT命令與GSM模塊形成通信回路,通過AT命令實現對GSM模塊的基本操作,AT命令發送短信時可使用文本模式和協議數據單元模式(PDU,protocol data unit)[10]。大多手機不支持文本模式,只支持PDU模式。PDU模式是把短信正文經十六進制編碼后提交傳送,定制編碼分為3個部分:服務中心號、接收方手機號、短信內容。
在GPS獲取用戶的經緯度坐標之后,將數據打包封裝,上傳至服務器,以方便客戶端的繼續訪問。
通訊程序在接收到發送的指令后,先創建Socket對象,再通過bind()函數將ipv6地址和端口號組合賦予Socket對象,進行通信地址和指定端口的綁定,通過listen()、connect()函數對服務器進行監聽和連接,用accept()函數接收服務請求。在服務器端依次調用socket()、bind()、listen()之后,就會監聽指定的Socket地址。客戶端循序調用socket()、connect()后就向服務器發送了一個連接請求。服務器監聽到這個請求之后,將會調用accept()函數獲取接收請求,成功建立連接。
服務器的后臺程序接收到移動端數據后,將其存入數據庫供客戶端調用,當客戶端發出訪問請求時,便將對應的數據信息發送給客戶端。
在服務器方面,當移動設備的網絡初次訪問時,會將自己的位置信息上傳到服務器端。當收到求救短信、且用戶啟動APP設備后,會獲取服務器中已經由移動設備上傳的位置信息,并且由高德地圖API得到該方位指示下的地理位置信息。在初次訪問后,移動設備會不斷地向服務器發送位置數據,這樣用戶便可以獲取實時的位置信息,達到實時追蹤的目的。
客戶端通過socket通信方法與服務器端相連接,定義BufferedReader緩沖區對象來接收服務器轉發的消息,再從BufferedReader緩沖區中的數據提取出經緯度信息,調用onLocationChanged函數進行定位,同時標識顯示在地圖上。
在啟動客戶端后,客戶端會通過不斷訪問中轉服務器,獲取中轉服務器的地理位置坐標信息,更新用戶的位置信息并反饋到客戶端地圖上,以達到實時追蹤的要求。
在調用服務器中的位置信息數據后,客戶端的位置信息模塊會自行調用已連接高德地圖的API接口,通過高德地圖API設備應用程序端口下的Amap類,用戶可以訪問高德地圖的服務和數據;通過使用AMapLocation Listener接口下的LocationManager函數設置監聽并進行初始化定位;使用AMapLocationListener接口下的onLocationChanged()方法,通過aMapLocation下的函數獲取定位的經緯度、國家、省、城市、地區、街道等信息,最后獲取定位結果并顯示到地圖上。
如果使用高德地圖API中提供GPS和網絡定位,必須注冊GPS和網絡使用權限。在獲取用戶位置時,優先使用GPS進行定位;如果GPS定位沒有打開或者沒有可用位置信息,則判斷是否通過網絡(基站和WiFi)鏈接,如果判斷結果為“是”,高德地圖會根據手機所在環境選擇WiFi或者基站獲取用戶當前位置。在程序中打開相關權限后,將MyLocationOverlay實例添加到MapView中,并調用enableMyLocation()方法,即可實現當前位置的顯示。
基于Android平臺的個人GPS報警系統具有及時性,對于突發性事故或疾病,可以做到快捷、有效地傳送報警人的地理位置信息,使其在最短時間內得到應有的救治和幫助;同時擁有隱蔽性,對于不法犯罪可以做到既能保護報案人及周邊人員的人身與財產安全,又能達到在不驚動涉案人的情況下,出奇不意地懲治犯罪的目的。該款軟件表現出廣闊的發展前景與性能優點。隨著社會發展和科技進步,任何智能手機設備只要安裝了Android系統就可以選擇添加這個程序。研究表明,該系統可廣泛應用于火災、搶劫、迷路、車禍、失蹤、急性疾病等諸多方面。
[1] 張麗,黃國青. 基于Arduino/Android的智能防火防盜報警系統設計[J]. 天津理工大學學報,2015,31(4):18-22.
[2] 吳曉平. 異軍突起的多方位、高精度空間大地測量技術—美國全球定位系統(GPS)研究進展[J]. 地殼形變與地震,1990,10(1):42-45.
[3] 杜武恭,杜惠英. 安全監護場景下的高效定位報警策略研究[J]. 互聯網天地,2015(6):42-45.
[4] 霍丙乾,羅濤,李劍峰. 基于藍牙4.0的防丟系統的研究與設計[J]. 軟件,2014,35(9):94-97.
[5] 趙萌,崔剛. 基于WiFi的Android移動設備導航系統的設計開發[J]. 智能計算機與應用,2013,3(3):60-63,68.
[6] 袁本華,董錚. 基于Arduino控制板的溫室大棚測溫系統設計[J]. 安徽農業科學,2012,40(8):5049-5050.
[7] 陳呂洲. Arduino程序設計基礎 [M]. 北京:北京航空航天大學出版社,2014.
[8] 劉斌. 單片機與PLC之間的串行通信實現[J]. 現代制造技術與裝備,2017(10):112-113.
[9] 向玉云,高爽,陳云紅,等. 百度、高德及Google地圖API比較研究[J]. 軟件導刊,2017,16(9):19-21,25.
[10]呂國策. SIM300C模塊的硬件電路設計及短信控制方式研究[J]. 科技資訊,2017,15(25):9,11.