金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2012-08-26   #1 (permalink)
论坛管理员
 
admin 的头像
 
注册日期: 2009-06-30
帖子: 861
admin 的声望功能已被禁用
默认 AT命令解释

一、 AT命令解释:
1、常用操作
1.1 AT
命令解释:检测Module与串口是否连通,能否接收AT命令;
命令格式:AT<CR>
命令返回:OK (与串口通信正常)(无返回,与串口通信未连通)
测试结果:AT
OK
1.2 AT+CSQ
命令解释:检查网络信号强度和SIM卡情况
命令格式:AT+CSQ<CR>
命令返回:+CSQ: **,##
其中**应在10到31之间,数值越大表明信号质量越好,##应为99。
否则应检查天线或SIM卡是否正确安装
测试结果:AT+CSQ<CR>
+CSQ: 31, 99
信号强度值会有少许变化,用手遮住天线,信号强度值会下降(大致在26左右)。
1.3 ATZ
命令解释:恢复原厂设置
命令格式:ATZ<CR>
命令返回:OK
1.4 AT+CGMR
命令解释:查询模块版本;
命令格式:AT+CGMR<CR>
命令返回: <revision >
+CMEERROR <err>
测试结果:AT+CGMR<CR>
R4A021 CXC1122528
OK
解释:模块版本号为R4A021
1.5 AT+IPR
命令解释:修改串口1波特率;
命令格式:AT+IPR=<value ><CR>
命令返回: ERROR
OK
测试结果:AT+IPR=19200<CR>
OK
注意:串口波特率修改为19200后要把串口调试工具的波特率设为相应
波特率后模块才会有返回
1.6 AT&W
命令解释:保存模块设置;
命令格式:AT&W<CR>
命令返回: OK
ERROR(保存不成功)
测试结果:AT&W <CR>
OK
2、通话操作
2.1ATD
命令解释:拨打电话
命令格式:ATD**********;<CR>(****为电话号码)
命令返回:OK
NO DIAL TONE(没有拨号音)
NO CARRIER(无载波)
测试结果:a. ATD13510090403;<CR>
OK
呼叫成功;
b. ATD13510090403;<CR>
NO DIAL TONE
天线未接好,接触不良;
c. ATD13510090403<CR>
NO CARRIER
命令错误,缺{;};
2.2RING
命令解释:有电话呼入
命令格式:
命令返回:无
2.3ATA
命令解释:摘机
命令格式:ATA<CR>
命令返回:OK
测试结果:RING
RING
ATA<CR>
OK
接通电话;
2.4ATH
命令解释:挂机
命令格式:ATH<CR>
命令返回:OK
测试结果:ATH<CR>
OK
电话挂断(通话过程中);
2.5AT+CHUP
命令解释:挂机
命令格式:AT+CHUP<CR>
命令返回:OK
测试结果:RING
ATH<CR>
OK
电话挂断(尚未接通来电);
2.6AT+VTS
命令解释:拨打分机
命令格式:AT+VTS=“分机号码”<CR>
命令返回:OK
测试结果:
AT+VTS=“0”<CR>
OK
3、短信息操作
短信操作步骤及相关命令:
(1) 设置短信格式——AT+CMGF
(2) 设置短信存储载体——AT+CPMS
(3) 设置短信接收提示方式——AT+CNMI
(4) 发送短信——AT+CMGS
(5) 显示短信——AT+CMGL
3.1AT+CPMS
命令解释:选择短信存储载体
3.1.1命令格式:AT+CPMS=<mem1>[,<mem2>][,<mem3>]
设置短信存储载体
命令返回:+CPMS:<used1>,<total1>,<used2>,<total2>,<used3>,<total3>
OK
ERROR
测试结果:a. AT+CPMS=”SM”
+CPMS: 8,15,8,15,1,40
OK
设置成功,并显示状态:SM(SIM卡)存储器总容量为15,当前存储量8;
ME(模块)存储器总容量为40,当前存储量1;mem1定义为SM;
b. AT+CPMS=”SM”,”SM”
+CPMS: 8,15,8,15,1,40
OK
设置成功,并显示状态:SM存储器总容量为15,当前存储量8;
ME存储器总容量为40,当前存储量1;mem1定义为SM;mem2
定义为SM;
c. AT+CPMS=”SM”,”SM”,”SM”
+CPMS: 8,15,8,15,8,15
OK
设置成功,并显示状态:SM存储器总容量为15,当前存储量8;
ME存储器总容量为40,当前存储量1;mem1定义为SM;mem2
定义为SM;mem3定义为SM;
d. AT+CPMS=”ME”,”SM”,”SM”
+CPMS: 1,40,8,15,8,15
OK
设置成功,并显示状态:SM存储器总容量为15,当前存储量8;
ME存储器总容量为40,当前存储量1;mem1定义为ME;mem2
定义为SM;mem3定义为SM;
e. AT+CPMS=”ME”,”SM”,”ME”
+CPMS: 1,40,8,15,1,40
OK
设置成功,并显示状态:SM存储器总容量为15,当前存储量8;
ME存储器总容量为40,当前存储量1;mem1定义为ME;mem2
定义为SM;mem3定义为ME;
f. AT+CPMS=”ME
ERROR
命令格式错误,缺少{”};
3.1.2命令格式:AT+CPMS?
显示当前短信存储载体设置
命令返回:+CPMS:<mem1>,<used1>,<total1>,<mem1>,<used2>,<total2>,
<mem1>,<used3>,<total3>
OK
ERROR
测试结果:a. AT+CPMS?
+CPMS: "SM",8,15,"SM",8,15,"ME",1,40
OK
当前短信存储载体设置为:mem1为SM,mem2为SM,mem3
为ME;
b. AT+CPMS!
ERROR
命令错误;
3.1.3命令格式:AT+CPMS=?
显示本命令支持的参数
命令返回:+CPMS: (list of supported<mem1>s),(list of supported<mem2>s),
(list of supported<mem3>s)
OK
ERROR
测试结果:AT+CPMS=?
+CPMS: ("ME","SM",("ME","SM",("ME","SM"
OK
3.2AT+CMGF
命令解释:设置短信格式
3.2.1命令格式:AT+CMGF=<mode>
命令返回:OK
ERROR
设置短信格式
3.2.2命令格式:AT+CMGF=?
命令返回:OK
ERROR
显示本命令支持的参数
3.2.3命令格式:AT+CMGF?
命令返回:OK
ERROR
显示当前短信格式
测试结果:AT+CMGF=?
+CMGF: (0,1)
OK
AT+CMGF?
+CMGF: 0
OK
AT+CMGF=1
OK
AT+CMGF?
+CMGF: 1
OK

3.3AT+CMGS
命令解释:发送短信
命令格式:AT+CMGS=<da>[,<toda>]<CR>
Text is entered<ctrl-z/ESC>
命令返回:+CMGS:<mr>[,<scts>]
+CMS ERROR:<err>
OK
ERROR
测试结果:a. AT+CMGS=13510090403<CR>
>ABCD1234.456<ctrl-z>
+CMS ERROR:500
命令错误;
b. AT+CMGS="13510090403"<CR>
> IT IS TEST NOW<ctrl-z>
+CMGS: 235
OK
3.4AT+CMGR
命令解释:读短信
命令格式:AT+CMGR=<indes>
命令返回:+CMGS:<stat>,[<alpha>],<length>]<CR><LF><pdu>
+CMS ERROR:<err>
OK
ERROR
测试结果:a. AT+CMGR=5
+CMS ERROR:500
命令错误,5号短信位置为空;
b. AT+CMGR=2
+CMGL: 2,"REC READ","+8613682326205","N?R","03/08/28 17:30:35+00"
998B76844F60002E518D5FCD5FCD5427+CMGS: 235
OK
读出2号短信;
3.5AT+CMGW
命令解释:写短信,并保存到存储载体
命令格式:AT+CMGW=<length>[,<stat>]<CR>
命令返回:+CMGS:<index>
+CMS ERROR:<err>
OK
ERROR
测试结果:AT+CMGW="13534139079"<CR>
> SHELLEY123456<ctrl-z>
+CMGW: 1
OK
把目标地址为13534139079的短信存入存储载体,且被分配的地址
为1号短信;
3.6AT+CMGD
命令解释:删除短信
命令格式:AT+CMGD=<index>
命令返回:+CMS ERROR:<err>
OK
ERROR
测试结果:AT+CMGD=1
OK
1号短信被删除;
3.7AT+CMGL
命令解释:显示短信清单
命令格式:AT+CMGL=<stat>
命令返回:+CMGL:<index1>,<stat>,<oa/da>,[<alpha>],[<scts>][,<tooa/toda>,<length>]
<CR><LF><data>[<CR><LF>
测试结果:见总测试结果;
3.8AT+CMSS
命令解释:发送存储载体中的短信
命令格式:AT+CMSS=<index>
命令返回:+CMSS:<mr>
+CMS ERROR:<err>
OK
ERROR
测试结果:AT+CMSS=2
+CMSS: 204
OK
3.9AT+CNMI
命令解释:新短信提示
3.9.1命令格式:AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>]]]]
命令返回:OK
ERROR
测试结果:AT+CNMI=3,2
OK
3.9.2命令格式:AT+CNMI?
命令返回:+CNMI:<mode>,<mt>,<bm>,<ds>
OK
ERROR
测试结果:AT+CNMI?
+CNMI: 3,2,0,0
OK
3.9.3命令格式:AT+CNMI=?
命令返回:+CNMIlist of supported<mode>s), (list of supported<mt>s), (list of supported<bm>s),
(list of supported<ds>s)
OK
ERROR
测试结果:AT+CNMI=3,2
OK
4、语音部分:
4.1 AT*E2EAMS
命令解释:设定音频工作参数(修改语音通道)
4.1.1 命令格式:AT*E2EAMS=<OP >,<NUM >,<VAL >
命令返回:OK
ERROR
测试结果:<OP>为N在1-20之间,表示设置第N个参数
AT*E2EAMS=9,2(把模块的语音MIC通道设定为手柄)
OK
AT*E2EAMS=10,2(把模块的语音SPK通道设定为手柄)
OK
<OP >为0表示设置所有参数
AT*E2EAMS=0,2,1,2,0,0,2,5,9,2,2,0,1,0,0,0,1,1,0,0,1
OK
<OP >为255表示要保存设置
AT*E2EAMS=255
OK
5、GPS接口:
5.1 AT*EENMEA
命令解释:设定GPS数据使能
命令格式:AT*EENMEA=<val >
命令返回:OK
ERROR
测试结果:
AT*EENMEA=0 (不接受串口2发来的NMEA数据)
OK
AT*EENMEA=2 (接受来自串口2的NMEA数据)
OK
5.2 AT*E2NMPR
命令解释:设定串口2发送GPS数据的波特率
5.2.1命令格式:AT*E2NMPR=<val >
命令返回:OK
ERROR
测试结果:AT+CNMI=5 (设定串口2的波特率为19200)
OK
6、TCP/IP部分
TCP/IP简单操作步骤:
(1) 获得IP——AT*E2IPA=1,1
(2) 连接服务器端口 AT*E2IPO=0or 1,“IP”,“PORT”
6.1 AT*E2IPA
命令解释:获得IP
命令格式:AT*E2IPA=<Activate>,<cid>
命令返回:OK
ERROR
*E2IPA: <ErrNum>
ERROR
测试结果:AT*E2IPA =1,1
OK
6.2 AT*E2IPI
命令解释:查看IP
命令格式:AT*E2IPI=<InfoType>
命令返回:ERROR
*E2IPI: <IPAddr>
OK
测试结果:
AT*E2IPI=0
*E2IPI: 10.103.81.153
OK
查询模块获得的IP地址
AT*E2IPI=1
*E2IPI: 211.136.20.203
OK
查询第一级DNS服务器的IP地址
6.3 AT*E2IPO
命令解释:打开服务器的端口
命令格式:AT*E2IPO=<IPType>,<IPAddr>,<IPPort>
命令返回:CONNECT
ERROR
*E2IPO: <ErrNum>
ERROR
测试结果:
AT*E2IPo=1,"166.111.8.238",23
CONNECT
解释:本命令是在获得IP后,与166.111.8.238的23端口建立一个TCP连接。
注意:部分公司的服务器是采用UDP连接的,此情况下要采用AT*E2IPO=0,“***,***,***,***”,PORT
“***,***,***,***”表示服务器的IP地址,
“PORT”是连接的端口号。
6.4 AT*E2IPC
命令解释:关闭IP连接
命令格式:AT*E2IPC
命令返回:ERROR
OK
*E2IPC: <ErrNum>
ERROR
测试结果:AT*E2IPC
OK

6.5 AT*E2IPRH
命令解释:解析URL
命令格式:AT*E2IPRH=<URL>
命令返回:ERROR
*E2IPRH: <IPAddr>
OK
测试结果:AT*E2IPRH="www.163.com"
*E2IPRH: 202.108.36.167
OK
解析出www.163.com的URL为:202.108.36.167
6.6 AT*E2IPE
命令解释:获得最新的错误信息。
命令格式:AT*E2IPE
Or
AT*E2IPE?
命令返回:ERROR
*E2IPE: <ErrType>
测试结果:AT*E2IPE
*E2IPE: 000
OK
“000”表示没有错误。
“001”表示没有找到主机。
“252”表示接收IP数据错误。
“253”表示超过了IP数据的最大长度。
“254”表示断开了GPRS连接。
“255”表示通常的错误。
6.7 AT*E2IPS设定网络通信参数
命令解释:获得IP
命令格式:AT*E2IPS=<RetryTm>,<NmRetry>,<WaitTm>,<SendSz>
命令返回:ERROR
OK
测试结果:AT*E2IPS=2,10,1,1020
OK
参数说明:
第一个参数表示IP重发IP数据包等待的时间为2秒。
第二个参数表示重发的次数。
第三个参数表示在发送一个IP数据包之前等待数据的时间。
第四个参数表示TCP或者UDP数据块的最大长度。
二、应用举例
1、连接后一般操作
AT
OK
测试信号强度:
AT+CSQ
+CSQ: 29,99
OK
恢复原厂设置:
ATZ
OK
查询模块版本:
T+CGMR
R4A021 CXC1122528
OK
修改串口波特率:
AT+IPR=115200
OK
保存设置:
AT&W
OK
2、拨打电话
拨打电话:
ATD13510090403;
OK
挂机:
AT+CHUP
OK
有电话呼入:
RING
RING
摘机:
ATA
OK
挂机:
ATH
OK
3、短信息服务:
选择短信存储载体:
AT+CPMS?
+CPMS: "SM",7,15,"SM",7,15,"ME",0,40
OK
AT+CPMS=?
+CPMS: ("ME","SM",("ME","SM",("ME","SM"
OK
AT+CPMS="ME"
+CPMS: 0,40,7,15,0,40
OK
AT+CPMS=?
+CPMS: ("ME","SM",("ME","SM",("ME","SM"
OK
AT+CPMS/
ERROR
AT+CPMS?
+CPMS: "ME",0,40,"SM",7,15,"ME",0,40
OK
AT+CPMS="SM","SM","SM"
+CPMS: 7,15,7,15,7,15
OK
AT+CPMS?
+CPMS: "SM",7,15,"SM",7,15,"SM",7,15
OK
ATZ
OK
AT+CPMS?
+CPMS: "SM",7,15,"SM",7,15,"ME",0,40
OK
AT+CPMS="SM","SM","SM"
+CPMS: 7,15,7,15,7,15
OK
设置短信息格式:
AT+CMGF=?
+CMGF: (0,1)
OK
AT+CMGF?
+CMGF: 1
OK
AT+CMGF=0
OK
AT+CMGF?
+CMGF: 0
OK
AT+CMGF=1
OK
发送短信息:
AT+CMGS="13510090403"
> HI IT IS TEST,PLS ANSWER ME.
+CMGS: 0
OK
设置新短信提示方式:
AT+CNMI?
+CNMI: 3,0,0,0,0
OK
AT+CNMI=?
+CNMI: (3),(0,1,2,3),(0,2),(0,1,2),(0)
OK
AT+CNMI=3,1,0,0
OK
AT+CNMI?
+CNMI: 3,1,0,0,0
OK
有新短信:(并显示:短信存储在载体“SM”中的1号位置)
+CMTI: "SM",1
读短信:
AT+CMGR=1
+CMGR: "REC UNREAD","+8613662626940",,"03/08/29,09:44:02+00"
123456ABC
OK
设置新短信提示方式:
AT+CNMI=3,2
OK
AT+CNMI?
+CNMI: 3,2,0,0,0
OK
有新短信:
+CMT: "+8613662626940",,"03/08/29,09:47:14+00"
123456ABC333
设置新短信提示方式:
AT+CNMI=3,3
OK
有新短信:
+CMTI: "SM",6
AT+CMGR=6
+CMGR: "REC UNREAD","+8613662626940",,"03/08/29,09:49:14+00"
123456ABC333
OK
显示短信清单:
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+8613662626940",,"03/08/29,09:44:02+00"
123456ABC
+CMGL: 2,"REC READ","+8613902970800","DAVID","02/05/17,14:19:50+00"
66FE7ECF591A5C116B21FF0C4F6075285AE96ED17684808C80A47D278D348D6488F876846211FF0C
4F608F7B67D47684629A6478548C4E0D89C4521976848FD052A8FF0C7ED962115E26676596359635
5FEB611FFF0C7136540E4F606E106E106D887626FF0C62404EE5621189818BF4FF1A621172314F60
FF0C99997682FF01
OK
删除指定短信:
AT+CMGD=2
OK
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+8613662626940",,"03/08/29,09:44:02+00"
123456ABC
OK
AT+CMGL=?
+CMGL: "REC UNREAD","REC READ","STO UNSENT","STO SENT","ALL"
OK
4、GPS接口服务:
开处理NMEA命令功能:
AT*EENMEA=2
OK
设定串口2波特率为“19200”
AT*E2NMPR=5
OK
串口1获得NMEA命令
$ GPS DATA
$ GPS DATA
$ GPS DATA

5、TCP/IP操作:
获取IP
AT*E2IPA=1,1
OK
查询IP
AT*E2IPI=0
*E2IPI: 10.103.3.91
OK
查询第一级DNS的IP地址
AT*E2IPI=1
*E2IPI: 211.136.20.203
OK
连接BBS(水木清华)
AT*E2IPO=1,"166.111.8.238",23
CONNECT

OK
关闭IP连接
AT*E2IPC
OK
ATO
NO CARRIER
短消息类(class)的概念:根据指定储存的位置,短消息分为class 0 – 3四个类。也可以不指定类(no class),由ME按默认设置进行处理,存储到内存或者SIM卡中。在TPDU的TP-DCS字节中,当bit7-bit4为00x1, 01x1, 1111时,bit1-bit0指出消息所属类:
00– class 0:只显示,不储存
01 – class 1:储存在ME内存中
02 – class 2:储存在SIM卡中
03 – class 3:直接传输到TE
GSM Modem一般都支持一条“AT+CNMI”指令,可用于设定当有某类短消息到达时,如何处置它:只储存在指定的内存(易失的/非易失的)中,先储存后通知TE,还是直接转发到TE,等等。
“AT+CNMI”指令语法为
AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]
mode - 通知方式:
0– 不通知TE。
1 – 只在数据线空闲的情况下,通知TE;否则不通知TE。
2 – 通知TE。在数据线被占用的情况下,先缓冲起来,待数据线空闲,再行通知。
3 – 通知TE。在数据线被占用的情况下,通知混合在数据中一起传输。
mt - 消息储存或直接转发到TE:
0– 储存到默认的内存位置(包括class 3)
1 – 储存到默认的内存位置,并且向TE发出通知(包括class 3)
2 – 对于class 2,储存到SIM卡,并且向TE发出通知;对于其它class,直接将消息转发到 TE
3 – 对于class 3,直接将消息转发到 TE;对于其它class,同mt=1
bm, ds, bfr的含义,请参考相关标准文档。一般不需要去关心它们。
在程序中具体实现时,使用mode=2, mt="1",比较简单。对所有类型的短消息,只要在收到ME送来的“+CMTI”通知后,用“AT+CMGR”指令读取消息内容就行了。TE与ME之间的通信过程,举例如下:
(初始化)
AT+CNMI=? (查看能支持的设置范围)
+CNMI: (0-2),(0-3),(0,2,3),(0,1),(0,1)
OK
AT+CNMI? (查看当前设置)
+CNMI: 0,0,0,0,0
OK
AT+CNMI=2,1 (设置为mode=2, mt="1")
OK
AT+CNMI? (再查看当前设置)
+CNMI: 2,1,0,0,0
OK
(过了一段时间,有一条消息到达)
+CMTI “ME”,8 (通知:消息已经存储在ME内存中,序号为8)
AT+CMGR=8 (读第8条消息)
+CMGR: 8,27
0891683108200505F0240D91683158812764F80000402052110373800741E19058341E01
OK
AT+CMGD=8 (删除第8条消息)
OK
还有一种方式mode=2, mt="2"也很令人感兴趣。在这种方式下,除了class 2外,消息不存储,直接转发到TE。需要处理消息通知和内容两种情况,复杂一些。但如果发送方也由程序控制,可以只发no class或class 1的消息,这样不存储在接收方ME内存(一般是闪存,非易失性的)中,肯定能延长它的使用寿命。TE与ME之间的通信过程,举例如下:
AT+CNMI=2,2 (设置为mode=2, mt="2")
OK
(过了一段时间,有一条消息到达)
+CMT: ,26
0891683108200505F0040D91683158812764F8000840205211639180064F60597D0021
__________________

让世界倾听我们的笛声
admin 当前离线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 17:08


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.