SIM900A 各功能指令 详细版

1 AT 指令简介关键词:发送第一条指令;同步波特率;AT 即Attention ,指令集是从终端设备(TerminalEquipment,ATTE) 或数据终端设备(DataTerminalEqu

1 AT 指令简介

关键词:发送第一条指令;同步波特率;

AT 即Attention ,指令集是从终端设备(TerminalEquipment,ATTE) 或数据终端设备(DataTerminalEquipment,DTE) 向终端适配器(TerminalAdapter,TA) 或数据电路终端设备(DataCircuitTerminalEquipment,DCE) 发送的。通过TA ,TE 发送AT 指令来控制移动台(MobileStation,MS) 的功能,与GSM 网络业务进行交互。用户可以通过AT 指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。

AT 指令必须以"AT" 或"at" 开头(第一条发给模块的指令要都大写),以回车()结尾。模块的响应通常紧随其后,格式为:<回车><换行><响应内容><回车><换行>。

我们通过串口调试助手SSCOM 来测试一下,打开:选择正确的COM 号(连接到SIM900A 模块的COM 端口,我电脑是COM3),然后设置波特率为115200,勾选发送新行(必选!即sscom 自动添加回车换行功能),然后发送AT 到SIM900A 模块,如下图所示:

我们发送了2次AT 指令,第一次看到有乱码,这是因为模块上电后,还没有实现串口同步,在收到第一次数据(不一定要AT 指令) 后,模块会自动实现串口同步后续通信就不会出现乱码了。因为SIM900A 具有自动串口波特率识别功能(识别范围:1200~115200),所以我们的电脑(或设备) 可以随便选择一个波特率(不超过识别范围即可)

,来和模块进行通

,

信,这里我们选择最快的115200。从上图可以看出,我们现在已经可以和SIM900A 模块进行通信了,我们通过发送不同的AT 指令,就可以实现对SIM900A 的各种控制了。

SIM900A 模块提供的AT 命令包含符合GSM07.05、GSM07.07和ITU-TRecommendationV.25ter 的指令,以及SIMCOM 自己开发的指令。接下来我们介绍几个常用的AT 指令:

1,AT CPIN?该指令用于查询SIM 卡的状态,主要是PIN 码,如果该指令返回: CPIN:READY,则表明SIM 卡状态正常,返回其他值,则有可能是没有SIM 卡。

2,AT CSQ 该指令用于查询信号质量,返回SIM900A 模块的接收信号强度,如返回: CSQ:30,0,

表示信号强度是30(最大有效值是31)。如果信号强度过低,则要检查天线是否接好了? 3,AT COPS?该指令用于查询当前运营商,该指令只有在连上网络后,才返回运营商,否则返回空,如返回: COPS:0,0,"CHINAMOBILE",表示当前选择的运营商是中国移动。

4,AT CGMI 该指令用于查询模块制造商,如返回:SIMCOM_Ltd,说明SIM900A 模块是SIMCOM 公司生产的。

5,AT CGMM该指令用于查询模块型号,如返回:SIMCOM_SIM900A,说明模块型号是SIM900A 。

6,AT CGSN该指令用于查询产品序列号(即IMEI 号),每个模块的IMEI 号都是不一样的,具有全

球唯一性,如返回:869988012018905,说明模块的产品序列号是:869988012018905。 7,AT CNUM该指令用于查询本机号码,必须在SIM 卡在位的时候才可查询,如返回: CNUM:"","15902020353",129,7,4,则表明本机号码为:15902020353。另外,不是所有的SIM 卡都支持这个指令,有个别SIM 卡无法通过此指令得到其号码。

8,ATE1该指令用于设置回显模式(默认开启),即模块将收到的AT 指令完整的返回给发送端,启用该功能,有利于调试模块。如果不需要开启回显模式,则发送ATE0指令即可关闭,这样收到的指令将不再返回给发送端,这样方便程序控制。

以上就是我们介绍的几个常用的AT 指令,当然还有其他一些常用的AT 指令,比如ATD/ATA/ATH等,我们在后面的章节会慢慢介绍。关于SIM900A 详细的AT 指令介绍,SIM900A_AT命令手册这个文档。发送给模块的指令,如果执行成功,则会返回对应信息和"OK" ,如果执行失败/指令无效,则会返回"ERROR" 。

另外,提醒大家,所有的指令都必须是以ASCII 编码字符格式发送,不要在指令里面夹

,

杂中文符号。同时,很多指令都带有查询或提示功能,可以通过指令 "?"来查询当前设置,通过指令 "=?"的方式来获取设置提示。

2 拨打/接听电话

关键词:接打电话;DTMF;

本节,我们将介绍如何使用SIM900A 模块进行拨打和接听电话。本节,将要用到的指令有:ATE1/ATD/ATA/ATH/AT COLP/AT CLIP/AT VTS等7条AT 指令。

ATE1,用于设置回显,即模块将收到的指令完整的返回给发送设备,方便调试。ATD ,用于拨打任意电话号码,格式为:ATD 号码 ;,末尾的’; ’一定要加上,否则不能成功拨号,如发送:ATD10086; ,即可实现拨打10086。ATA ,用于应答电话,当收到来电的时候,给模块发送:ATA ,即可接听来电。ATH ,用于挂断电话,要想结束正在进行的通话,只需给模块发送:ATH ,即可挂断。AT COLP,用于设置被叫号码显示,这里我们通过发送:AT COLP=1,开启被叫号码显示,当成功拨通的时候(被叫接听电话),模块会返回被叫号码。AT CLIP,用于设置来电显示,通过发送:AT CLIP=1,可以实现设置来电显示功能,模块接收到来电的时候,会返回来电号码。AT VTS=*,产生DTMF 音,该指令只有在通话进行中才有效,用于向对方发送DTMF 音,比如在拨打10086查询的时候,我们可以通过发送:AT VTS=1,模拟发送按键1。

在介绍了本节要用到的几个AT 指令之后,我们开始实现本节功能,不过有前提条件:那就是模块必须开机,并且找到了运营商。通过发送:AT COPS?,如果返回: COPS:0,0,"CHINAMOBILE",则可以开始下面的测试了。

2.1拨打电话

本节,我们将利用SIM900A 模块来拨打10086,并进行话费查询。首先发送:ATE1,设置回显,再发送:AT COLP=1,设置被叫号码显示。如图下图所示:

,

然后,我们发送:ATD10086; ,拨打10086,在接通后,SIM900A 模块返回: COLP:"10086",129,"","",此时,待一堆话结束后,我们发送:AT VTS=1,即可查询本机电话号码。最后,通过发送:ATH ,挂断,结束本次通话。

查询话费余额至此,我们就完成了一次拨号、发送DTMF 音、结束通话的操作。十分简单,所以用SIM900A 模块来实现打电话,那实在是小菜一碟。

2.2接听电话

本节,我们将通过SIM900A 模块实现电话接听。首先,我们发送:AT CLIP=1,开启来电显示功能,然后我们用其他电话机/手机拨打模块上SIM 卡的号码。然后,模块在接收到来电的时候,会通过耳机输出来电铃声,并且可以在串口接收到来电号码,如: CLIP:"15124532672",161,"",,"ailin",0,表示当前接入号码为:15124532672。此时,我们发送:ATA ,即可接听来电,并进行通话。当对方挂断电话的时候,SIM900A 模块会返回:NOCARRIER ,并结束此次通话。当然,我们也可以通过发送:ATH ,来主动结束通话。

2.3 短信的读取与发送

本节,我们将介绍如何使SIM900A 模块进行短信的读取与发送。本节,将要用到的指令有:AT CNMI/AT CMGF/AT CSCS/AT CSMP/AT CMGR/AT CMGS/AT CPMS等7条AT

指令。

,

AT CNMI,用于设置新消息指示。发送:AT CNMI=2,1,设置新消息提示,当收到新消息,且SIM 卡未满的时候,SIM900A 模块会返回数据给串口,如: CMTI:"SM",2,表示收到接收到新消息,存储在SIM 卡的位置2;存满了就不会提示,可以通过删除短信来解决。AT CMGF,用于设置短消息模式,SIM900A 支持PDU 模式和文本(TEXT )模式等2种模式,发送:AT CMGF=1,即可设置为文本模式。AT CSCS,用于设置TE 字符集,默认的为GSM7位缺省字符集,在发送纯英文短信的时候,发送:AT CSCS="GSM",设置为缺省字符集即可。在发送中英文短信的时候,需要发送:AT CSCS="UCS2",设置为16位通用8字节倍数编码字符集。AT CSMP,用于设置短消息文本模式参数,在使用UCS2方式发送中文短信的时候,需要发送:AT CSMP=17,167,2,25,设置文本模式参数。AT CMGR,用于读取短信,比如发送:AT CMGR=1,则可以读取SIM 卡存储在位置1的短信。AT CMGS,用于发送短信,在"GSM" 字符集下,最大可以发送180个字节的英文字符,在"UCS2" 字符集下,最大可以发送70个汉字(包括字符/数字)。该指令我们在后面详细介绍。AT CPMS,用于查询/设置优选消息存储器,通过发送:AT CPMS?,可以查询当前SIM 卡最大支持多少条短信存储,以及当前存储了多少条短信等信息。如返回: CPMS:用户手册"SM",1,50,"SM",1,50,"SM",1,50,表示当前SIM 卡最大存储50条信息,目前已经有1条存储的信息。

2.4 英文短信的读取

本节,我们将用其他手机先发送一条英文短信到SIM900A 模块上,然后读取模块接收到的这条英文短信。

首先,我们发送:AT CMGF=1,设置为文本模式,然后发送:AT CSCS="GSM",设置GSM 字符集,然后发送:AT CNMI=2,1,设置新消息提示。接着,我们用别的手机发送一条英文短信“SIM900AModule ”到我们的模块上(如果不知道模块号码,可以发送:AT CNUM,查询模块号码)。模块接收到短信后,会提示如: CMTI:"SM",2,表明收到了新的短信,存放在SIM 卡位置2。然后,我们发送AT CMGR=2,即可读取该短信。

注意:某些时候,模块收到了短信,但却不发送提示,原因是:模块存储容量有限,不能继续存储短信。解决方法:可以删除一些短信,例如发送:AT CMGD=1,删除全部短信命令。

2.5 英文短信的发送

本节,我们将利用SIM900A 模块来给指定手机号码发送一条英文短信。这里,我们用到AT CMGS指令来发送短信,发送全英文/数字短信的时候,我们先设置为:"GSM" 字符集(AT CSCS="GSM"),文本模式(AT CMGF=1)假设我们要给手机号:。15124532672,发送

,

一条短信,则发送:AT CMGS="15124532672",然后模块返回:>,此时我们输入我们需要发送的内容:SIM900A TEST,注意,此可以不用发送回车了。在发送完内容以后,最后以十六进制(HEX)格式单独发送:1A (即0X1A ),即可启动一次短信发送. 注1:0X1A, “CTRL Z”的键值,即用于告诉SIM900A ,要执行发送操作。另外还可以发送:0X1B ,即“ESC ”的键值,用于告诉SIM900A ,取消本次操作,不执行发送。稍等片刻,在短信成功发送后,模块返回如: CMGS:156,的确认信息,表示短信成功发送,其中156为模块内部的短信计数器,一般不用理会。

2.6 中英文短信的发送

本节,我们将利用SIM900A 模块来给指定手机号码发送一条中英文短信。同样,我们用到AT CMGS指令来发送中英文短信。还是采用文本模式发送,发送步骤如下:

首先,发送:AT CMGF=1,设置为文本模式。然后,发送:AT CSMP=17,167,2,25,设置文本模式参数。最后发送:AT CSCS="UCS2",设置为UCS2编码字符集。此时,我们便可以发送AT CMGS指令来发送中英文短信了,不过由于使用了UCS2字符集,所有字符/数字/汉字,都必须使用UNICODE 编码。假定我们要给手机号:15124532672,发送一条中英文短信,内容为“SIM900A 中英文短信发送测试”。我们首先要用:汉字UNICODE 互换工具.exe ,这个软件将号码和发送内容转换为UNICODE 字符串(需要手动去掉空格),得到:15124532672转换后的UNICODE 字符串(去掉空格后)

为:00310035003100320034003500330032003600370032.SIM900A。

中英文短信发送测试,转换后的UNICODE 字符串为:

00530049004D00390030003000414E2D82F1658777ED4FE153D190016D4B8BD5, 然后,发送:AT CMGS="00310035003100320034003500330032003600370032",这个指令,然后模块返回:>此时我们输入我们需要发送的内容:

00530049004D00390030003000414E2D82F1658777ED4FE153D190016D4B8BD5,注意,此处不发送回车。在发送完内容以后,最后以十六进制(HEX)格式单独发送(不用添加回车):1A (即0X1A ),启动一次短信发送。

短信的读取与发送,我们就介绍到这里,我们全部是使用文本(TEXT )模式来实现的,当然还可以用PDU 模式,不过PDU 模式稍微复杂点,有兴趣的朋友,可以参考相关资料自行研究下。

2.7 GPRS 通信

本节,我们将介绍如何使用SIM900A 模块进行GPRS 通信,实现模块与电脑的TCP 和

,

UDP 数据传输。本节,将要用到的指令有:

AT CGCLASS/AT CGDCONT/AT CGATT/AT CIPCSGP/AT CLPORT/AT CIPSTART/AT CIPSEN/AT CIPSTATUS/AT CIPCLOSE/AT CIPSHUT等10条AT 指令。AT CGCLASS,用于设置移动台类别。SIM900A 模块仅支持类别"B" 和"CC" ,发送:AT CGCLASS="B",设置移动台类别为B 。即,模块支持包交换和电路交换模式,但不能同时支持。AT CGDCONT,用于设置PDP 上下文。发送:AT CGDCONT=1,"IP","CMNET",设置PDP 上下文标志为1,采用互联网协议(IP ),接入点为"CMNET" 。AT CGATT,用于设置附着和分离GPRS 业务。发送:AT CGATT=1,附着GPRS 业务。AT CIPCSGP,用于设置CSD 或GPRS 链接模式。发送:AT CIPCSGP=1,"CMNET",设置为GPRS 连接,接入点为”CMNET ”。AT CLPORT,用于设置本地端口号。发送:

AT CLPORT="TCP","8888",即设置TCP 连接本地端口号为8888。AT CIPSTART,用于建立TCP 连接或注册UDP 端口号。发送:AT CIPSTART="TCP","180.120.52.222","8086",模块将建立一个TCP 连接,连接目标地址为:180.120.52.222,连接端口为8086,连接成功会返回:CONNECT OK 。AT CIPSEND,用于发送数据。在连接成功以后发送:AT CIPSEND,模块返回:>,此时可以输入要发送的数据,最大可以一次发送1352字节,数据输入完后,同发短信一样,输入十六进制的:1A (0X1A ),启动发送数据。在数据发送完成后,模块返回:SENDOK ,表示发送成功。

AT CIPSTATUS,用于查询当前连接状态。发送:AT CIPSTATUS,模块即返回当前连接状态。

AT CIPCLOSE,用于关闭TCP/UDP连接。发送:AT CIPCLOSE=1,即可快速关闭当

前TCP/UDP连接。

AT CIPSHUT,用于关闭移动场景。发送:AT CIPSHUT,则可以关闭移动场景,关闭场景后连接状态为:IPINITIAL ,可以通过发送:AT CIPSTATUS,查询。另外,在连接建立后,如果收到: PDP:DEACT,则必须发送:AT CIPSHUT,关闭场景后,才能实现重连。

以上就是我们本节可能将要用到的一些AT 指令的简单介绍,要实现模块与电脑的GPRS 通信,需要确保所用电脑具有公网IP ,否则无法实现通信,推荐在ADSL 网络下进行测试,并最好关闭防火墙/杀毒软件。

拥有1个公网IP ,你可以通过百度,搜索:IP ,第一个条目,就是本机IP ,如图下图所示。

,

该IP 将与你的电脑IP (开始--运行--cmd--IPCONFIG/ALL)进行对比,不一致的,对于使用了路由器的ADSL 用户,如下图所示

可以看到,我们电脑IP 为192.168.1.103,与公网IP 不一致,此时我们需要对路由器进行一下转发规则设置:登录路由器控制页面,然后选择转发规则DMZ 主机,如下图所示:

2.7.1 TCP 连接

TCP 是基于连接的协议,在收发数据前,必须先和对方建立可靠连接,是一种可靠的数据传输方式,不过速度慢。本节,我们将在SIM900A 模块和电脑之间建立一个TCP 连接,并实现数据的互相收发。首先,在电脑端,我们需要用到一个软件:网络调试助手.exe ,该软件在:网络调试助手文件夹下可以找到。打开该软件,设置协议类型为:TCPServer ,本地IP 地址直接用默认的即可,设置本地端口为:8086,注意,这里的端口号可以随便设置,范围为0~65535,只要该端口没有被其他程序占用即可。设置好之后,点击“连接”按钮(点击后变为“断开”,此时电脑端的)TCPServer 已经开始工作,等待连接接入,如下图所示:

,

在SIM900A 模块这边,先发送4个指令:

AT CGCLASS="B"

AT CGDCONT=1,"IP","CMNET"

AT CGATT=1

AT CIPCSGP=1,"CMNET"

这几条指令前面已经介绍过,用于设置移动台类别、连接方式、接入点和附着GPRS 业务等。起到一个前期准备的作用。之后,发送AT CLPORT="TCP","2000",设置本地TCP 连接端口为2000,然后发送:AT CIPSTART="TCP","180.120.52.222","8086",建立TCP 连接,连接到IP :180.120.52.222,连接端口为:8086。等待TCP 连接成功建立,模块返回:CONNECT OK。

,

此时,SIM900A 模块和电脑便建立了一个TCP 连接,可以互相发送数据了。首先,我们来看如何通过SIM900A 模块给电脑发送数据。通过串口调试助手发送:AT CIPSEND,此时模块返回:>,然后我们发送字符串(不用发送新行):SIM900A TCP连接测试,最后发送十六进制的:1A ,启动数据发送。然后等待模块回应:SEND OK,说明发送成功。在串口调试助手收到:SEND OK,之后,表明我们的数据已经成功发送出去了,此时在电脑端的网络调试助手,会显示收到的数据。

最后,我们要关闭TCP 连接,发送:AT CIPCLOSE=1,关闭当前TCP 连接,再发送:AT CIPSHUT,关闭场景。

2.7.2 UDP 连接

UDP 与TCP 对应,是面向非连接的协议,在收发数据时,不需要建立连接,是一种不可靠的数据传输方式,不过速度快。本节,我们将在-SIM900A 模块和电脑之间建立一个UDP 连接,并实现数据的互相收发。同样,我们先在电脑端,打开网络调试助手,设置协议类型为:UDP ,使用默认的IP 地址,并设置本地端口为:8086。设置好之后,点击“连接”按钮(点击后变为“断开”,此)时电脑端的UDP 通信就准备好了,等待发送和接收数据,如下图所示。

标签: