文档库 最新最全的文档下载
当前位置:文档库 › SIM900A 各功能指令 详细版

SIM900A 各功能指令 详细版

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:"","159********",129,7,4,则表明本机号码为:159********。另外,不是所有的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:"151********",161,"",,"ailin",0,表示当前接入号码为:151********。此时,我们发送: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)假设我们要给手机号:。151********,发送

一条短信,则发送:AT+CMGS="151********",然后模块返回:>,此时我们输入我们需要发送的内容: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编码。假定我们要给手机号:151********,发送一条中英文短信,内容为“SIM900A中英文短信发送测试”。我们首先要用:汉字UNICODE互换工具.exe,这个软件将号码和发送内容转换为UNICODE字符串(需要手动去掉空格),得到:151********转换后的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+CIPS TATUS/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通信就准备好了,等待发送和接收数据,如下图所示。

由于移动台类别、连接方式、接入点和附着GPRS业务等的设置指令,在TCP连接的时候,我们已经发送过了,所以不需要再次发送了(其实TCP连接的时候也可以不发送,只要模块的参数没有被修改,默认就是我们发送的设置)。对于UDP连接,通过串口助手发

送:AT+CLPORT="UDP","3000",设置本地UDP连接端口为3000,然后发送:

AT+CIPSTART="UDP","180.120.52.222","8086",建立UDP连接,目标IP地址为:180.120.52.222,连接端口为:8086。等待UDP连接成功,模块返回:CONNEC TOK。此时,UDP连接已经准备好,可以互相发送数据了。同样,先看SIM900A模块发送数据给电脑。通过串口调试助手发送:AT+CIPSEND,此时模块返回:>,然后我们发送字符串(不用发送新行):SIM900A UDP连接测试,最后发送十六进制的:1A,启动数据发送。然后等待模块回应:SEND OK,说明发送成功。

2.7.3 通过域名进行GPRS通信

通过域名的方式来连接我们的服务器,我们首先需要有一个域名,建议大家使用花生壳

软件这款软件,大家可以到花生壳网站上注册一个ID,会免费获得一个域名。这里我经过注册登陆后,获得的一个免费域名为:https://www.wendangku.net/doc/3a9749406.html,。下面我们将用这个域名来进行实验。

2.7.4 关于没有公网IP的解决方法

方法1:在学校使用校园网的用户,如果使用的电脑有无线网卡,可以到淘宝购买ChinaNet的短期WIFI账号来上网(几毛钱就能解决),这样就可以拥有一个外网IP来做测试了。

首先打开提供的测试用的TCP/UDP网络调试软件(NetAssis软件),设置协议类型为“TCP 服务器”,填好本地公网IP地址和端口号,这里我们的公网IP地址为:180.143.232.114(根据具体情况进行更改),本地端口号使用“8080”。然后我们继续回到串口调试助手,发送下面的指令:

(1)AT+CIPMUX=0 这条命令是用来设置SIM900模块工作在单链接方式的,多连接方式应用起来比较麻烦,我们这里先以单链接的方式来演示。

(2)AT+CIPRXGET=1 这条命令是用来设置获取数据的方式的,参数为:1是用来设置以手动的方式来提取接收到的数据的。

(3)AT+CIPQRCLOSE=1 这条命令是用来设置加速远程断开连接用的,不必细究这条命令,照此设置就行了。

(4)AT+CIPMODE=0 这条命令是用来选择TCPIP应用模式的,如果参数为0,那么以非透明的方式来应用,如果参数为1,那么以透明方式来应用。我们这里是以非透明的方式来用。

(5)AT+CIPSTART=”TCP”,”https://www.wendangku.net/doc/3a9749406.html,”,8080 通过域名连接服务器,返回OK,连接成功后SIM900A返回“CONNECT OK”。

(6) 向SERVER发送数据“SIM900A”,在串口调试工具发送如下指令:AT+CIPSEND 返回> 在发送框内输入SIM900A 手动发送,这里一定要注意像发短信时一样,一定要在手动发送SIM900A后,十六进制发送1a结束,返回SEND OK如图所示:

此时网络调试助手的服务器端接收到数据并显示:

(7)下面我们通过服务器给SIM900模块一个应答“YES!”

点击发送之后,数据就发送出去了,然后我们通过看串口调试工具看一下模块收到了没有。串口返回“+CIPRXGET:1”这条提示,说明有数据到来,需要我们手动去提取,这也就是我们刚才执行AT+CIPRXGET=1 这条命令的目的了。下面我们将数据提取过来,发送指令“AT+CIPRXGET=2,156”,然后SIM900A返回如下数据:

+CIPRXGET:2,4,0

YES!

OK

这说明我们的SIM900A模块收到了4个字节的内容,内容就是“YES!”。

刚才我们设置以手动的方式来提取接收到的数据(AT+CIPRXGET=1),下面我们设置获取数据的方式为自动提取数据来进行实验,也就是如果SIM900A接收GPRS数据,不再需要发送任何指令,GPRS数据直接打印到串口。实验步骤如下:

(1)发送指令AT+CIPRXGET=0 ,设置获取数据的方式为自动提取数据,成功返回OK。

(2)指定本地端口AT+CLPORT=“TCP”,“3033”,成功返回OK 。

(3)通过域名来连接服务器AT+CIPSTART=”TCP”,”https://www.wendangku.net/doc/3a9749406.html,”,8080,成功返回OK ,连接成功后返回CONNECT OK .

(4)向SERVER发送数据“SIM900A”,在串口调试工具发送如下指令:AT+CIPSEND 返回> 在发送框内输入SIM900A 手动发送,这里一定要注意像发短信时一样,一定要在手动发送SIM900A后,十六进制发送1a结束。如下图:

此时服务器接收到数据:

我们再让服务器给SIM900A发送一个回应信息“YES!”:

由于我们刚才设置的数据提取方式为自动获取方式,所以SIM900A接收到服务器发过来的数据后直接通过串口显示出来,不再需要发送任何指令来提取:

本说明书到这里就结束了,建议大家还是去研究一下SIM900A的AT命令手册,因为那是最权威的资料,多试验,每个命令都摸索一下,才能更好的掌握SIM900A的应用。

本说明书在编辑的时参考了一些比较好的说明书,如YIXIN电子SIM900使用手册,这里特别感谢他们相关的工作人员。如果您对本文档中的内容有疑问,请及时与我们联系。

艾琳电子

相关文档
相关文档 最新文档