AT指令发送短信流程及接听、拨打电话

时间:2022-11-10 14:06:47

一、英文短信
发:AT
收:OK
发:AT+CMGF=1 
收:OK
发:AT+CMGS="+8615083111880"
收:>
发:data       //data 为发送内容(enter 后以ctrl+z(0x1A)结束)
收:+CMGS: 54 OK

如果不成功,出现+CMS ERROR: 302 错误。再次发送AT+CMGF=1,AT+CMGS="+8615083111880"。出现>,然后输入短信内容

二、中文PDU短信

我用一个例子说明整个过程~

短信中心号码可以百度

北京移动 +8613800100500 北京联通 +8613010112500  
上海移动 +8613800210500 上海联通 +8613010314500
天津移动 +8613800220500 天津联通 +8613010130500
重庆移动 +8613800230500 重庆联通 +8613010831500

    短信中心:+8613800100500
    收信号码:+8613401041516
    短信内容:我爱听评书

第一步——格式化短信中心号码
1 - 要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。

    +8613800200500 >>>> 8613800100500F
2 - 将奇数位和偶数位交换位置。
    8613800100500F >>>> 683108100005F0
3 - 在前面加上“91”,是国际化的意思。
    683108100005F0 >>>> 91683108100005F0
4 - 最后算一算它有多长了,把长度除于2,再把结果转换为2位的16进制数,加在最前面。
    91683108100005F0长16 16/2=8 8的16进制“08” 一定要注意是2位
    91683108100005F0 >>>> 0891683108100005F0
短信中心号码就处理完了,下几一步有类似的算法,现在我感觉就像做菜一样……

第二步——格式化收信号码
1 - 要去掉“+”号,然后看看长度要是奇数的话就在末尾追加一个“F”。

    +8613401041516 >>>> 8613401041516F
2 - 将奇数位和偶数位交换位置。
    8613401041516F >>>> 683104011415F6

第三步——格式化发送内容
1 - 把字符串转换为Unicode格式。(转换函数我写过了,直接拿去用好了)
    我爱听评书 >>>> 62117231542C8BC44E66
2 - 把串Unicode码的长度除于2,再把结果转换为2位的16进制数,加在最前面。
    62117231542C8BC44E66长20 20/2=10 10的16进制“0A”
    62117231542C8BC44E66 >>>> 0A62117231542C8BC44E66

先看看我们都准备什么了,再继续~
    格式化后的短信中心:0891683108100005F0
    格式化后的收信号码:683104011415F6
    格式化后的发送内容:0A62117231542C8BC44E66

第四步——组合处理
1 - 算一下收信号码的长度,不包括“+”号。这个收信号码指的是+8613401041516,而不是683104011415F6。
    +8613401041516 >>>> 8613401041516 长度为“OD”(2位16进制数表示)
2 - 在长度前后分别加“1100”。
    OD >>>> 1100OD
3 - 如果收信号码是手机的话就在后面追加“91”,如果是小灵通的话就要追加“81”。
    +8613401041516是手机号码所以加“91”
    11000D >>>> 11000D91
4 - 11000D91 + 格式化后的收信号码 + “000800” + 格式化后的发送内容
    11000D91 >>>> 11000D91683104011415F60008000A62117231542C8BC44E66
5 - 计算上面那一大字符串的长度除于2,10进制表示。
    11000D91683104011415F6008000A62117231542C8BC44E66长50 50/2=25

嗯,咱再看看手里都有啥了~
    格式化后的短信中心:0891683108100005F0
    实际的发送内容:11000D91683104011415F60008000A62117231542C8BC44E66
    发送内容的长度:25
都准备好了我们可以发短信了 ^_^

最后一步——通过AT命令发送PDU短信

    AT+CMGF=0 <Enter> (告诉它你要发的是PDU类的短信)
    OK (这是它返回的它说:“我已经准备好了”)
    AT+CMGS=25 <Enter> (告诉它你要发的实际长度)
    >0891683108100005F011000D91683104011415F60008000A62117231542C8BC44E66 <Ctrl+Z> (看到它返回“>” 在后面输入格式化的短信中心+实际的发送内容最后按Ctrl+Z发送)

如果最后返回不是“ERROR”,那就是发送成功咯~!

三、拨打电话

1、AT命令打电话,注意在拨的号码后面有个分号;

atd10086;

OK

2、如果有电话到来时,则是串口上将收到RING字符串,这时我们可以使用ATA命令摘机,如果不想接听,可以使用ATH挂断;

 但是我没有接到RING。

四、AT常用命令

at

OK

1,  查模块制造商:

at+cgmi
ZTE INCORPORATED

OK

2,  查GPRS模块型号:

at+cgmm
MF626

OK

3,  查模块版本:

at+cgmr
BD_TMOP673M3V1.0.1B07

OK

4,  查SIM卡是否在位:

at+cpin?
+CPIN: READY

OK

5,查GPRS模块信号强度,其中”,”前的数字为信号强度,如下面示例中的12为信号强度。

at+csq
+CSQ: 12,99

OK

若信号强度为99,则无效。我这里信号强度一般在20左右。

6,查SIM卡是否注册上网络,其中”,”后的值为SIM卡的注册状态,如下面示例中的1.

OK
at+creg?
+CREG: 0,5

OK

如果状态值为0,表示未注册;如果为1表示本地号码注册上;如果为2,表示正在搜索运营商注册,但没注册上;3表示拒绝注册;4,未知状态; 5, 漫游号码注册上。

 

7,查SIM卡运营商,如下面显示的”CHN-CUGSM”为中国联通的号码:

at+cops?
+COPS: 0,0,"China Mobile Communication Corp.",0

OK

在UC864E模块上,使用AT+COPS?查询,则联通的号码将显示为”cmnet”,但在GTM900B/C, SIM5215上显示的是”CHN-CUGSM”. 中国移动的则为”China Mobile”,在现实的时候也有一些区别,例如在UC864E上中国移动显示为” China Mobile”,当中只有一个空格;而在GTM900B上则显示” China   Mobile”,当中有两个空格。但是这上面是China Mobile Communication Corp.

8,短信相关命令:

设置短信格式为Text模式:

AT+CMGF=1  

OK

 

设置短信格式为PDU模式:

AT+CMGF=0

OK