基于單片機(jī)控制來實(shí)現(xiàn)手機(jī)收發(fā)短信息
GSM(Global System for Mobile communication)系統(tǒng)是目前基于時(shí)分多址技術(shù)的移動(dòng)通訊體制中比較成熟、完善、應(yīng)用最廣泛的一種系統(tǒng)。目前已建成的覆蓋全國的GSM數(shù)字蜂窩移動(dòng)通信網(wǎng),是我國公眾移動(dòng)通信網(wǎng)的主要方式。主要提供話音、短信息、數(shù)據(jù)等多種業(yè)務(wù)?;贕SM短消息功能可以做成傳輸各種檢測、監(jiān)控?cái)?shù)據(jù)信號和控制命令的數(shù)據(jù)通信系統(tǒng),能廣泛用于遠(yuǎn)程監(jiān)控、定位導(dǎo)航、個(gè)人通信終端等。由于公眾GSM網(wǎng)絡(luò)在全球范圍內(nèi)實(shí)現(xiàn)了聯(lián)網(wǎng)和漫游,建立上述系統(tǒng)不須再組建專用通信網(wǎng)絡(luò),所以具有實(shí)時(shí)傳輸數(shù)據(jù)功能的短消息應(yīng)用將得到迅速普及。
目前,人們設(shè)計(jì)的各類DTE設(shè)備基礎(chǔ)上以微處理器為核心,帶有RS232/RS485等通信接口,在物理層上很容易實(shí)現(xiàn)與GSM設(shè)置(如手機(jī)等)的連接。但對SMS協(xié)議的研究文獻(xiàn)卻較少,特別是用單片機(jī)控制手機(jī)的SMS(Short Message Service)收發(fā)的研究更少。筆者在用單片機(jī)設(shè)計(jì)基于GSM的SMS數(shù)據(jù)采集器時(shí),對怎樣用單片機(jī)控制手機(jī)收發(fā)短信息進(jìn)行了探討。
1 串口控制SMS的工作原理
單片機(jī)與手機(jī)一般采用串行異步通信接口,具有紅外和通信電纜兩種連接方式,通信速度可設(shè)定,通常為19200bps。采用紅外接口的優(yōu)點(diǎn)是單片機(jī)系統(tǒng)與手機(jī)電氣隔離,相互不干擾,接口各自獨(dú)立,使用方便;缺點(diǎn)是通信距離較短,紅外傳播的方向性對接口相對位置有要求。采用電纜連接時(shí),數(shù)據(jù)傳輸?shù)目煽啃暂^好;其主要缺點(diǎn)是接口的電氣參數(shù)不兼容,設(shè)計(jì)不當(dāng)時(shí)會(huì)對手機(jī)的通信質(zhì)量產(chǎn)生影響。筆者經(jīng)過實(shí)踐設(shè)計(jì)的接口電平轉(zhuǎn)換電路如圖1。
GSM的短信息業(yè)務(wù)SMS利用信令信道傳輸,這是GSM通信網(wǎng)所特有的。它不用撥號建立連接,把要發(fā)的信息加上目的地址發(fā)送到短信息服務(wù)中心,經(jīng)短消息服務(wù)中心完成存儲(chǔ)后再發(fā)送給最終的信宿。所以當(dāng)目的GSM終端沒開機(jī)時(shí)信息不會(huì)丟失。每個(gè)短消息的信息量限制為160字節(jié)。
現(xiàn)在市場上大多數(shù)手機(jī)均支持GSM07.05規(guī)定的AT指令集。該指令集是ETSI(歐洲通信技術(shù)委員會(huì))發(fā)布的,其中包含了對SMS的控制。利用GSM手機(jī)的串行接口,單片機(jī)向手機(jī)收發(fā)一系列的AT命令,就能達(dá)到控制手機(jī)收發(fā)SMS的目的。ETSI的GSM07.05中用于SMS收發(fā)控制的主要AT命令見表1。
表1 常用AT指令
GSM07.05
Function(功能)
ATE0
RESET
AT+CSMS
選擇短信息服務(wù)
AT+CPMS
選擇短信息內(nèi)存
AT+CMGF
選擇短信息格式
AT+CSCA
短信息中心地址
AT+CNMI
顯示新收到的短信息
AT+CMGR
讀短信息
AT+CMGS
發(fā)送短信息
AT+CMGL
列出SIM卡中短信息
AT+CMSS
從SIM內(nèi)存中發(fā)短信息
AT+CMGW
向SIM內(nèi)存中寫入待發(fā)短信息
AT+CMGD
刪除SIM內(nèi)存中的短信息
AT+CSCB
選擇蜂窩廣播信息
GSM手機(jī)通過異步通信接口實(shí)現(xiàn)對SMS的控制共有三種接入?yún)f(xié)議:Block Mode;基于AT命令的TextMode;基于AT命令的PDU Mode。PDU模式是發(fā)送或接收手機(jī)SMS信息的一種方法,短信息正文經(jīng)過十六進(jìn)制編碼后被傳送。目前,PDU Mode應(yīng)用最為廣泛,基本上全國所有的電信局都提供支持PDU Mode的短消息業(yè)務(wù)。有些地址則不支持Text Mode和Block Mode,這就限制了這兩種接入?yún)f(xié)議的應(yīng)用,而且PDU Mode已有取代Block Mode的趨勢。為了保證系統(tǒng)具有廣泛的適用性,本文采用PDU模式收發(fā)SMS。
PDU相當(dāng)于一個(gè)數(shù)據(jù)包,它由構(gòu)成消息(SMS)的信息組成。作為一種數(shù)據(jù)單元,它必須包含源/目的地址、保護(hù)(有效)時(shí)間、數(shù)據(jù)格式、協(xié)議類型和正文,正文長度可達(dá)140字節(jié),它們都以十六進(jìn)制表示。PDU結(jié)構(gòu)根據(jù)短消息由移動(dòng)終端發(fā)起或以移動(dòng)終端為目的而不同。
當(dāng)由移動(dòng)終端發(fā)起時(shí),PDU的格式為:
SMSC
PDU類型
MR
DA
PID
DCS
VP
UDL
UD(0~140octed)
當(dāng)以移動(dòng)終端為目的時(shí),PDU的格式為:
SMSC
PDU類型
OA
PID
DCS
SCTS
UDL
UD(0~140octed)
其中,SMSC為短消息業(yè)務(wù)中心地址,DA/OA為源/目的地址,PID為協(xié)議識(shí)別,DCS為數(shù)據(jù)編碼,UDL為用戶數(shù)據(jù)長度,UD為用戶數(shù)據(jù),VP為有效時(shí)間,MR指明是發(fā)出信息,SCTS指明短消息到達(dá)業(yè)務(wù)中心的時(shí)間。
2 PDU格式下短信息的接收
根據(jù)設(shè)置不同,手機(jī)將收到的短消息保存在緩存單元或存入SIM卡,單片機(jī)從手機(jī)中接收短消息實(shí)質(zhì)上就是從SIM或緩存中讀出信息。這主要利用AT+CMGR和AT+CMGL兩條指令來完成,其工作過程見圖2。
由于不同的廠商對AT指令集的解釋代碼和響應(yīng)信息不一樣,所以單片機(jī)首先要確認(rèn)能否與手機(jī)建立起通信,一般用ATE指令完成此確認(rèn);然后用AT+CMGF指令選定短消息的數(shù)據(jù)格式;在收到手機(jī)的正確回答反以AT指令完成讀出功能。一般用AT+CMGL讀取以前的信息,在收到手機(jī)的RING(振鈴)數(shù)據(jù)時(shí),用AT+CMGR讀取實(shí)時(shí)信息。
以下是筆者設(shè)計(jì)的物流數(shù)據(jù)采集系統(tǒng)中用到的接收SMS的一個(gè)實(shí)例,它說明了PDU模式的應(yīng)用。單片機(jī)發(fā)送和接收(手機(jī)回答)均為ASCII碼。所用手機(jī)為SIEMENS S3508i。
操作過程如下({}內(nèi)為注釋):
發(fā)送:ATE
手機(jī)回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選用PDU格式}
手機(jī)回答:OK {允許選擇PDU格式}
發(fā)送:AT+CMGL=2 {列出已有的短信息}
手機(jī)回答:+CMGL:1,2,,24{1表示信息個(gè)數(shù),2表示未發(fā)信息,24表示信息總?cè)萘縸
0D71683108370105F004000D81683179133208F1000002608041003380263218
4CF682D
95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608
OK
以上這組PDU格式的十六進(jìn)制字符串,不但包含了短消息的內(nèi)容,同時(shí)包含了發(fā)送者的手機(jī)號碼、短信息中心號碼、短消息發(fā)送時(shí)間等。
下面對信息內(nèi)容進(jìn)行分析:
0D:短信息中心地址(號碼)長度。
91:短信息中心號碼類型,91是TON/NPI。TON/NPI遵守International/E.164標(biāo)準(zhǔn),指在號碼前需加"+"號;此外還可直有其他數(shù)值,但91最常用。
683108370105F0:SMSC 短信息所使用的服務(wù)中心號碼13807310500。它經(jīng)過十六進(jìn)制以字節(jié)為單位的高低半字節(jié)換位處理,號碼是奇數(shù)的添F,構(gòu)成一個(gè)HEX字節(jié)。
04:PDU類型,文件頭字節(jié)。
0B:主叫號碼長度。
81:主叫號碼類型。
3179133208F1:0A主叫號碼,也經(jīng)過了處理,實(shí)際號碼為13973123801。
00:PID,為協(xié)議標(biāo)識(shí)。
00:DCS短信息編碼類型是GSM Default Alphabet,即由7位ASCII碼移位組成8位十六進(jìn)制碼(octet),其方法見表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)短信息字節(jié)長度,它小于消息ASCII碼的長度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A0245
1068B1983492608:UD 編碼后的PDU數(shù)據(jù),短信息內(nèi)容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。
3 短信息的發(fā)送
與接收短信息一樣,發(fā)送時(shí)也要先建立聯(lián)接,傳送一些初始化指令,然后發(fā)送短消息內(nèi)容。下面是用SIEMENS S3508i發(fā)送一個(gè)短信息的例子,內(nèi)容為:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII碼為:“32030322F30362F30382F31333A34382049443130324F4B
2049443130334F4B2049443230314641494C20”。
發(fā)送:ATE {請求建立聯(lián)接}
手機(jī)回答:OK {已建立聯(lián)接}
發(fā)送:AT+CMGF=0 {選擇PDU模式}
手機(jī)回答:OK
發(fā)送:AT+CSMS=0{檢測手機(jī)是否支持SMS命令}
手機(jī)回答:OK
發(fā)送:AT+CMGS=52{發(fā)送短信息,52 octets(不包括最初9個(gè)短信息元字節(jié))}
手機(jī)回答:>{允許上傳數(shù)據(jù),ASCII碼是($20H,$2EH)}
發(fā)送:0891683108701305F011000B813179133208F10000AA2632184CF682D95
E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A
不計(jì)最初9個(gè)短消息信元字節(jié),本短信息有52字節(jié)(104個(gè)字符)。
AT+CMGS僅說明了SMSC信息內(nèi)容的長度,在收到手機(jī)回答的>符號手才發(fā)送PDU數(shù)據(jù)串,并以(CTRL^Z)結(jié)束。
PDU數(shù)據(jù)串的內(nèi)容說明如下:
08:短信息信元SMSC(短信息中心號碼)的字節(jié)長度
91:短信息中心號碼類型,91表明中心號碼是國際通用電話號碼。
683108701305F0:短信息中心號碼:8613807310500。
11:PDU SMS發(fā)送的文件頭字節(jié)。這里11指正常發(fā)送短信息。
00:信息類型。這里00指讓手機(jī)自動(dòng)加上主叫號碼。
0B:被叫號碼長度。
81:被叫號碼類型。
3179133208F1:被叫號碼13973123801。
00:協(xié)議標(biāo)識(shí)。
00:短信息編碼類型是GSM Default Alphabet。
AA:短信息被保留的時(shí)間為4天,其計(jì)算方法依照表3。
VP值
短消息有效時(shí)間長度
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格式短信息編碼后字節(jié)長度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D
97A02451068B1983492608:編碼后的PDU數(shù)據(jù),短信息內(nèi)容為“2002/06/08/13:
48ID102OKID103OK ID201FAIL”。
1A:ASCII碼CTRL^Z:報(bào)文結(jié)束標(biāo)志。
4 應(yīng)用情況及常見主要問題的解決
筆者用MCS-51系列的單片機(jī)研制了一個(gè)手持式的數(shù)據(jù)采集產(chǎn)品,通過SIMEENS手機(jī),利用GSM的SMS傳輸數(shù)據(jù)。經(jīng)過在國內(nèi)多個(gè)省市較大數(shù)量長期廣泛的使用,性能良好,沒有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。證明上述設(shè)計(jì)用,性能良好,沒有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。證明上述設(shè)計(jì)是正確的。但在調(diào)試和試用階段也遇到了如下問題:
(1)接口電平
手機(jī)的電纜接口電平一般是3V左右,單片機(jī)系統(tǒng)的工作電壓一般為2.7~5.5V,范圍較寬,為保證數(shù)據(jù)傳輸?shù)恼_,需在接口加電平限制電路,詳見圖1。
(2)部分城市無法使用
一些城市的SMS平臺(tái)不允許使用缺省短消息服務(wù)中心號碼的協(xié)議,只需在發(fā)送的PDU數(shù)據(jù)前面幾個(gè)字節(jié)加上中心號碼即可,詳見本文發(fā)送實(shí)例。
(3)不能接收已正確發(fā)送的短消息
除GSM的SMS信道擁塞原因外,主要是PDU中PID字節(jié)的設(shè)置,使得收到的信息要存入SIM卡,而SIM卡已滿,故不再接收信息。改變PID的設(shè)置即可。
(4)收不到開機(jī)前的短消息
主要是發(fā)送數(shù)據(jù)時(shí),對短消息有效時(shí)間VP值設(shè)置不當(dāng)造成的。
評論