外币转人民币手续费:G网模块短消息AT命令基本用法

来源:百度文库 编辑:中财网 时间:2024/04/28 21:54:07
【原创】G网模块短消息AT命令基本用法
GSM模块SMS相关AT命令使用说明
作者:飞雪季节          (本文可以自由转载,但必须注明出处)  
适合人群:首次接触G网模块人员

凡是利用GSM模块二次开发的,不管是用来做公话,还是GPRS通信,其中短消息基本都要使用的。本文大致介绍一下短消息相关的AT命令使用方法。
详细的AT指令说明,可以参考 07.05,或者西门子MC35I.html">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 =[][,][,][,][,]
方括号表示参数是可选的,简要说明下:
  用来选择来了新短信,提示信息是否需要从串口直接打出,一般取2。
    用来选择新短信的提示方式,取1的话,就比较简单,比如“+CMTI: "SM",3”,告诉你新短信存在SIM卡里,序号是3,稍后告诉你怎样读取。取2的话,来了新短信就会不作存储,直接从串口显示出来。
   用来选择传送回报,如果想看回报的话,一般取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=[,][,]]
MEMORY to be used when listing, reading and deleting messages:
MEMORY to be used when writing and sending messages:
Received messages will be placed to this storage if routing to TE is not
set.
上面是我为了省事直接从西门子手册COPY的,需要仔细理解。组合着多试几次就知道了。

7、    怎样删除一条短信?
使用AT+CMGD,比如:
AT+CMGD=1 将删除内部的第一条信息(注意模块返回OK都是删除成功,有些模块会返回ERROR,其实表示当前这个位置没有短信息)。
AT+CMGD还有个全删的功能,比如:
AT+CMGD=1,4 将删除存储区内部的全部短信息。(注意第二个参数还有3个,可以看手册,并且并不是所有厂家模块都支持全删)


到这为此吧,已经弄了2个小时了,我要去睡觉了,明天还要起早上班。

关于短消息的编程,2年前做过一次,是首次接触AT命令,啥都不会,网上搜索只能零零碎碎的找到点,结果是没怎么做好。体会初学者的苦衷,现在已经不作了,把我所知道的拿出来分享下,献给初学者。
为了处理好代码,还是要仔细研究07.05协议和厂家提供的手册,然后对照实际验证,尽量不要瞎猜,即使在一个地方蒙对了,到另外城市你的东西可能就不能用了。
如果有想要代码的话,再等一等,现在在测试PPP的代码。
本来用WORD写的,铁上来格式全没了,可惜!