GPRS模組SIM9001傳送簡訊(傳送長簡訊),包括PDU和text兩種模式
在超級終端輸入:
At
OK
返回OK則說明你的模組可以正常工作,否則出現故障。
第一、文字模式下發送簡訊流程
文字模式下發送資訊基本分三步驟:
1.設定傳送模式
AT+CMGF=1
CMGF為0是以PDU模式傳送,為1則是以文字方式傳送。
2.接收方電話號碼
AT+CMGS="138XXXXxxxx"
3.輸入內容
>hello world !
注意:每敲完一條指令都要按回車,直到返回“>”後開始輸入資訊,但是在輸入完簡訊內容後不能敲回車而應該按組合鍵“ctrl+z”作為結束符。回車鍵在ascii碼中的數值是“\r”,“ctrl+z”在ascii
示例:
=====================================================
AT
OK
AT+CMGF=1
OK
AT+CMGS="1380189xxxx"
>hello word !
=====================================================
提示:AT指令不區分大小寫,所以無論是大寫還是小寫都可以識別。
返回OK則說明你的模組可以正常工作,否則出現故障。
第二、PDU模式下發送簡訊流程
Pdu
我們先來看流程理清脈絡:
1.AT+CMGF=0 設定為PDU模式傳送中文編碼簡訊
2.AT+CMGS=資訊長度
3.傳送簡訊
示例:
======================================================================
AT
OK
AT+CMGF=0
OK
AT+CMGS=25
>0891683108100005F011000D91685110906474F90A534E6E058FDC89C1FF01
======================================================================
前面的我們容易理解:
“AT+CMGF=0”將傳送模式置為PDU模式;
“AT+CMGS=25”這句CMGS後面跟的不再是電話號碼了,而是“資訊長度”,這裡我加了雙引號表示有獨特的含義後面解釋。
現在分析最關鍵的地方:
“0891683108100005F011000D91685110906474F90008000A534E6E058FDC89C1FF01”
我們可以將這段頭疼的字串分為三段:
-----------------------------------------------------------------------------------------
“0891683108100005F0 ”中心號碼段
“11000D91685110906474F9000800” 收信方號碼段
“0A534E6E058FDC89C1FF01” 資訊段
1.先來看中心號碼段。
關於什麼是中心號碼我想百度比我解釋的更清楚,這裡不再贅述了。
我們其實還可以將其再細分:
08 91 683108100005F0
08--簡訊息中心地址長度:這個長度怎麼獲得的呢?其實就是91 683108701305F0的字串長度除以2。不難理解。91--簡訊息中心號碼型別:91是TON/NPI遵守International/E.164標準,指在號碼前需加‘+’號;此外還有其它數值,但91最常用。但是它是怎麼出來的呢?咱們細看一下:
91--1001 0001
91是通過兩個二進位制碼獲得的。也就是說這兩個二進位制碼有特殊的含義
解析1001: 第一位的1:具體代表什麼意思,我也沒搞明白,有高人知道可以指出。
剩下的001:數值型別(Type of Number):000--未知,001--國際,010--國內,111--留作擴充套件;
解析0001: 號碼鑑別(Numbering plan identification):0000--未知,0001--ISDN/電話號碼(E.164/E.163),1111--留作擴充套件
683108100005F0是什麼意思呢?我們將它奇數位和偶數位反轉看看:
“683108100005F0”
“8613800100500F”
熟悉嗎?13800100500是中國移動北京地區的中心號碼,86是中國地區的字首這個大家應該清楚。F呢?因為在進行PDU編碼的時候規定了如果號碼位數是奇數位那麼就要在末尾加F進行補齊,由於我們國家的手機號碼位數都是11位,因此要在末尾補F。於是中國移動北京地區的中心號碼加86補齊F再奇偶位反轉最後加91國際化字首就由原來的:
“13800100500”
變成了:
“91683108100005F0”
接著我們數一下它有多少位,16位,16/2=8,所以我們把整個中心號碼組合編碼後的長度除以2,最後以十六進位制的表示方式加在它的前端就大功告成了。
“0891683108100005F0”
Ok搞定,下一步繼續。
2.收信方號碼段。
“11000D91685110906474F9000800”
同樣將其細分:
1100 0D91 685110906474F9 000800
11--檔案頭位元組:這個數值的獲得也是通過二進位制數獲得的11--0001 0001 其實二進位制中的每一位都有自己的意義,我們來具體看看(左邊為第一位):
第一位:應答路徑--TP-RP(TP-Reply-Path):0--不設定;1--設定
第二位:使用者資料頭標識--TP-UDHI(TP-User-Data-Header-Indicator):0--不含任何頭資訊;1--含頭資訊(本簡訊是沒有頭資訊的,下文中會有包含頭資訊的簡訊,到時再具體解析頭資訊UDH)
第三位:狀態報告要求--TP-SPR(TP-Status-Report-Request):0--需要報告;1--不需要報告
第四、五位:有效期格式--TP-VPF(TP-Validity-Period-Format):00--不提供(Not present);10--整型(標準);01--預留;11--提供8位位元組的一半(Semi-Octet Represented)
第六位:拒絕複製--TP-RD(TP-Reject-Duplicates):0--接受複製;1--拒絕複製
第七、八位:資訊型別提示--TP-MTI(TP-Message-Type-Indicator):00--接收(Deliver);01--傳送(Submit)
00--資訊型別(TP-Message-Reference):這個標誌基本沒啥變化,所以本人也沒過多的研究,如果有高人知道,可以指明一下。
0D--被叫號碼長度。
91--被叫號碼型別
3176378290F9--被叫號碼,經過了位移處理,實際號碼為“13677328099” 這三個欄位通稱目的地址(TP-Destination-Address)。
00--協議標識TP-PID(TP-Protocol-Identifier):這段基本也是千年不變的,不過可以列舉出各個位的含義:
00--0000 0000
第1、2位:
00--如下面定義的分配,我們可以理解為預設形式。其實就是說後邊六位 的定義就是本身的協議規範。
01--參見GSM03.40協議標識完全定義
10--預留
11--為服務中心(SC)特殊用途分配後六位。
第3位:0--不使用遠端網路,只是短訊息裝置之間的協議;1--使用遠端網路。
第4-8位:00000--隱含;00001--電傳;00010--group 3 telefax;00100--語音;00101--歐洲無線資訊系統(ERMES);00110--國內系統;10001--任何基於X.400的公用資訊處理 系統;10010--Email。
00--資料編碼方案TP-DCS(TP-Data-Coding-Scheme):
00--0000 0000:
第1、2位:一般設定為00
第3位:0--文字未壓縮,1--文字用GSM標準壓縮演算法壓縮
第4位:0--表示最後兩位不包含資訊,1--表示最後兩位包含資訊型別資訊
第5、6位:00--預設的字母表,01--8bit,10--USC2(16bit),11--預留
第7、8位:00--Class 0,01--Class 1,10--Class 2(SIM卡特定資訊),11--Class 3。
00--有效期TP-VP(TP-Valid-Period):
VP value: 相應的有效期
00 to 8F : (VP+1)*5 分鐘
90 to A7 : 12小時+(VP-143)*30分鐘
A8 to C4 : (VP-166)*1天
C5 to FF : (VP-192)*1 周
3.資訊段。
“0A534E6E058FDC89C1FF01”
資訊段是最簡單的,大家需要了解GPRS以PDU模式傳送資訊時,其內容是以unicode的方式編碼的。
其中:
“534E6E058FDC89C1FF01”
還原成GB漢字編碼為:
“華清遠見!”
其編碼(十六進位制)長度是20位,20/2=10,10的十六進位制表示方式是0X0A。因此資訊段的最終編碼為:
“0A534E6E058FDC89C1FF01”
3.組合。
如果把發簡訊比喻為一次快遞的投遞過程,那麼過程如下:
首先是中心號碼(相當於我們的郵局);
接著是接收方號碼段(相當於我們的收信人地址);
最後是資訊段(就是你的信件了)。
OK,組合結果就是:
“0891683108100005F011000D91685110906474F90008000A534E6E058FDC89C1FF01”
至此,PDU的編碼就正式結束了。
不過我們還有最後一件事,那就是前面提到的那個“資訊長度”。
郵局是國家的公有的,我們無權去幹涉,但是收信人和資訊是我們自己制定的,因此我們要精確掌握自己所屬的資訊。
於是我們將中心號碼段剔除,變為:
“11000D91685110906474F90008000A534E6E058FDC89C1FF01”
計算一下字串長度,50位。OK,50/2=25。
於是在PDU模式下,我們所謂的“資訊長度”:AT+CMGS=25。
回顧一下PDU模式下的發信息流程:
======================================================================
AT
OK
AT+CMGF=0
OK
AT+CMGS=25
>0891683108100005F011000D91685110906474F90A534E6E058FDC89C1FF01
======================================================================
一定要記得最後輸完資訊編碼後要按“ctrl+z”而不是回車。
我做GPRS模組實驗,用的是NeoWay“有方”的GPRS模組,M660+。
簡訊中心號碼,需要根據SIM所在地址更換,下面列舉中國移動的簡訊中心號碼,備查。
中國移動短訊息中心號碼大全
北京 北京 13800100500
天津 天津 13800220500
河北 石家莊 13800311500
保定 13800312500
衡水 13800318500
邢臺 13800319500
邯鄲 13800310500
張家口 13800313500
承德 13800314500
唐山 13800315500
廊坊 13800316500
滄州 13800317500
秦皇島 13800335500
山西 太原 13800351500
大同 13800352500
陽泉 13800353500
朔州 13800349500
呂梁 13800358500
忻州 13800350500
榆次 13800354500
長治 13800355500
晉城 13800356500
臨汾 13800357500
運城 13800359500
內蒙古 呼和浩特 13800471500
包頭 13800472500
集寧 13800474500
東勝 13800477500
臨河 13800478500
錫林浩特 13800479500
海拉爾 13800470500
赤峰 13800476500
烏海 13800473500
阿拉善左旗 13800483500
通遼 13800475500
烏蘭浩特 13800482500
遼寧 瀋陽 13800240500
大連 13800411500
鞍山 13800412500
撫順 13800413500
本溪 13800414500
丹東 13800415500
錦州 13800416500
營口 13800417500
阜新 13800418500
遼陽 13800419500
鐵嶺 13800410500
朝陽 13800421500
盤錦 13800427500
葫蘆島 13800429500
吉林 長春 13800431500
吉林 13800432500
延吉 13800433500
四平 13800434500
通化 13800435500
白城 13800436500
遼源 13800437500
鬆源 13800438500
白山 13800439500
黑龍江 哈爾濱 13800451500
齊齊哈爾 13800452500
牡丹江 13800453500
佳木斯 13800454500
大慶 13800459500
上海 上海 13800210500
江蘇 蘇州 13800512500
鎮江 13800511500
南通 13800513500
常州 13800519500
無錫 13800510500
南京 13800250500
揚州 13800514500
鹽城 13800515500
徐州 13800516500
淮陰 13800517500
連雲港 13800518500
泰州 13800523500
宿遷 13800527500
浙江 杭州 13800571500
寧波 13800574500
嘉興 13800573500
金華 13800579500
溫州 13800577500
衢州 13800570500
舟山 13800580500
湖州 13800572500
紹興 13800575500
台州 13800576500
麗水 13800578500
安徽 滁州 13800550500
合肥 13800551500
蚌埠 13800552500
蕪湖 13800553500
淮南 13800554500
馬鞍山 13800555500
安慶 13800556500
宿州 13800557500
阜陽 13800558500
黃山 13800559500
淮北 13800561500
銅陵 13800562500
宣城 13800563500
六安 13800564500
巢湖 13800565500
貴池 13800566500
福建 福州 13800591500
廈門 13800592500
寧德 13800593500
莆田 13800594500
泉州 13800595500
漳州 13800596500
龍巖 13800597500
三明 13800598500
南平 13800599500
江西 南昌 13800791500
上饒 13800793500
鷹潭 13800701500
撫州 13800794500
九江 13800792500
宜春 13800795500
吉安 13800796500
贛州 13800797500
景德鎮 13800798500
萍鄉 13800799500
新餘 13800790500
山東 青島 13800532500
濟南 13800531500
淄博 13800533500
濰坊 13800536500
煙臺 13800535500
威海 13800631500
臨沂 13800539500
萊蕪 13800634500
聊城 13800635500
日照 13800633500
棗莊 13800632500
德州 13800534500
濟寧 13800537500
荷澤 13800530500
泰安 13800538500
東營 13800546500
濱州 13800543500