sim900a at指令,常用的AT指令介绍
扫描二维码
随时随地手机看文章
AT 即 AttenTIon,指令集是从终端设备 (TerminalEquipment, ATTE)或数据终端设备 (DataTerminalEquipment, DTE)向终端适配器(TerminalAdapter, TA)或数据电路终端设备 (DataCircuitTerminalEquipment, DCE)发送的。通过 TA, TE 发送 AT 指令来控制移动台 (MobileStaTIon, MS)的功能,与 GSM 网络业务进行交互。用户可以通过 AT 指令进行呼叫、 短信、电话本、数据业务、传真等方面的控制。
AT 指令必须以“AT”或“at”开头( 第一条发给模块的指令要都大写),以回车( 《CR》)结 尾。模块的响应通常紧随其后,格式为: 《回车》《换行》《响应内容》《回车》《换行》。 我们通过串口调试助手 SSCOM 来测试一下,打开:选择正确的 COM 号(连接到 SIM900A 模块的 COM 端口,我电脑是 COM3),然后设置波特率为 115200, 勾选发送新行( 必选! 即 sscom 自动添加回车换行功能),然后发送 AT 到 SIM900A 模块,如下图所示:
我们发送了 2 次 AT 指令,第一次看到有乱码,这是因为模块上电后,还没有实现串口同步,在收到第一次数据(不一定要 AT 指令)后,模块会自动实现串口同步后续通信就不会出现乱码了。 因为 SIM900A 具有自动串口波特率识别功能(识别范围: 1200~115200),所以我们的电脑(或设备)可以随便选择一个波特率(不超过识别范围即可),来和模块进行通信,这里我们选择最快的 115200。从上图可以看出,我们现在已经可以和 SIM900A 模块进行通信了,我们通过发送不同的 AT 指令,就可以实现对 SIM900A 的各种控制了。 常用的 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 指令即可 关闭,这样收到的指令将不再返回给发送端,这样方便程序控制。
发送给模块的指令,如果执行成功,则会返回对应信息和“OK”,如果执行失败/指令无效,则会返回“ERROR”。另外,提醒大家,所有的指令都必须是以 ASCII 编码字符格式发送,不要在指令里面夹杂中文符号。同时,很多指令都带有查询或提示功能,可以通过指令+“?”来查询当前设置,通过指令+“=?”的方式来获取设置提示。
2 拨打/接听电话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 接听电话首先,我们发送: AT+CLIP=1,开启来电显示功能,然后我们用其他电话机/手机拨打模块上 SIM 卡的号码。然后,模块在接收到来电的时候,会通过耳机输出来电铃声,并且可以在串口接收到来电号码,如:+CLIP:“15124532672”,161,“”,,“ailin”,0,表示当前接入号码为:15124532672。此时,我们发送:ATA,即可接听来电,并进行通话。当对方挂断电话的时候, SIM900A 模块会返回: NOCARRIER,并结束此次通话。当然,我们也可以通过发送: ATH,来主动结束通话。
2.3 短信的读取与发送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),启动一次短信发送。