常见的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 字符集,默认的为 GSM 7 位缺省字符集,在发送纯英文短信
的时候,发送: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:
英文短信的发送
本节,我们将利用 ATK-SIM900A 模块来给指定手机号码发送一条英文短信。
这里,我们用到 AT+CMGS 指令来发送短信,发送全英文/数字短信的时候,我们先设
置为:"GSM"字符集(AT+CSCS="GSM") ,文本模式(AT+CMGF=1) 。
假设我们要给手机号: 13922348612, 发送一条短信, 则发送: AT+CMGS="13922348612",
然后模块返回:>,此时我们输入我们需要发送的内容:ATK-SIM900A MSG SEND TEST,
注意, 此可以不用发送回车了。 在发送完内容以后, 最后以十六进制(HEX)格式单独发送 (不
用添加回车) :1A(即 0X1A) 1 ,即可启动一次短信发送。
注 1:0X1A, 即 “CTRL+Z” 的键值, 用于告诉 SIM900A, 要执行发送操作。 另外还可以发送: 0X1B,
即“ESC”的键值,用于告诉 SIM900A,取消本次操作,不执行发送。
稍等片刻,在短信成功发送后,模块返回如:+CMGS: 156,的确认信息,表示短信成
功发送,其中 156 为模块内部的短信计数器,一般不用理会。如图 2.3.4.2.1 所示:
从上图可以看出,我们在短信发送的最后,输入的是十六进制的 1A,将这个数据发送
给 SIM900A 模块后,启动短信发送,然后发送成功后,模块返回了:+CMGS: 156,说明短
信发送成功了。
中英文短信的发送
本节,我们将利用 ATK-SIM900A 模块来给指定手机号码发送一条中英文短信。
同样,我们用到 AT+CMGS 指令来发送中英文短信。还是采用文本模式发送,发送步
骤如下:
首先,发送:AT+CMGF=1,设置为文本模式。然后,发送:AT+CSMP=17,167,2,25,
设置文本模式参数。最后发送:AT+CSCS="UCS2",设置为 UCS2 编码字符集。
此时,我们便可以发送 AT+CMGS 指令来发送中英文短信了,不过由于使用了 UCS2
字符集,所有字符/数字/汉字,都必须使用 UNICODE 编码。
假定我们要给手机号:13922348612,发送一条中英文短信,内容为“ATK-SIM900A 中
英文短信发送测试” 。我们首先要用:汉字 UNICODE 互换工具.exe,
这个软件将号码和发
送内容转换为 UNICODE 字符串(需要手动去掉空格) ,得到:
13922348612,转换后的 UNICODE 字符串(去掉空格后)为:
00310033003900320032003300340038003600310032
ATK-SIM900A 中英文短信发送测试,转换后的 UNICODE 字符串为:
00410054004B002D00530049004D00390030003000414E2D82F1658777ED4FE153D1900
16D4B8BD5
然后,发送:
AT+CMGS="00310038003100370035003600380034003700390039",这个指
令, 然后模块返回: >, 此时我们输入我们需要发送的内容: 00410054004B002D00530049004D
00390030003000414E2D82F1658777ED4FE153D190016D4B8BD5,
注意,此可以不用发送回
车了。在发送完内容以后,最后以十六进制(HEX)格式单独发送(不用添加回车) :1A(即
0X1A) ,启动一次短信发送,如图 2.3.4.4.1 所示:
等到模块发送完成,返回如:+CMGS: 158,表示短信已成功发送。此时,我们在目标
手机(13922348612)上面,就可以看到模块发送过来的中英文短信了。
短信的读取与发送, 我们就介绍到这里, 我们全部是使用文本 (TEXT) 模式来实现的,
当然还可以用 PDU 模式,不过 PDU 模式稍微复杂点,有兴趣的朋友,可以参考相关资料自
行研究下。
接下来我们介绍几个常用的 AT 指令:
1, AT+CPIN?
该指令用于查询 SIM 卡的状态,主要是 PIN 码,如果该指令返回:+CPIN:READY,则
表明 SIM 卡状态正常,返回其他值,则有可能是没有 SIM 卡。
2, AT+CSQ
该指令用于查询信号质量,返回 SIM900A 模块的接收信号强度,如返回:+CSQ: 24,0,
表示信号强度是 24(最大有效值是 31) 。如果信号强度过低,则要检查天线是否接好了?
3, AT+COPS?
该指令用于查询当前运营商,该指令只有在连上网络后,才返回运营商,否则返回空,
如返回:+COPS:0,0, "CHINA MOBILE",表示当前选择的运营商是中国移动。
4, AT+CGMI
该指令用于查询模块制造商,如返回:SIMCOM_Ltd,说明 SIM900A 模块是 SIMCOM
公司生产的。
SIMCOM_Ltd
5, AT+CGMM
该指令用于查询模块型号,如返回:SIMCOM_SIM900A,说明模块型号是 SIM900A。
SIMCOM_SIM900A
6, AT+CGSN
该指令用于查询产品序列号(即 IMEI 号) ,每个模块的 IMEI 号都是不一样的,具有全
球唯一性,如返回:869988012018905,说明模块的产品序列号是:869988012018905。
863306026653540
7, AT+CNUM
该指令用于查询本机号码,必须在 SIM 卡在位的时候才可查询,如返回:+CNUM:
"","15902020353",129,7,4,则表明本机号码为:15902020353。另外,不是所有的 SIM 卡都
支持这个指令,有个别 SIM 卡无法通过此指令得到其号码。