?? text短信.txt
字號:
凡是利用GSM模塊二次開發(fā)的,不管是用來做公話,還是GPRS通信,其中短消息基本都要使用的。本文大致介紹一下短消息相關(guān)的AT命令使用方法。
詳細(xì)的AT指令說明,可以參考 07.05,或者西門子MC35I的AT手冊,西門子手冊感覺還是很不錯的。
由于本文表達(dá)的錯誤給您帶來的物資損失和精神損傷,本人概不負(fù)責(zé)。
1、 短消息的格式
我所見到的模塊短消息基本都提供2種格式,TEXT和PDU。文本模式相對來說比較簡單,特別適合傳輸那些字符什么的,對于老外來說,基本就發(fā)26個字幕,簡直太方便了。PDU模式需要進(jìn)行編碼,目前的漢字傳輸好多都采用PDU模式。由于本人對PDU和怎么發(fā)漢字基本一竅不通,這段就暫時忽略了。
一般模塊默認(rèn)的都是PDU模式,你可以使用如下命令切換到TEXT模式:
AT CMGF=1
如果想再切換到PDU模式,使用:
AT CMGF=0
即可,以下短消息發(fā)送&讀取都采用TEXT模式,因?yàn)镻DU我不是很懂。
2、 怎樣給我發(fā)送一條短消息?
現(xiàn)在你手里有了G網(wǎng)模塊,但首先你要確保如下操作已經(jīng)完成:
1) 模塊上電并且AT命令同你的PC串口通信順暢。
2) SIM卡沒有欠費(fèi),并且已經(jīng)登陸GSM網(wǎng)絡(luò)(可以使用AT CREG?查詢,如果返回1或者5表示正常)。
3) AT CMGF=1設(shè)置完畢。
有了以上的過程,那么你就可以給我發(fā)信息了,你要使用的AT命令是:AT CMGS。
假如我的手機(jī)號是:13636371111(后四位是假的)。
1) 從串口輸入:AT CMGS=”13636371111” 然后按回車鍵。
2) 這個時候你可以看到有個大于號 ‘>’彈出,提示你可以輸入消息的內(nèi)容了。
假如你想發(fā)送“hello world”,直接在’>’后面輸入即可,輸入完了后按’CTRL^Z”,稍微等一下,你的信息也就發(fā)出去了,如果編程好像是0x1B(記不清了,你可以查下ASCII表)。
全部過程如下:
AT CMGS="13636371111"
> hello world
CMGS: 199
OK
你需要一直等到OK返回,才能確定是成功發(fā)出,中間的那個東西可以先不管。如果你輸入 “ hello world”后,但又不想發(fā)了,按ESC可以取消發(fā)送,就不再介紹。
3、 怎樣打開傳送回報?
手機(jī)上我們都可以找到一個菜單,可以選擇傳送回報的功能,也就是說別人收到你的信息后,短消息中心會給你一個確認(rèn)信息,假如是發(fā)給心上人,這個功能尤其重要。
對于模塊我們沒有菜單可選,但我們有 AT CSMP 這樣一條AT命令,在TEXT模式下,對于手機(jī)上的那個選項(xiàng)可以通過這條命令實(shí)現(xiàn),這個命令的具體含義我搞得不是很清楚,也懶得去研究,曾經(jīng)有個人告訴我按照下面設(shè)置后,傳送回報就可以回來:
AT CSMP=33
但即使你這樣設(shè)置后,別人收到后,傳送回報你可能還是看不到,你還需要設(shè)置另外一條AT命令:“AT CNMI=2,1,,1”,下面就會介紹到這個命令的用法。
對于PDU模式,控制傳送回報有很大差別。
4、 AT CNMI的用法。
到目前為止,你至少還有如下的疑惑:
1) 來了新短信,我怎么知道?
2) 我擔(dān)心時間長了SIM卡會寫壞,F(xiàn)LASH也可能寫壞,或者我單片機(jī)很強(qiáng)短信不需要存儲,就要模塊直接給我,我該怎么辦?
3) 我要看傳送回報!
上面一切疑慮都可以從AT CNMI中得到答案。
我手頭上有個西門子MC35的手冊,CNMI的幾個參數(shù)如下:
AT CNMI =[<mode>][,<mt>][,<bm>][,<ds>][,<bfr>]
方括號表示參數(shù)是可選的,簡要說明下:
<mode> 用來選擇來了新短信,提示信息是否需要從串口直接打出,一般取2。
<mt> 用來選擇新短信的提示方式,取1的話,就比較簡單,比如“ CMTI: "SM",3”,告訴你新短信存在SIM卡里,序號是3,稍后告訴你怎樣讀取。取2的話,來了新短信就會不作存儲,直接從串口顯示出來。
<ds> 用來選擇傳送回報,如果想看回報的話,一般取1(同AT CSMP結(jié)合使用)。
其他參數(shù)不作說明。
這里提供3組參數(shù)可以供你使用:
1) AT CNMI=2,1,,1
這組參數(shù)可以提供新信息提示,以及傳送回報的功能
2) AT CNMI=2,2,,1
這組參數(shù)來了新信息直接顯示到串口,不作存儲,仍然打開傳送回報。
3) AT CNMI=2,1
這組參數(shù),一般的模塊都會有新信息提示,不會打開回報功能(打開可能會干擾單片機(jī)處理) 以上僅供參考,不同廠家模塊實(shí)現(xiàn)形式以及支持參數(shù)可能會有不同,需要實(shí)際測試。
5、 怎樣讀取SIM卡或者手機(jī)內(nèi)部的信息?
比如我們收到這樣的信息:“ CMTI: "SM",3”,知道來了新信息,并且存儲在SIM卡,第3個位置區(qū)。我們怎么去讀取呢?
比較EASY,用AT CMGR來讀取,如下:
AT CMGR=3,回車后,即可看到短信內(nèi)容,比較簡單,這里就不舉例了。
還有一個用來讀取短信的命令,AT CMGL,可以列出手機(jī)內(nèi)部的全部AT命令,
比如:
AT CMGL=”ALL”,回車后可以返回當(dāng)前存儲區(qū)的所有短信,結(jié)果自己實(shí)踐即可。
+CMGL還有另外3個參數(shù),可以參考手冊,并且PDU還有些不同,參數(shù)使用的是數(shù)字。
6、 怎樣選擇存儲區(qū)?
現(xiàn)在的模塊一般都提供2-3個存儲區(qū),SIM卡,手機(jī)(FLASH), SIM卡+FLASH。
我們可以使用 AT CPMS?進(jìn)行選擇,關(guān)于CPMS的3個參數(shù),這里簡要介紹一下,比較容易搞混,并不是表示SIM卡或者手機(jī)分別有3個存儲區(qū)。
設(shè)置命令如下: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的,需要仔細(xì)理解。組合著多試幾次就知道了。
7、 怎樣刪除一條短信?
使用AT CMGD,比如:
AT CMGD=1 將刪除<mem1>內(nèi)部的第一條信息(注意模塊返回OK都是刪除成功,有些模塊會返回ERROR,其實(shí)表示當(dāng)前這個位置沒有短信息)。
AT CMGD還有個全刪的功能,比如:
AT CMGD=1,4 將刪除<mem1>存儲區(qū)內(nèi)部的全部短信息。(注意第二個參數(shù)還有3個,可以看手冊,并且并不是所有廠家模塊都支持全刪)
到這為此吧,已經(jīng)弄了2個小時了,我要去睡覺了,明天還要起早上班。
關(guān)于短消息的編程,2年前做過一次,是首次接觸AT命令,啥都不會,網(wǎng)上搜索只能零零碎碎的找到點(diǎn),結(jié)果是沒怎么做好。體會初學(xué)者的苦衷,現(xiàn)在已經(jīng)不作了,把我所知道的拿出來分享下,獻(xiàn)給初學(xué)者。
為了處理好代碼,還是要仔細(xì)研究07.05協(xié)議和廠家提供的手冊,然后對照實(shí)際驗(yàn)證,盡量不要瞎猜,即使在一個地方蒙對了,到另外城市你的東西可能就不能用了。
如果有想要代碼的話,再等一等,現(xiàn)在在測試PPP的代碼。
本來用WORD寫的,鐵上來格式全沒了,可惜!
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -