通常,發(fā)送和接收短信的終端都是通過串行接口連接電腦,這類設(shè)備用得比較多的是GSM Modem和手機(jī)。這類設(shè)備通常都支持PDU模式,但仍有少數(shù)設(shè)備只支持Text模式。
設(shè)備硬件連接好以后可以通過發(fā)送AT指令測試設(shè)備是否連接正確能否正常通訊。在這里我使用Windows自帶的“超級終端”工具進(jìn)行通訊。此工具可以在程序——附件——通訊里面找到,如果沒有請確認(rèn)是否安裝了此組件。或者在運(yùn)行里面輸入“hypertrm”也可以快速啟動“超級終端”。
以下所有范例均以Siemens M55手機(jī)作為終端,有可能跟你設(shè)備返回的不同。具體參數(shù)清參閱設(shè)備相關(guān)AT指令集。本手機(jī)AT指令集在我主頁上有下載。
準(zhǔn)備工作:
1、 測試連接:“AT8 ”測試終端是否連接正確。成功后返回“OK”。
2、 設(shè)置回顯:(此步驟為了測試方便)ATE18
3、 查閱及設(shè)置字符集:
AT+CSCS=?8
+CSCS: ("GSM","UCS2")
說明該終端支持GSM與UCS2兩種字符集。一般對于中文環(huán)境設(shè)置為UCS2
AT+CSCS="UCS2"8
4、 取得短信中心號碼:
AT+CSCA? 8
+CSCA: "+8613800280500",145
5、 查詢并設(shè)置SMS格式:
查詢:AT+CMGF= 8
返回:+CMGF: (0)
0代表PDU模式。你的設(shè)備可能有其他的選項(xiàng),請參考設(shè)備的AT指令集。
設(shè)置:AT+CMGF=08
6、 查詢并設(shè)置短信儲存位置:
查詢:AT+CPMS=?8
返回:+CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM","ME")
其中MT表示設(shè)備所有可用儲存位置。SM代表SIM卡,ME代表機(jī)身。
一般設(shè)置為:AT+CPMS= "MT","MT","MT"8
查詢短信:
1、 查詢具有相同狀態(tài)的所有短信
指令:AT+CMGL=n
其中n代表0-4的數(shù)字。
0——未讀得短信。執(zhí)行命令以后自行變?yōu)橐炎x取。
1——已讀短信。
2——草稿。
3——已發(fā)送短信。
4——全部
返回(例):
+CMGL: 76,3,,20
0891683108200805F011620D91683194041338F50000FF0530972D8603
76——序號
3——狀態(tài):發(fā)送
20——PDU串長度
2、 查詢特定序號的短信
指令:AT+CMGR=n8
其中n代表序號
返回(例):
+CMGR: 3,,20
0891683108200805F011620D91683195041338F50000FF0530972D8603
3——狀態(tài):發(fā)送
20——PDU串長度
注意:PDU串長度表示PDU中除去短信中心部分剩下的代碼的長度的1/2。例如上述PDU中PDU長度部分為11620D91683195041338F50000FF0530972D8603,40個(gè)字符,表示20個(gè)字節(jié)。
儲存PDU
指令:
AT+CMGW=[PDU長度] 8
>[PDU串]
例如:
AT+CMGW=208
> 0891683108200805F011620D91683195041338F50000FF0530972D8603
注意,輸入PDU后按“CTRL+Z”終止。程序中使用0x1A,0x1D作為終止。
返回:+CMGW: 85
85——序號
發(fā)送PDU串
1、 發(fā)送輸入的PDU串
指令:
AT+CMGS=[PDU長度] 8
>[PDU代碼]
2、 發(fā)送指定序號的PDU串
指令:
AT+CMSS=[序號] 8
接收短信
接收剛收到的短信有兩種方法:輪詢終端;使用事件
輪詢終端可以定期的使用AT+CMGL=0指令讀取未讀取得指令。方法簡單,但許多時(shí)候都在做無用功,效率低下,一般不建議采用。下面主要講解事件法:
指令:
AT+CNMI=<mode>,<mt>,<bm>,<ds>,<brf>
參數(shù):
mode:
0——緩存在終端
1——直接發(fā)送到TE
mt:
0——接收到新的SMS不返回事件
1——如果接收到的SMS存儲在ME,則返回
+CMTI:<mem>,<index>
2——除了Class2 SMS,新的SMS直接發(fā)送到終端,返回:
+CMT:<length><CR><LF><PDU>
3——Class3 SMS使用mt=2的方法返回,其他類型的使用mt=1的方法返回。
bm:
0——小區(qū)廣播不通知
2——新的小區(qū)廣播通知,返回
+CBM:<length><CR><LF><pdu>
3——Class3格式的小區(qū)廣播通知,使用bm=2格式
ds:
0——狀態(tài)報(bào)告不通知
1——新的狀態(tài)報(bào)告通知,返回:
+CDS:<length><CR><LF><pdu>
2——如果新的狀態(tài)報(bào)告存儲到ME,則返回:
+CDSI:<mem>,<index>
brf:
1——始終為1
例:
一般我們使用AT+CNMI=1,1,0,2,1
當(dāng)收到新的短信時(shí)終端返回:
+CMTI:ME,5
新的狀態(tài)報(bào)告:
+CDSI:ME,6
程序可以通過判斷返回值并使用AT+CMGR指令返回新到短信