GPRS串口拨打电话及发短信

时间:2022-11-10 07:34:46

非学无以广才,非志无以成学。——诸葛亮

前面了解了DB9的每针的作用,现在就用它来连接我们的电脑和GPRS模块,玩一些打电话,发短信的功能。

关于硬件设备

GPRS串口拨打电话及发短信

GPRS串口拨打电话及发短信

    我们的GPRS/GPS为安可信的A7模块,我们只需要用杜邦线将串口线和GPRS的RXD(收)和TXD(发)以及GND(地)三跟针相连接即可,这里串口的RXD接GPRS的TXD,地和地相接,串口的TXD和GPRS的RXD相接,注意两边设备的模式要相同,将其调至TTL。

然后将天线接上我们的GPRS,串口线的另一端接上电脑,再打开我们的串口调试工具便可以玩了。

AT指令集

AT指令集是基本的串口调试命令,打开GPRS电源,打开我们的串口调试工具,将串口的波特率设为115200,选好串口,停止位和数据位(这里一般默认),就可以输入我们的指令了。

首先我们得测试AT指令是否有用,有用则返回OK
AT 记得在后面加回车

然后可以进行以下一系列的针对拨打电话命令操作:

指令 功能 返回
AT+CREG? 测试网络 OK
AT+CPIN? 测试SIM卡是否准备好 OK
AT+CCID 测试SIM卡ID 返回ID
AT+CSQ 测试信号强度 返回信号强度值
AT+COPS? 查看运营商 返回运营商数字代号
AT+COPS=0,0 修改运营商显示为英文 OK
AT+COPS? 再次查看运营商 返回运营商英文名称
ATD号码; 拨打电话,记得加封号 拨打成功返回OK call 1
AT+ECSQ=1 通话时主动上报信号质量 OK
ATA 应答 CONNECT
AT+CLCC 来电显示 当RING时显示对方号码
AT+CRC=1 扩展格式启用 CRING:voice
AT+ATH 挂断电话 call 0
AT+SNFS=0 耳机输出 OK
AT+SNFS=1 喇叭输出 OK
AT+DLST 重拨最后通话 OK,call 1
AT+CREG=2 定位基站 OK
AT+CREG? 显示定位的基站信息 +CREG:2,1,”1877”,”0002” OK

收发短信指令

短信分为两种模式,一种为文本格式,即英文。另一种为PDU格式,即中文格式。

读取短信:

AT+CMGF=1 设置TXET MODE OK
AT+CSDH=1 显示文本格式 OK
AT+CNMI=0,2,0,0,0 显示新收到的短信 返回短信内容
AT+CMGL=”ALL” 列举当前存储中所有短信 返回短信内容

发送英文短信:

AT+CMGF=1      设置TEXT MODE
AT+CSCS="GSM"
AT+CMGS="号码" 目的手机号
然后他会出现一个“>”,此时我们输入我们的短信内容
最后以十六进制格式发送1A,这里是指Ctrl+z的码值。

发送中文短信:

AT+CMGF=0    设置PDU格式
AT+CSCS="GSM"
AT+CMGS=xx
>
PDU代码
1A

中文短信和英文就差一个格式的设置以及一个运算的方式,下面具体说一说PDU格式的代码是怎么计算来的。

我们以一个实例说明:

本机号码:+8613258745112
对方号码:+8615421588874
短信内容:大爷来玩呀!

  1. 本机号码的处理

    将+号去掉,在号码最后加一个F,然后将奇数位与偶数位交换,最后再号码前面加一个91,这是国际化的意思,然后得到:
    91683152785411F2
    最后用上面字符串的长度除以2,将结果化为两位的16进制数:
    My:0891683152785411F2

  2. 对方号码的处理

    将+号去掉,最后添加F,奇数位和偶数位交换:
    OR:685124518878F4

  3. 短信内容的处理

    将短信内容转换为Unicode代码,“大爷来玩呀”:59277237676573a95440ff01
    转换网址:http://www.cnblogs.com/mq0036/p/4007452.html
    将其长度除以2,保留两位16进制数,加在最前面:
    MGS:0C59277237676573a95440ff01
    这里注意,大小写是不区分的

  4. 组合起来:

    在对方号码前加上“11000D91”,这里是固定模式,0D是手机号码长度,目前是11位,前面加个86,即13位,再在手机号码后面加上
    0008AA,这是固定的,所以
    OR=11000D91685124518878F40008AA
    最后结果为My+OR+MSG:
    0891683152785411F211000D91685124518878F40008AA0C59277237676573a95440ff01

现在再计算AT+CMGS的值:用最后结果的长度除以2即可得到。72/2=36

最后发送的过程:

AT+CMGF=0
OK
AT+CMGS=36
>
0891683152785411F211000D91685124518878F40008AA0C59277237676573a95440ff01
最后加上1A发送即可,1A位十六进制

在SecureCRT里可用Ctrl+Z发送,收到OK后,手机即可收到中文短信。
最后这些指令最后都得加上一个回车哦。

最后,AT指令集针对于打电话和发短信还有很多很多功能,这里不一一说明了,有兴趣的朋友可以自己百度学习。