这些天玩了一下SIM300C的短信功能,感觉还是有点意思,呵呵!经过几个昼夜的把玩终于搞定了,收到了发到自己手机上的短信,感觉还是很好的,在这里将整个过程整理一下。
短信分为TEXT模式和PDU模式,前者只能发送字符和英文,比较简单所以就不在多写。重点看看后者是如何发送中文短信的。发送短信需要两个AT指令:1. at+cmgf=0(0为PDU格式);2:AT+CMGS=**这里是短信的(所有的字节长度-18)/2,之后模块返回>符号,就可以输入短信的编码了!
下面就重点说一下短信的编码:
1. 所有编码是以字符的方式发送的,例如:
>0011 000D 9168 3107 0482 06F0 0004 0103 4141 41<^Z>
00:SMSC地址信息的长度;即中心号码长度,00代表为空.
11:基本参数(TP-MTI/VFP);
00:消息基准值(TP-MR);//信息类型(TP-Message-Reference)
0D:目标地址数字个数;
91:目标地址格式(TON/NPI);
68 3107 0482 06F0:目标地址(TP-DA);
00:协议标识(TP-PID);TP-Protocol-Identifier
04:用户信息编码方式(TP-DCS);TP-Da
01:有效期(TP-VP);TP-Valid-Period
03:用户信息长度(TP-UDL);(此处的长度为16进制)
4141 41:用户信息(TP-UD);//其内容是三个大写AAA
说明:18是PDU长度 17 + 1
第一,对模块写入 AT+CMGF=0<回车> 的AT命令(<回车> 要用 \r 来实现),之后应该得到一个 OK 响应,才能继续进行下一步;
第二,对模块写入 AT+CMGS=<length><回车> 的AT命令(其中 <length> 是一个数字,该数字是代表了PDU串中某一部分的长度,这一部分就是指除了SMSC地址之外的那一部分),之后应该得到一个 \r\n> \r\n 响应(特别要注意:\r是回车,\n是换行,>是一个大于号,>后面还有一个空格!),才能继续进行下一步;
第三,可以开始写入要发送的内容了。这一部分只是PDU串中的一部分,并不是完整的PDU串(如前所述,去掉了SMSC地址那一部分),这一部分要以 Ctrl+Z 结尾,但是我们要知道,在字符串中要带上 Ctrl+Z 的话,必须是用ACSII码。Ctrl+Z的ASCII码是16进制的 1A ,所以你可以在你的字符串后面用strcat函数附加上 "\x1A " 来实现。
这样之后,如果发送成功,你就会收到GSM模块的一个发送成功的响应,形如:
+CMGS: 246
OK