GSM模塊SMS相關AT命令使用說明

[轉載] GSM模塊SMS相關AT命令使用說明

GSM模塊SMS相關AT命令使用說明
(本文可以自由轉載,但必須註明出處)  
[日期:2006-1-28]來源:www.21icbbs.com 通信技術版 作者:飛雪季節

適合人群:首次接觸G網模塊人員
凡是利用GSM模塊二次開發的,不管是用來做公話,還是GPRS通信,其中短消息基本都要使用的。本文大致介紹一下短消息相關的AT命令使用方法。
詳細的AT指令說明,可以參考 07.05,或者西門子MC35I的AT手冊,西門子手冊感覺還是很不錯的。

    由於本文表達的錯誤給您帶來的物資損失和精神損傷,本人概不負責。
1、    短消息的格式
我所見到的模塊短消息基本都提供2種格式,TEXT和PDU。文本模式相對來說比較簡單,
特別適合傳輸那些字符什麼的,對於老外來說,基本就發26個字幕,簡直太方便了。
PDU模式需要進行編碼,目前的漢字傳輸好多都採用PDU模式。由於本人對PDU和怎麼發漢字基本一竅不通,這段就暫時忽略了。

一般模塊默認的都是PDU模式,你可以使用如下命令切換到TEXT模式:
AT+CMGF=1

如果想再切換到PDU模式,使用:
AT+CMGF=0
即可,以下短消息發送&讀取都採用TEXT模式,因為PDU我不是很懂。

2、    怎樣給我發送一條短消息?
現在你手裡有了G網模塊,但首先你要確保如下操作已經完成:
1)    模塊上電並且AT命令同你的PC串口通信順暢。
2)    SIM卡沒有欠費,並且已經登陸GSM網絡(可以使用AT+CREG?查詢,如果返回1或者5表示正常)。
3)     AT+CMGF=1設置完畢。

有了以上的過程,那麼你就可以給我發信息了,你要使用的AT命令是:AT+CMGS。
假如我的手機號是:13636371111(後四位是假的)。
1)    從串口輸入:AT+CMGS=」13636371111」 然後按回車鍵。
2)    這個時候你可以看到有個大於號 『>』彈出,提示你可以輸入消息的內容了。
假如你想發送「hello world」,直接在』>』後面輸入即可,輸入完了後按』CTRL^Z」,
稍微等一下,你的信息也就發出去了,如果編程好像是0x1B(記不清了,你可以查下ASCII表)。

全部過程如下:
AT+CMGS="13636371111"
> hello world
+CMGS: 199
OK

你需要一直等到OK返回,才能確定是成功發出,中間的那個東西可以先不管。
如果你輸入 「 hello world」後,但又不想發了,按ESC可以取消發送,就不再介紹。

3、    怎樣打開傳送回報?
手機上我們都可以找到一個菜單,可以選擇傳送回報的功能,也就是說別人收到你的信息後,
短消息中心會給你一個確認信息,假如是發給心上人,這個功能尤其重要。

對於模塊我們沒有菜單可選,但我們有 AT+CSMP 這樣一條AT命令,在TEXT模式下,
對於手機上的那個選項可以通過這條命令實現,這個命令的具體含義我搞得不是很清楚,
也懶得去研究,曾經有個人告訴我按照下面設置後,傳送回報就可以回來:
AT+CSMP=33
   但即使你這樣設置後,別人收到後,傳送回報你可能還是看不到,
   你還需要設置另外一條AT命令:「AT+CNMI=2,1,,1」,下面就會介紹到這個命令的用法。
   對於PDU模式,控制傳送回報有很大差別。

4、    AT+CNMI的用法。
到目前為止,你至少還有如下的疑惑:

1)    來了新短信,我怎麼知道?
2)    我擔心時間長了SIM卡會寫壞,FLASH也可能寫壞,或者我單片機很強短信不需要存儲,就要模塊直接給我,我該怎麼辦?
3)    我要看傳送回報!

  上面一切疑慮都可以從AT+CNMI中得到答案。
我手頭上有個西門子MC35的手冊,CNMI的幾個參數如下:
AT+CNMI =[<mode>][,<mt>][,<bm>][,<ds>][,<bfr>]
方括號表示參數是可選的,簡要說明下:

<mode>  用來選擇來了新短信,提示信息是否需要從串口直接打出,一般取2。
<mt>    用來選擇新短信的提示方式,取1的話,就比較簡單,比如「+CMTI: "SM",3」,告訴你新短信存在SIM卡裡,序號是3,稍後告訴你怎樣讀取。取2的話,來了新短信就會不作存儲,直接從串口顯示出來。
<ds>   用來選擇傳送回報,如果想看回報的話,一般取1(同AT+CSMP結合使用)。

其他參數不作說明。
這裡提供3組參數可以供你使用:
1)    AT+CNMI=2,1,,1 這組參數可以提供新信息提示,以及傳送回報的功能
2)    AT+CNMI=2,2,,1 這組參數來了新信息直接顯示到串口,不作存儲,仍然打開傳送回報。
3)    AT+CNMI=2,1 這組參數,一般的模塊都會有新信息提示,不會打開回報功能(打開可能會干擾單片機處理)     以上僅供參考,不同廠家模塊實現形式以及支持參數可能會有不同,需要實際測試。

5、    怎樣讀取SIM卡或者手機內部的信息?
比如我們收到這樣的信息:「+CMTI: "SM",3」,知道來了新信息,並且存儲在SIM卡,第3個位置區。我們怎麼去讀取呢?
比較EASY,用AT+CMGR來讀取,如下:
AT+CMGR=3,回車後,即可看到短信內容,比較簡單,這裡就不舉例了。
還有一個用來讀取短信的命令,AT+CMGL,可以列出手機內部的全部AT命令,
比如:
AT+CMGL=」ALL」,回車後可以返回當前存儲區的所有短信,結果自己實踐即可。
+CMGL還有另外3個參數,可以參考手冊,並且PDU還有些不同,參數使用的是數字。
6、    怎樣選擇存儲區?
現在的模塊一般都提供2-3個存儲區,SIM卡,手機(FLASH), SIM卡+FLASH。
我們可以使用 AT+CPMS?進行選擇,關於CPMS的3個參數,這裡簡要介紹一下,比較容易搞混,並不是表示SIM卡或者手機分別有3個存儲區。
設置命令如下:AT+CPMS=<mem1>[,<mem2>][,<mem3>]]
<mem1> Memory to be used when listing, reading and deleting messages:
<mem2> Memory to be used when writing and sending messages:
<mem3> Received messages will be placed to this storage if routing to TE is not
set.
上面是我為了省事直接從西門子手冊COPY的,需要仔細理解。組合著多試幾次就知道了。
7、    怎樣刪除一條短信?
使用AT+CMGD,比如:
AT+CMGD=1 將刪除<mem1>內部的第一條信息(注意模塊返回OK都是刪除成功,有些模塊會返回ERROR,其實表示當前這個位置沒有短信息)。
AT+CMGD還有個全刪的功能,比如:
AT+CMGD=1,4 將刪除<mem1>存儲區內部的全部短信息。(注意第二個參數還有3個,可以看手冊,並且並不是所有廠家模塊都支持全刪)
到這為此吧,已經弄了2個小時了,我要去睡覺了,明天還要起早上班。  
關於短消息的編程,2年前做過一次,是首次接觸AT命令,啥都不會,網上搜索只能零零碎碎的找到點,
結果是沒怎麼做好。體會初學者的苦衷,現在已經不作了,把我所知道的拿出來分享下,獻給初學者。
為了處理好代碼,還是要仔細研究07.05協議和廠家提供的手冊,然後對照實際驗證,盡量不要瞎猜,
即使在一個地方蒙對了,到另外城市你的東西可能就不能用了。
如果有想要代碼的話,再等一等,現在在測試PPP的代碼。

留言

這個網誌中的熱門文章

Virtual Machine 中進行開發專案優點 => VM & Docker

Why not Python?

Linux OS Class [20170710] vmare new and resize command demo