基于單片機控制來(lái)實(shí)現手機收發(fā)短信息
GSM(Global System for Mobile communication)系統是目前基于時(shí)分多址技術(shù)的移動(dòng)通訊體制中比較成熟、完善、應用最廣泛的一種系統。目前已建成的覆蓋全國的GSM數字蜂窩移動(dòng)通信網(wǎng),是我國公眾移動(dòng)通信網(wǎng)的主要方式。主要提供話(huà)音、短信息、數據等多種業(yè)務(wù)?;贕SM短消息功能可以做成傳輸各種檢測、監控數據信號和控制命令的數據通信系統,能廣泛用于遠程監控、定位導航、個(gè)人通信終端等。由于公眾GSM網(wǎng)絡(luò )在全球范圍內實(shí)現了聯(lián)網(wǎng)和漫游,建立上述系統不須再組建專(zhuān)用通信網(wǎng)絡(luò ),所以具有實(shí)時(shí)傳輸數據功能的短消息應用將得到迅速普及。
目前,人們設計的各類(lèi)DTE設備基礎上以微處理器為核心,帶有RS232/RS485等通信接口,在物理層上很容易實(shí)現與GSM設置(如手機等)的連接。但對SMS協(xié)議的研究文獻卻較少,特別是用單片機控制手機的SMS(Short Message Service)收發(fā)的研究更少。筆者在用單片機設計基于GSM的SMS數據采集器時(shí),對怎樣用單片機控制手機收發(fā)短信息進(jìn)行了探討。

1 串口控制SMS的工作原理
單片機與手機一般采用串行異步通信接口,具有紅外和通信電纜兩種連接方式,通信速度可設定,通常為19200bps。采用紅外接口的優(yōu)點(diǎn)是單片機系統與手機電氣隔離,相互不干擾,接口各自獨立,使用方便;缺點(diǎn)是通信距離較短,紅外傳播的方向性對接口相對位置有要求。采用電纜連接時(shí),數據傳輸的可靠性較好;其主要缺點(diǎn)是接口的電氣參數不兼容,設計不當時(shí)會(huì )對手機的通信質(zhì)量產(chǎn)生影響。筆者經(jīng)過(guò)實(shí)踐設計的接口電平轉換電路如圖1。
GSM的短信息業(yè)務(wù)SMS利用信令信道傳輸,這是GSM通信網(wǎng)所特有的。它不用撥號建立連接,把要發(fā)的信息加上目的地址發(fā)送到短信息服務(wù)中心,經(jīng)短消息服務(wù)中心完成存儲后再發(fā)送給最終的信宿。所以當目的GSM終端沒(méi)開(kāi)機時(shí)信息不會(huì )丟失。每個(gè)短消息的信息量限制為160字節。
現在市場(chǎng)上大多數手機均支持GSM07.05規定的AT指令集。該指令集是ETSI(歐洲通信技術(shù)委員會(huì ))發(fā)布的,其中包含了對SMS的控制。利用GSM手機的串行接口,單片機向手機收發(fā)一系列的AT命令,就能達到控制手機收發(fā)SMS的目的。ETSI的GSM07.05中用于SMS收發(fā)控制的主要AT命令見(jiàn)表1。
表1 常用AT指令
GSM07.05
Function(功能)
ATE0
RESET
AT+CSMS
選擇短信息服務(wù)
AT+CPMS
選擇短信息內存
AT+CMGF
選擇短信息格式
AT+CSCA
短信息中心地址
AT+CNMI
顯示新收到的短信息
AT+CMGR
讀短信息
AT+CMGS
發(fā)送短信息
AT+CMGL
列出SIM卡中短信息
AT+CMSS
從SIM內存中發(fā)短信息
AT+CMGW
向SIM內存中寫(xiě)入待發(fā)短信息
AT+CMGD
刪除SIM內存中的短信息
AT+CSCB
選擇蜂窩廣播信息
GSM手機通過(guò)異步通信接口實(shí)現對SMS的控制共有三種接入協(xié)議:Block Mode;基于A(yíng)T命令的TextMode;基于A(yíng)T命令的PDU Mode。PDU模式是發(fā)送或接收手機SMS信息的一種方法,短信息正文經(jīng)過(guò)十六進(jìn)制編碼后被傳送。目前,PDU Mode應用最為廣泛,基本上全國所有的電信局都提供支持PDU Mode的短消息業(yè)務(wù)。有些地址則不支持Text Mode和Block Mode,這就限制了這兩種接入協(xié)議的應用,而且PDU Mode已有取代Block Mode的趨勢。為了保證系統具有廣泛的適用性,本文采用PDU模式收發(fā)SMS。
PDU相當于一個(gè)數據包,它由構成消息(SMS)的信息組成。作為一種數據單元,它必須包含源/目的地址、保護(有效)時(shí)間、數據格式、協(xié)議類(lèi)型和正文,正文長(cháng)度可達140字節,它們都以十六進(jìn)制表示。PDU結構根據短消息由移動(dòng)終端發(fā)起或以移動(dòng)終端為目的而不同。
當由移動(dòng)終端發(fā)起時(shí),PDU的格式為:
SMSC
PDU類(lèi)型
MR
DA
PID
DCS
VP
UDL
UD(0~140octed)
當以移動(dòng)終端為目的時(shí),PDU的格式為:
SMSC
PDU類(lèi)型
OA
PID
DCS
SCTS
UDL
UD(0~140octed)
其中,SMSC為短消息業(yè)務(wù)中心地址,DA/OA為源/目的地址,PID為協(xié)議識別,DCS為數據編碼,UDL為用戶(hù)數據長(cháng)度,UD為用戶(hù)數據,VP為有效時(shí)間,MR指明是發(fā)出信息,SCTS指明短消息到達業(yè)務(wù)中心的時(shí)間。
2 PDU格式下短信息的接收
根據設置不同,手機將收到的短消息保存在緩存單元或存入SIM卡,單片機從手機中接收短消息實(shí)質(zhì)上就是從SIM或緩存中讀出信息。這主要利用AT+CMGR和AT+CMGL兩條指令來(lái)完成,其工作過(guò)程見(jiàn)圖2。
由于不同的廠(chǎng)商對AT指令集的解釋代碼和響應信息不一樣,所以單片機首先要確認能否與手機建立起通信,一般用ATE指令完成此確認;然后用AT+CMGF指令選定短消息的數據格式;在收到手機的正確回答反以AT指令完成讀出功能。一般用AT+CMGL讀取以前的信息,在收到手機的RING(振鈴)數據時(shí),用AT+CMGR讀取實(shí)時(shí)信息。
以下是筆者設計的物流數據采集系統中用到的接收SMS的一個(gè)實(shí)例,它說(shuō)明了PDU模式的應用。單片機發(fā)送和接收(手機回答)均為ASCII碼。所用手機為SIEMENS S3508i。
操作過(guò)程如下({}內為注釋):
發(fā)送:ATE
手機回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選用PDU格式}
手機回答:OK {允許選擇PDU格式}
發(fā)送:AT+CMGL=2 {列出已有的短信息}
手機回答:+CMGL:1,2,,24{1表示信息個(gè)數,2表示未發(fā)信息,24表示信息總容量}
0D71683108370105F004000D81683179133208F1000002608041003380263218
4CF682D
95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608
OK
以上這組PDU格式的十六進(jìn)制字符串,不但包含了短消息的內容,同時(shí)包含了發(fā)送者的手機號碼、短信息中心號碼、短消息發(fā)送時(shí)間等。
下面對信息內容進(jìn)行分析:
0D:短信息中心地址(號碼)長(cháng)度。
91:短信息中心號碼類(lèi)型,91是TON/NPI。TON/NPI遵守International/E.164標準,指在號碼前需加"+"號;此外還可直有其他數值,但91最常用。
683108370105F0:SMSC 短信息所使用的服務(wù)中心號碼13807310500。它經(jīng)過(guò)十六進(jìn)制以字節為單位的高低半字節換位處理,號碼是奇數的添F,構成一個(gè)HEX字節。
04:PDU類(lèi)型,文件頭字節。
0B:主叫號碼長(cháng)度。
81:主叫號碼類(lèi)型。
3179133208F1:0A主叫號碼,也經(jīng)過(guò)了處理,實(shí)際號碼為13973123801。
00:PID,為協(xié)議標識。
00:DCS短信息編碼類(lèi)型是GSM Default Alphabet,即由7位ASCII碼移位組成8位十六進(jìn)制碼(octet),其方法見(jiàn)表2。
1sthex
B0
A6
A5
A4
A3
A2
A1
A0
2ndhex
C1
C0
B6
B5
B4
B3
B2
B1
3rdhex
D2
D1
D0
C6
C5
C4
C3
C2
4thhex
E3
E2
E1
E0
D6
D5
D4
D3
5thhex
F4
F3
F2
F1
F0
E6
E5
E4
6thhex
G5
G4
G3
G2
G1
G0
F6
F5
6thhex
H6
H5
H4
H3
H2
H1
H0
G6
02608041003380:SCTS短信息發(fā)送時(shí)間,02/06/08/14:00:33.08。
26:UDL經(jīng)處理后的8位碼(octet)短信息字節長(cháng)度,它小于消息ASCII碼的長(cháng)度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A0245
1068B1983492608:UD 編碼后的PDU數據,短信息內容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。
3 短信息的發(fā)送
與接收短信息一樣,發(fā)送時(shí)也要先建立聯(lián)接,傳送一些初始化指令,然后發(fā)送短消息內容。下面是用SIEMENS S3508i發(fā)送一個(gè)短信息的例子,內容為:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII碼為:“32030322F30362F30382F31333A34382049443130324F4B
2049443130334F4B2049443230314641494C20”。
發(fā)送:ATE {請求建立聯(lián)接}
手機回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選擇PDU模式}
手機回答:OK
發(fā)送:AT+CSMS=0{檢測手機是否支持SMS命令}
手機回答:OK
發(fā)送:AT+CMGS=52{發(fā)送短信息,52 octets(不包括最初9個(gè)短信息元字節)}
手機回答:>{允許上傳數據,ASCII碼是($20H,$2EH)}
發(fā)送:0891683108701305F011000B813179133208F10000AA2632184CF682D95
E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A
不計最初9個(gè)短消息信元字節,本短信息有52字節(104個(gè)字符)。

AT+CMGS僅說(shuō)明了SMSC信息內容的長(cháng)度,在收到手機回答的>符號手才發(fā)送PDU數據串,并以(CTRL^Z)結束。
PDU數據串的內容說(shuō)明如下:
08:短信息信元SMSC(短信息中心號碼)的字節長(cháng)度
91:短信息中心號碼類(lèi)型,91表明中心號碼是國際通用電話(huà)號碼。
683108701305F0:短信息中心號碼:8613807310500。
11:PDU SMS發(fā)送的文件頭字節。這里11指正常發(fā)送短信息。
00:信息類(lèi)型。這里00指讓手機自動(dòng)加上主叫號碼。
0B:被叫號碼長(cháng)度。
81:被叫號碼類(lèi)型。
3179133208F1:被叫號碼13973123801。
00:協(xié)議標識。
00:短信息編碼類(lèi)型是GSM Default Alphabet。
AA:短信息被保留的時(shí)間為4天,其計算方法依照表3。
VP值
短消息有效時(shí)間長(cháng)度
0~143
(VP+1)%26;#215;5分鐘
144~167
12時(shí)+(VP-143)%26;#215;30分
168~196
1天%26;#215;(VP-166)
197~255
1周%26;#215;(VP-192)
26:PDU格式短信息編碼后字節長(cháng)度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D
97A02451068B1983492608:編碼后的PDU數據,短信息內容為“2002/06/08/13:
48ID102OKID103OK ID201FAIL”。
1A:ASCII碼CTRL^Z:報文結束標志。
4 應用情況及常見(jiàn)主要問(wèn)題的解決
筆者用MCS-51系列的單片機研制了一個(gè)手持式的數據采集產(chǎn)品,通過(guò)SIMEENS手機,利用GSM的SMS傳輸數據。經(jīng)過(guò)在國內多個(gè)省市較大數量長(cháng)期廣泛的使用,性能良好,沒(méi)有出現數據丟失的現象。證明上述設計用,性能良好,沒(méi)有出現數據丟失的現象。證明上述設計是正確的。但在調試和試用階段也遇到了如下問(wèn)題:
(1)接口電平
手機的電纜接口電平一般是3V左右,單片機系統的工作電壓一般為2.7~5.5V,范圍較寬,為保證數據傳輸的正確,需在接口加電平限制電路,詳見(jiàn)圖1。
(2)部分城市無(wú)法使用
一些城市的SMS平臺不允許使用缺省短消息服務(wù)中心號碼的協(xié)議,只需在發(fā)送的PDU數據前面幾個(gè)字節加上中心號碼即可,詳見(jiàn)本文發(fā)送實(shí)例。
(3)不能接收已正確發(fā)送的短消息
除GSM的SMS信道擁塞原因外,主要是PDU中PID字節的設置,使得收到的信息要存入SIM卡,而SIM卡已滿(mǎn),故不再接收信息。改變PID的設置即可。
(4)收不到開(kāi)機前的短消息
主要是發(fā)送數據時(shí),對短消息有效時(shí)間VP值設置不當造成的。
評論