單片機(jī)控制GSM手機(jī)的技術(shù)及應(yīng)用
隨著科技的飛速發(fā)展和人民生活水平的不斷提高,手機(jī)的普及率越來越高,更新也越來越快,價(jià)格也越來越便宜。因?yàn)槭謾C(jī)工作的無線網(wǎng)絡(luò)覆蓋范圍廣,在信息傳遞方面性能穩(wěn)定、可靠,所以把手機(jī)作為信息傳遞的載體,與單片機(jī)結(jié)合起來構(gòu)成應(yīng)用系統(tǒng)有著強(qiáng)大的生命力和廣闊的應(yīng)用空間,特別是在遠(yuǎn)程數(shù)據(jù)傳輸、遠(yuǎn)程監(jiān)控等領(lǐng)域更是受到電子設(shè)計(jì)應(yīng)用工程師的關(guān)注。一些專業(yè)刊物也介紹了一些有關(guān)這方面的文章,然而由于手機(jī)的控制指令復(fù)雜,數(shù)據(jù)格式繁瑣,工程技術(shù)人員在進(jìn)行單片機(jī)與手機(jī)的硬軟件接口設(shè)計(jì)時(shí)經(jīng)常會遇到很多困難,有時(shí)還無資料可查。筆者在完成一個(gè)項(xiàng)目的開發(fā)過程中,針對幾種手機(jī)進(jìn)行了大量的測試和實(shí)驗(yàn),在此基礎(chǔ)上歸納出一些帶規(guī)律性的結(jié)論,對此結(jié)論,工程設(shè)計(jì)人員可拿來即用,大大縮短研發(fā)周期,現(xiàn)在把它公布出來,愿與廣大電子設(shè)計(jì)人員共享。
1 硬件接口技術(shù)方面
目前市場上流行的大部分手機(jī)幾乎都具有數(shù)據(jù)引出口,并基本上都支持與GsM短信息相關(guān)的AT控制指令(GSM-SMS-AT指令),手機(jī)通過數(shù)據(jù)口以串行方式接收指令并向外輸出數(shù)據(jù)。理論上講,在數(shù)據(jù)口中找出RxD、TxD和GND引腳與單片機(jī)的串口對應(yīng)連接即完成了硬件接口。然而,實(shí)際上由于不同品牌,不同型號手機(jī)的RxD、TxD和GND引腳并非一致,找查這三根線有時(shí)也非易事;況且手機(jī)數(shù)據(jù)口的電平既不是RS232電平,也不是TTL電平,與由5V供電的單片機(jī)串口還不能直接連接。最簡單可靠的方法是使用手機(jī)的數(shù)據(jù)線建立單片機(jī)與手機(jī)的硬件連接。手機(jī)數(shù)據(jù)線是專為連接PC機(jī)9針串口而設(shè)計(jì)的,信號電平為標(biāo)準(zhǔn)的RS232電平,只要單片機(jī)的串口也轉(zhuǎn)換為Rs 2 3 2電平,就可方便連接。9針串口引腳定義是固定的,即2腳為TxD(手機(jī)發(fā)送),3腳為RxD(手機(jī)接收)、5腳為GND。這樣,無論什么型號的手機(jī)與單片機(jī)的連接就成了固定連接,不需要知道手機(jī)數(shù)據(jù)口信號的具體定義,二者通過數(shù)據(jù)線的連接電路如圖1所示。
需要注意的是:不同手機(jī)數(shù)據(jù)線內(nèi)部電平轉(zhuǎn)換芯片的供電方式是不同的,有的是通過手機(jī)直接供電;有的是通過竊取PC機(jī)串口某些引腳(通常為4、6、7、8引腳)的電流經(jīng)內(nèi)部整流濾波穩(wěn)壓后提供。判斷的方法是將數(shù)據(jù)線一端插到手機(jī)數(shù)據(jù)口,測量另一端2腳與5腳之間的電壓,如果有一7V左右的電壓,則為前者,如果測不出電壓,則為后者,對于后者則需要單片機(jī)為4、6、7、8引腳任意一引腳提供+5V電壓即可,如圖1中虛線所示。
2 軟件接口技術(shù)及控制原理
單片機(jī)與手機(jī)的軟件接口其實(shí)就是單片機(jī)通過與GSM短信息有關(guān)的AT指令控制手機(jī)的控制技術(shù),如讀取手機(jī)的短消息內(nèi)容,刪除短消息內(nèi)容,列出手機(jī)中還未讀的短消息等。關(guān)于AT指令的功能描述見參考文獻(xiàn)[1,2]的文章內(nèi)容,此處不再贅述。然而,執(zhí)行一條指令,也并非某些資料中介紹得那么簡單。事實(shí)上,指令的執(zhí)行過程需要單片機(jī)與手機(jī)交互應(yīng)答完成,每一次發(fā)送或接收的字節(jié)數(shù)有嚴(yán)格的規(guī)定,二者必須依據(jù)這些規(guī)定實(shí)現(xiàn)數(shù)據(jù)交換,否則,通信就是失敗的。筆者經(jīng)過對幾種手機(jī)反復(fù)測試,總結(jié)出來一些規(guī)律,如表1所列。
對幾個(gè)問題說明如下。
①所有AT指令的指令符號、常數(shù)、PDu數(shù)據(jù)包等都是以ASCII編碼形式傳送的,比如“A”的ASCII編碼為41H,“T”的AscII編碼為54H,數(shù)字“0,,的AsCⅡ編碼為30H等。
②單片機(jī)控制手機(jī)工作,必須把手機(jī)的短信息工作模式設(shè)置為PDu格式,即通過指令A(yù)T+cMGF=O完成。
③單片機(jī)向手機(jī)發(fā)送每一條指令后,必須以回車符作為該條指令的結(jié)束,回車的ASCII編碼為0DH。例如,單片機(jī)向手機(jī)發(fā)送“AT+CMGF=0”這條指令,其ASCII編碼序列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一個(gè)字節(jié)0DH就是回車符,表示該條指令結(jié)束,如果沒有這個(gè)回車符,手機(jī)將不識別這條指令。
④當(dāng)手機(jī)接收到一條完整的AT指令后,手機(jī)并不立即執(zhí)行這條指令,而是先把剛才接收到的AT指令的全部ASCII編碼序列全部反發(fā)送出來(含0DH),然后發(fā)送一個(gè)回車符和換行符的ASCII編碼,即0DH和0AH,最后執(zhí)行該條指令。
⑤手機(jī)向單片機(jī)傳送短信息內(nèi)容時(shí),其PDu數(shù)據(jù)包的內(nèi)容是以十六進(jìn)制表示的數(shù)據(jù),但并不是直接向單片機(jī)傳遞十六進(jìn)制數(shù)據(jù),而仍然是把每一位十六進(jìn)制數(shù)以AscII編碼來發(fā)送。這樣,二個(gè)字節(jié)的十六進(jìn)制數(shù)就變成4字節(jié)的ASCII碼。但是,PDU數(shù)據(jù)包中的數(shù)據(jù)字節(jié)長度部分仍然是實(shí)際字節(jié)長度,而不是變成AscII碼的字節(jié)長度,這在編程時(shí)應(yīng)特別注意,否則,接收的數(shù)據(jù)就不完整。單片機(jī)接收到PDU數(shù)據(jù)包數(shù)據(jù)后,必須將其恢復(fù)成十六進(jìn)制數(shù)據(jù),其算法如下:設(shè)a為接收的ASCII碼,b為轉(zhuǎn)換后的十六進(jìn)制數(shù)。如果a<39H,則b=a-30H;如果a>39H,則b=a-30H-07H,最后把前后兩個(gè)數(shù)合并為一個(gè)字節(jié)。
⑥手機(jī)向單片機(jī)應(yīng)答PDU數(shù)據(jù)包的字節(jié)數(shù)不包括前9字節(jié)數(shù)據(jù)(短信服務(wù)中心地址),但向單片機(jī)傳送PDU數(shù)據(jù)包時(shí),包括這9個(gè)字節(jié)的數(shù)據(jù)。例如,如果手機(jī)應(yīng)答的PDU數(shù)據(jù)長度為50,而實(shí)際向單片機(jī)傳送的十六進(jìn)制數(shù)據(jù)為59字節(jié),ASCII碼為2
評論