1. 程式人生 > >GPRS模組SIM9001傳送簡訊(傳送長簡訊),包括PDU和text兩種模式

GPRS模組SIM9001傳送簡訊(傳送長簡訊),包括PDU和text兩種模式

在超級終端輸入:

At

OK

返回OK則說明你的模組可以正常工作,否則出現故障。

第一、文字模式下發送簡訊流程

文字模式下發送資訊基本分三步驟:

1.設定傳送模式

AT+CMGF=1

CMGF0是以PDU模式傳送,為1則是以文字方式傳送。

2.接收方電話號碼

AT+CMGS="138XXXXxxxx"

3.輸入內容

>hello world 

注意:每敲完一條指令都要按回車,直到返回“>”後開始輸入資訊,但是在輸入完簡訊內容後不能敲回車而應該按組合鍵“ctrl+z”作為結束符。回車鍵在ascii碼中的數值是“\r”,“ctrl+z”在ascii

碼中的數值是“0x1a,所以在程式設計時可以直接在資訊內容後進行字串拼接。

示例:

=====================================================

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

資訊段是最簡單的,大家需要了解GPRSPDU模式傳送資訊時,其內容是以unicode的方式編碼的。

其中:

534E6E058FDC89C1FF01

還原成GB漢字編碼為:

“華清遠見!”

其編碼(十六進位制)長度是20位,20/2=1010的十六進位制表示方式是0X0A。因此資訊段的最終編碼為:

0A534E6E058FDC89C1FF01

3.組合。

如果把發簡訊比喻為一次快遞的投遞過程,那麼過程如下:

首先是中心號碼(相當於我們的郵局);

接著是接收方號碼段(相當於我們的收信人地址);

最後是資訊段(就是你的信件了)。

OK,組合結果就是:

0891683108100005F011000D91685110906474F90008000A534E6E058FDC89C1FF01

至此,PDU的編碼就正式結束了。

不過我們還有最後一件事,那就是前面提到的那個“資訊長度”。

郵局是國家的公有的,我們無權去幹涉,但是收信人和資訊是我們自己制定的,因此我們要精確掌握自己所屬的資訊。

於是我們將中心號碼段剔除,變為:

11000D91685110906474F90008000A534E6E058FDC89C1FF01

計算一下字串長度,50位。OK50/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