摘 要: 研究了GSM MODEM、GPS模塊和Atmega128單片機(jī)的通信,闡述了GSM MODEM收發(fā)信息的基本原理以及通過單片機(jī)控制GSM MODEM收發(fā)信息和接收GPS信息的基本過程。介紹了以單片機(jī)為主的硬件電路以及軟件實(shí)現(xiàn)過程,詳細(xì)分析了程序設(shè)計(jì)的流程。
關(guān)鍵詞: GSM MODEM;GPS;Atmega128單片機(jī)
在惡劣的自然條件下,實(shí)施人工作業(yè)有很大的危險(xiǎn)性,雖然有時(shí)可以由機(jī)器人來代替人,但機(jī)器人造價(jià)昂貴,因而研究一款造價(jià)低廉而又實(shí)用的遠(yuǎn)程控制系統(tǒng)具有重大意義。
GSM網(wǎng)絡(luò)技術(shù)的發(fā)展和GSM網(wǎng)絡(luò)覆蓋面積的增加,使其在遙測(cè)、遙控、數(shù)據(jù)采集和遠(yuǎn)程控制等領(lǐng)域得到了廣泛應(yīng)用。單片機(jī)與短信貓(GSM MODEM)的通信在GSM的應(yīng)用中占據(jù)重要位置,GPS應(yīng)用的普及使得遠(yuǎn)程控制及定位得以實(shí)現(xiàn)。本文給出了GSM MODEM、GPS模塊和Atmegal系列單片機(jī)的硬軟件設(shè)計(jì),并介紹了整個(gè)模塊的編程實(shí)現(xiàn)過程。
1 系統(tǒng)的硬件構(gòu)成
1.1 Atmega128單片機(jī)簡(jiǎn)介
Atmega128單片機(jī)是一款基于AVR內(nèi)核、采用RISC結(jié)構(gòu)的增強(qiáng)型低功耗CMOS 8 bit微控制器;其大部分指令在一個(gè)時(shí)鐘周期內(nèi)完成,因此具有1 MIPS/MHz的數(shù)據(jù)吞吐率;具有優(yōu)化的功率消耗結(jié)構(gòu),在功耗相對(duì)較少的情況下可以進(jìn)行復(fù)雜的處理。
1.2 單片機(jī)控制GSM MODEM的原理
1.2.1 AT指令簡(jiǎn)介
AT指令就是帶有串行口的設(shè)備操作GSM MODEM或手機(jī)的指令集。每個(gè)AT指令都以AT+開頭,以回車換行為結(jié)尾。每個(gè)命令執(zhí)行成功與否都有相應(yīng)的信號(hào)返回。本文僅簡(jiǎn)單介紹將設(shè)備所用到的與發(fā)送和接收信息相關(guān)的AT指令[1]。
1.2.2 與GSM MODEM相關(guān)的AT指令
GSM MODEM與單片機(jī)或終端之間通過串行口RS-232C連接。多數(shù)GSM MODEM使用AT指令來設(shè)置參數(shù)。為避免在程序運(yùn)行過程中出現(xiàn)問題,致使GSM MODEM不能正常工作,本文用計(jì)算機(jī)中的超級(jí)終端來對(duì)其進(jìn)行設(shè)置。下面是常用的與短信數(shù)據(jù)通信開發(fā)相關(guān)的幾條主要的AT指令[2-4]。
AT+CMGF:選擇對(duì)短消息控制的模式(0—PDU;1—文本);
AT+CMGS:發(fā)送短消息;
AT+CMGR:讀短消息;
AT+CMGL:列出SIM卡中的短消息;
AT+CMGD:刪除短信息(刪除一條或多條短信息)。
1.2.3 對(duì)短消息控制的三種模式
對(duì)短消息控制共有三種模式:(1)基于AT命令的Text Mode;(2)Block Mode;(3)基于AT命令的PDU Mode。使用Block Mode需要手機(jī)生產(chǎn)廠家提供驅(qū)動(dòng)支持,目前PDU Mode已取代Block Mode,而Text Mode相對(duì)比較簡(jiǎn)單,應(yīng)用較為方便,可以滿足本設(shè)備的需求。故本設(shè)備將GSM MODEM設(shè)置為Text Mode。
1.3 單片機(jī)與GSM MODEM的連接
由于GSM MODEM提供的接口是標(biāo)準(zhǔn)的RS-232C接口,采用EIA-RS-232C電平。而單片機(jī)使用TTL電平,與EIA-RS-232C電平不兼容,因此,需要在單片機(jī)和GSM MODEM之間連接電路實(shí)現(xiàn)電平轉(zhuǎn)換。一般用芯片MAX232來實(shí)現(xiàn)EIA-RS-232C與TTL電平之間的轉(zhuǎn)換。
MAX232芯片是Maxim公司生產(chǎn)的,包含二路接收器和驅(qū)動(dòng)器,適用于各種EIA-RS-232C和V.28/V.24的通信接口。MAX232芯片內(nèi)部有一個(gè)電源電壓變換器,可以把輸入的+5 V電源電壓變換成RS-232C輸出電平所需的±10 V電壓,其工作電壓為+5 V。
本文單片機(jī)屬于主控設(shè)備,用串口與GSM MODEM連接過程中需要注意接線的方法。GSM MODEM的串口將RS-232C接口標(biāo)準(zhǔn)定義的所有信號(hào)線都用到了,并且是按照DTE和DCE之間信息交換協(xié)議的要求進(jìn)行連接的,使用時(shí)只不過是把DTE發(fā)出的信號(hào)當(dāng)作對(duì)方DCE發(fā)來的信號(hào)。因此,把這種連接稱為雙叉環(huán)回接口。單片機(jī)與GSM MODEM的串口連接如圖1所示。
2 設(shè)備功能分析以及各模塊的編程實(shí)現(xiàn)
2.1 設(shè)備功能分析
本設(shè)備主要是完成對(duì)SMS短消息的接收及分析,并執(zhí)行相應(yīng)的動(dòng)作和發(fā)送反應(yīng)信息完成對(duì)目標(biāo)的遠(yuǎn)程控制。當(dāng)需要提供地理信息時(shí)將連接GPS的串口打開,接收GPS信息。具體功能如下:
(1)模塊開機(jī)后能夠隨時(shí)接收來自主控系統(tǒng)按照協(xié)議發(fā)送的信息。
(2)設(shè)定一定的時(shí)間對(duì)存儲(chǔ)卡內(nèi)的信息內(nèi)容進(jìn)行篩選解讀分析,做出相應(yīng)的處理。
(3)如果需要設(shè)備的地理信息,將連接GPS的串口打開接收GPS數(shù)據(jù)信息。
系統(tǒng)的工作流程圖如圖2所示。
2.2 設(shè)備各模塊的編程實(shí)現(xiàn)
按照設(shè)備的功能要求,將設(shè)備分為以下幾個(gè)部分。
2.2.1 初始化模塊
初始化主要包括:
(1)單片機(jī)的初始化。對(duì)單片機(jī)的串口進(jìn)行設(shè)置,打開兩個(gè)串口中斷允許位,設(shè)置波特率,用于與GSM MODEM和GPS進(jìn)行通信[5-6]。
(2)GSM MODEM的初始化。對(duì)GSM MODEM的工作方式進(jìn)行設(shè)定(包括關(guān)回顯),以方便程序運(yùn)行。具體程序如下:
const char ATE0[]="ATE0\r\n";//定義關(guān)回顯指令
COM_rx_reset( ); //復(fù)位串口
COM_putsf(ATE0); //關(guān)回顯
其他的工作方式可由計(jì)算機(jī)的超級(jí)終端進(jìn)行設(shè)置,可以一直保存設(shè)置。而GPS模塊則利用自身的默認(rèn)設(shè)置。
2.2.2 短信息的發(fā)送和接收?qǐng)?zhí)行模塊
短信息的發(fā)送需要運(yùn)用AT指令將要發(fā)送的內(nèi)容通過串口發(fā)送給GSM MODEM模塊。在短信發(fā)送中,只向主控機(jī)發(fā)送所要求的信息內(nèi)容,因此通信地址固定添加主控機(jī)的地址即可。發(fā)送信息的功能函數(shù)程序如下:
COM_rx_reset( ) ; //復(fù)位串口
COM_putsf(AT_CMGS) ; //發(fā)送AT控制指令
COM_putsf(Mp1_Hand); //添加通信地址
COM_putsf(CRLF); //回車換行
while(1)
{
if( ACK_ON(READY_)) //檢測(cè)模塊握手信號(hào)
{break;}
}
delay_1ms (200) ; //延時(shí)200 ms
COM_puts(msg) ; //輸入信息內(nèi)容
COM_putsf(END_MESS) ; //輸入信息內(nèi)容結(jié)束
COM_putsf(CRLF); //回車換行
短信息的接收可以采用中斷方式和定時(shí)查詢方式。中斷方式是:如果有新信息到達(dá),單片機(jī)就會(huì)收到下列提示:+CMTI:”SM”,<index>。
可以通過檢測(cè)串口是否收到“+CMTI”來判斷新信息的到達(dá),以采取相應(yīng)的動(dòng)作。采用定時(shí)查詢的方式接收新信息,也就是將手機(jī)卡內(nèi)的全部信息用指令A(yù)T+CMGL=”ALL”列出來并放入rx_buffer[RX_BUFFER_SIZE]中??紤]到多條信息的到來會(huì)丟失信息,所以本系統(tǒng)采用的是定時(shí)查詢方式。相應(yīng)的程序如下:
COM_rx_reset( );
COM_putsf(AT_CMGL);
COM_putsf(CRLF);
列出來的內(nèi)容需要進(jìn)行合法信息篩選,即把每條信息的index提取出來,將提取的合法信息內(nèi)容和index存起來,然后一一進(jìn)行處理,并將已讀信息刪除(務(wù)必要進(jìn)行刪除信息的工作,不然會(huì)對(duì)系統(tǒng)工作的穩(wěn)定性造成影響)。
2.2.3 GPS模塊的數(shù)據(jù)接收
GPS模塊可以采用對(duì)連接GPS的串口進(jìn)行開關(guān)而控制。GPS信號(hào)有二進(jìn)制和ASCII兩種,本文主要采用ASCII,即NMEA0183格式[7-8]。GPS-OME板輸出帶有各種功能的數(shù)據(jù)語句,如$GPGGA、$GPGSV、$GPRMC等,其中以$GPRMC定位數(shù)據(jù)最為常用,其數(shù)據(jù)的一般格式為:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,*hh
其中,<1>為當(dāng)?shù)匚恢玫腢TC時(shí)間(hh:mm:ss);<2>為接收狀態(tài),即顯示出“A”為位置有效,“V”為位置非有效接收警告(在當(dāng)前天線視野上方的衛(wèi)星個(gè)數(shù)少于3顆時(shí));<3>為實(shí)際緯度;<4>表示半球緯度N或者S;<5>為實(shí)際經(jīng)度;<6>表示半球經(jīng)度E或者W;<7>為GPS屬性指示;<10>表示當(dāng)?shù)氐暮0胃叨?。格式中未解釋的?xiàng)本文不用。
在連接GPS的串口中斷服務(wù)程序中只要將帶有“$GPRMC”的那一條語句提取出來就可以了。
本文以單片機(jī)串口通信技術(shù)和GSM MODEM短消息傳輸技術(shù)為基礎(chǔ),針對(duì)遠(yuǎn)程控制定位的需求,開發(fā)了一種對(duì)數(shù)據(jù)采集終端進(jìn)行遠(yuǎn)程控制和定位的解決方案以及具體實(shí)現(xiàn)過程,為遠(yuǎn)程終端控制應(yīng)用提供了技術(shù)參考,具有一定的理論和實(shí)際意義。
參考文獻(xiàn)
[1] 李棟梁,馬洪連,李文成.基于SMS的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2006,27(21):130-131.
[2] AT commands originating from GSM 07.05 for SMS. [DB/OL].SIEMANS Mobile, 2002.
[3] 錢亞利,趙光宙.短信通訊在遠(yuǎn)程環(huán)保實(shí)時(shí)監(jiān)控系統(tǒng)中的應(yīng)用[J].機(jī)電工程,2007,24(1):25-27.
[4] 段錦,葉霖,黃顯澍.基于GSM短消息的遠(yuǎn)程數(shù)據(jù)采集傳輸系統(tǒng)[J].長(zhǎng)春理工大學(xué)學(xué)報(bào),2005,28(4):51-53.
[5] 萬求.GSM短信傳送文件的方法的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2006,42(36):122-125.
[6] 仵浩,黃維金.無線數(shù)據(jù)傳輸技術(shù)在油井檢測(cè)中的應(yīng)用[J].儀器儀表學(xué)報(bào),2004,25(4):520.
[7] 孟謙,王志良,張東.基于GPS/北斗衛(wèi)星技術(shù)的無盲區(qū)車輛調(diào)度系統(tǒng)[J].微計(jì)算機(jī)信息,2005(1):160-162.
[8] 王 ,劉錦高.基于GPS無線定位/GSM短信收發(fā)的空間信息查詢系統(tǒng)[J].微計(jì)算機(jī)信息,2006(6):184-186.