張敏 王寧 劉賽
摘 要:設(shè)計一款以STM32為核心控制核心的防丟器。STM32獲取GPS實(shí)時位置坐標(biāo),并控制GSM模塊把坐標(biāo)信息傳遞給服務(wù)器。服務(wù)器通過TCP監(jiān)聽,獲取并處理硬件的位置信息,通過算法實(shí)現(xiàn)百度地圖實(shí)時查看位置信息。
【關(guān)鍵詞】STM32 百度地圖 GSM GPS
1 引言
中國已開始進(jìn)入老齡化社會,家有一老如有一寶。上了年紀(jì)的老年人,難免會有走失的危險,為節(jié)省社會資源,防止老人頻繁走失。為了找到一個合適的方法,本項(xiàng)目研究了一款智能防丟器,用戶可以更直觀看出自身和目標(biāo)的距離,并且防止老人、兒童、寵物走失以及行李等物品被竊等。
本文設(shè)計制作便攜式GPS電子追蹤器,是一款基于STM32的防丟器原型機(jī),實(shí)驗(yàn)者可通過手機(jī)或電腦,實(shí)時跟蹤接收衛(wèi)星的數(shù)據(jù)和跟蹤定位。在電腦屏幕上,實(shí)時同步顯示,實(shí)驗(yàn)者可在電腦屏幕上顯示坐標(biāo),并能在手機(jī)屏幕上呈現(xiàn)出電子地圖和路線,并能在硬件不被供電的情況下,通過識別標(biāo)簽,訪問到用戶信息。
擬解決的關(guān)鍵問題:
(1)stm32芯片功能應(yīng)用。
(2)通過addGPSPosMarker調(diào)用百度API將地理坐標(biāo)顯示在地圖上。
(3)通過SQL語句將收到的數(shù)據(jù)實(shí)時保存到數(shù)據(jù)庫和將所需的數(shù)據(jù)調(diào)用出來。
(4)使用eclipse軟件編寫手機(jī)app軟件。
2 防丟器的結(jié)構(gòu)
防丟器以STM32為核心,外圍電路由SIM900A型GSM模塊、GPS模塊、LCD液晶、串口組成。圖1是系統(tǒng)結(jié)構(gòu)圖,STM32利用UART3獲取到GPS當(dāng)前位置信息,通過內(nèi)部DMA傳遞給UART2,信息由UART2直接傳遞給SIM900A,SIM900A利用TCP協(xié)議把位置信息上傳到服務(wù)器。STM32內(nèi)部的FSMC可以驅(qū)動LCD顯示,經(jīng)過內(nèi)部處理當(dāng)前位置信息也在LCD上實(shí)時顯示,也可以利用UART1把數(shù)據(jù)發(fā)送到電腦上,利用電腦處理當(dāng)前位置信息。
3 服務(wù)器搭建
服務(wù)器使用Tomcat搭建,使用eclipse編寫服務(wù)器源碼,把服務(wù)器源碼運(yùn)行在Tomcat上去。服務(wù)器結(jié)構(gòu)如圖2所示,服務(wù)器通過TCP線程監(jiān)聽端口,檢測是否有硬件進(jìn)行連接,當(dāng)有硬件連接時數(shù)據(jù)以json的格式被數(shù)據(jù)庫獲取,位置信息被處理過后直接傳遞到百度地圖,利用JSP技術(shù)把地圖顯示到網(wǎng)頁上去。
Tomcat服務(wù)器是一個免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。對于一個初學(xué)者來說,可以這樣認(rèn)為,當(dāng)在一臺機(jī)器上配置好Apache服務(wù)器,可利用它響應(yīng)HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)頁面的訪問請求。
TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍1驹O(shè)計利用TCP連接到服務(wù)器,把數(shù)據(jù)進(jìn)行實(shí)時傳輸。百度地圖提供了很多豐富的接口,開發(fā)十分簡單,地圖需要一個HTML元素作為容器,這樣才能展現(xiàn)到頁面上。這里我們創(chuàng)建了一個div元素并制定它的大小。地圖會根據(jù)容器大小調(diào)整自身尺寸。利用百度地圖API,可以與其進(jìn)行交互了。API中的地圖對象的外觀與行為與百度地圖網(wǎng)站上交互的地圖非常相似。它支持鼠標(biāo)拖拽、滾輪縮放、雙擊放大等交互功能。服務(wù)器接收硬件上傳的數(shù)據(jù)如圖3,可以看到longitude=11620.403920,即經(jīng)緯度分別為116.2,40.392,當(dāng)前的位置在北京城市學(xué)院,參看谷歌地圖得到的位置坐標(biāo),由于民用GPS有一定誤差,因此得到的結(jié)果還可以接受。
設(shè)計使用5V直流供電,電源經(jīng)降壓模塊后為STM32供電,硬件上電后首先進(jìn)行硬件初始化如圖4所示,硬件初始化,包括時鐘、管腳、定時器、UART等硬件片上資源初始化,接著初始化SIM900A,SIM900A使用串口AT指令,程序首先檢查SIM900A是否存在,如果存在則使用AT指令對其進(jìn)行初始化,并連接遠(yuǎn)程服務(wù)器,發(fā)送測試代碼,服務(wù)器連接成功后,開始對GPS進(jìn)行初始化,GPS是直接接收數(shù)據(jù),利用DMA片內(nèi)外設(shè)進(jìn)行操作,當(dāng)有GPS數(shù)據(jù)時,DMA進(jìn)入中斷,數(shù)據(jù)會被系統(tǒng)讀取,讀取到的數(shù)據(jù)后,SIM900A進(jìn)入透傳模式(即所發(fā)即所得),服務(wù)器收到的數(shù)據(jù)就是GPS回傳的當(dāng)前位置信息。服務(wù)器收到消息判斷為有效消息,則通過JSON方法,把全部GPS信息讀取出來,然后賦給用戶對象,然后利用百度地圖API進(jìn)行數(shù)據(jù)處理,這樣之后就得到了用戶的位置信息。當(dāng)用戶進(jìn)行查詢時,使用JSP技術(shù)就可以把當(dāng)前所在百度地圖上的信息展示出來。
軟件實(shí)現(xiàn)過程中使用到了STM32的UART2和UART3,波特率分別為115200和9600,SIM900A使用串口時需要打開中斷進(jìn)行數(shù)據(jù)接收的處理,GSM直接接收數(shù)據(jù),
4 結(jié)束語
本文給出了STM32、GSM、GPS實(shí)現(xiàn)防丟器硬件的設(shè)計,利用網(wǎng)絡(luò)把GPS坐標(biāo)傳遞到百度地圖,通過服務(wù)器的處理最終把位置信息在地圖中實(shí)時顯示出來。得到的坐標(biāo)信息可以做后續(xù)的電子?xùn)艡?、測距該、測速等應(yīng)用以及APP開發(fā),本設(shè)計已經(jīng)完成實(shí)物的測試,并取得滿意的效果。
參考文獻(xiàn)
[1]張洋,劉軍,嚴(yán)漢宇.原子教你玩STM32[M].北京:北京航空航天大學(xué)出版社,2013.
[2]郭天祥.新概念51單片機(jī)C語言教程—入門、提高、開發(fā)、拓展全攻略[Z].2009.
作者單位
北京城市學(xué)院 北京市 102206