【GSM】GTM900C的应用——短信
前言
GSM因其低廉的价格,非常适合一些需要小数据上网传输和短信等功能的应用场合。本文使用的华为GTM900C模块。
GTM900C发送短信,支持两种模式,TXT和PDU。TXT模式指令简单,操作方便,但不支持中文,如果发送短信内容仅是数字和字母,可以使用TXT模式。PDU模式最通用,因为能发送所有的世界上所有国家的字符,但操作稍微有些复杂。
本文介绍了成功发送一条短信需要的步骤,步骤详解,附录是function的源码。
参考
网友博客。
注意
1、AT指令均以回车换行结尾。所以发送AT指令时,后面必须加\r\n,接收到的应答指令末端\r\n。
2、模块反应有延时,需要等待应答。
成功发送一条短信需要以下步骤
- 初始化模块:上电、测试串口、关闭回显、测试SIM卡、测试信号质量
- 短信编码:倒序目标手机号码、倒序源手机号码、倒序短信中心号码、转换短信内容、统计短信内容长度、封装短信数组
- 发送指令:设置模式、发送短信长度、发送PDU数据
以上步骤可以增删改,但建议使用以上推荐,保证稳定性。
实现方法
1、初始化模块
步骤1:上电
说明:模块上电后,自我初始化成功,会通过串口输出AT-Command Interpreter ready
步骤2:测试串口
说明:串口通信不成功,主控模块应做处理(例如:声光报警)。
发送指令:AT
应答指令:AT
OK
步骤3:关闭回显
说明:回显,表示上位机发一条指令,模块原路返回此指令。上一步串口通信成功后,因为指令不管正常或异常,模块都有应答,就不再需要回显。
发送指令:ATE
应答指令:OK
步骤4:测试SIM卡
说明:SIM不存在,应做处理(例如:声光报警)。
发送指令:AT%TSIM
应答指令:%TSIM 1
OK
步骤5:测试信号质量
说明:质量太差,应做处理(例如:声光报警)。
发送指令:AT+CSQ
应答指令:+CSQ:20,99
OK
2、短信编码
短信编码就是按照固定的协议,把用户短消息内容加上各种协议内的配置参数,封装成一条可以传输、解析的数据流。具体编码函数可以拿来主义,验证下即可,不要重复造轮子。
举个例子:一条完整的PDU编码后的短信如下:
0891683108200505F011000D91683196032930F000000006C8329BFD0E01
08,91,68 31 08 20 05 05 F0,11 00 0D ,91 ,68 31 96 03 29 30 F0 ,00 00 00 06 C8 32 9B FD 0E 01 //(加逗号间隔开,方便查看)
其中,此PDU编码结构如下:
08:短信中心号码长度(+8613800250500转换成91683108200505F0,一共8个字节)。
91:国际格式(号码前的符号“+”)。
682108200505F0:短信中心号码(8613800250500,规律:末尾补F,每两位内翻转)
11:固定,基本参数。
00:固定,消息基准值。
0D:目标号码数字个数(不包含“+”和“F”),有可能此值为0B(目标号码格式就不带86)。
91:国际格式(号码前的符号“+”),81是小灵通。很奇怪的事,使用81能成功发送短信,也能正确接收,但使用91能成功发送,但接收不到。
683196032930F0:目的手机号码(8613693092030)
00:固定,协议标识。
00:编码模式,00-7bit,04-8bit,08-USC2。
00:00-有效时长5分钟。
06:用户信息长度,不同编码下,用户数据长度(字节)不同。
C8329BFD0E01:用户信息内容。
3、发送
步骤1:设置PDU模式
发送指令:AT+CMGF=0
应答指令:OK
步骤2:发送PDU编码长度
说明:PDU编码长度是源手机号码之后的字节数。
发送指令:AT+CMGS=16
接收指令:>
步骤3:发送1A
说明:发送1A(Hex)后,有应答,此时才发送成功。
发送指令:1A
应答指令:+CMGS: 35
OK
-------------------------------------------------
附录
/* 名称:ChrToHex 功能:转换字符 形参:源数据首地址,源数据长度 返回值:数据长度 作者:wangshiquan 日期:2017-11-28 */ int ChrToHex(*Str,unsigned int Len) { }