注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

单眼皮男生

成长心路

 
 
 

日志

 
 
关于我

诚实开朗。

网易考拉推荐

at指令下收发短信(PDU & TXT)AT指令发送PDU短信详解  

2012-10-17 16:23:29|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转载一个技术贴 留着以后用

☆★☆ AT指令发送PDU短信详解(支持发送到小灵通) ☆★☆
为了完成公司的短信收发程序,我找遍了所有资料,最后在很多网友的支持下
基本上完成了这个程序,为了使后来的人免走我同样的弯路,我将AT指令发送PDU
短信的全过程及函数整理出来,希望能给大家帮助,欢迎大家与我一起探讨:
本文以一个实例来解说AT指令发送PDU短信的全过程,假如我要发送下面的短信:
接收号码:+8613602433649
短信内容:工作愉快!
短信中心号码:+8613800200500

一、短信中心号码处理:用字符串 addr 表示
   1、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
   即 addr = "+8613800200500"
    => addr = "8613800200500F"
   2、将奇数位和偶数位交换。
    => addr = "683108020005F0"
   3、将短信息中心号码前面加上字符91,91是国际化的意思
    => addr = "91683108020005F0"
   4、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => "08"
    => addr = "0891683108020005F0"
二、手机号码处理:用字符串 phone
   1、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F
   即 phone = "+8613602433649"
    => phone = "8613602433649F"
   2、将手机号码奇数位和偶数位交换。
    => phone = "683106423346F9"
三、短信息部分处理:用字符串 msg 表示
   1、转字符串转换为Unicode代码,例如“工作愉快!”的unicode代码为 5DE54F5C61095FEBFF01,
    (转换函数见最后附录)
   2、将 msg 长度除2,保留两位16进制数,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
    => msg = "0A5DE54F5C61095FEBFF01"

四、组合
   1、手机号码前加上字符串 11000D91(1100:固定,0D:手机号码的长度,不算+号,十六进制表示,91:发送到手机为91,发送到小灵通为81),
   即 phone = "11000D91" + phone
    => 11000D91683106423346F9
   2、手机号码后加上 000800 和刚才的短信息内容,000800也写死就可以了
   即 phone = phone + "000800" + msg
   即 11000D91683106423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
    => phone = 11000D91683106423346F90008000A5DE54F5C61095FEBFF01
   3、phone 长度除以2,格式化成2位的十进制数
   即 11000D91683106423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25

五、所以要发送的内容为
AT+CMGF=0 <回车>
OK
AT+CMGS=25<回车>
> addr+phone <Ctrl+Z发送>
六、如果返回不是ERROR,恭喜你,发送成功了^_^


AT指令发送短信(TXT模式)

怎样给我发送一条短消息?
现在你手里有了G网模块,但首先你要确保如下操作已经完成:
1)    模块上电并且AT命令同你的PC串口通信顺畅。
2)     SIM卡没有欠费,并且已经登陆GSM网络(可以使用AT+CREG?查询,如果返回1或者5表示正常)。
3)      AT+CMGF=1设置完毕。

有了以上的过程,那么你就可以给我发信息了,你要使用的AT命令是:AT+CMGS。
假如我的手机号是:13636371111(后四位是假的)。

1)    从串口输入:AT+CMGS=” 然后按回车键。
2)    这个时候你可以看到有个大于号 ‘>’弹出,提示你可以输入消息的内容了。

假如你想发送“hello world”,直接在’>’后面输入即可,输入完了后按’CTRL^Z”,稍微等一下,你的信息也就发出去了,如果编程好像是0x1B(记不清了,你可以查下ASCII表)。
全部过程如下:
AT+CMGS="13636371111"
> hello world
+CMGS: 199

OK
你需要一直等到OK返回,才能确定是成功发出,中间的那个东西可以先不管。如果你输入 “ hello world”后,但又不想发了,按ESC可以取消发送,就不再介绍。

 


收到短信

+CMTI:”SM”,1                    收到短信后,提示终端接收(存储到SIM卡中,序号为1)

 

+CMT:,25                        短信直接传输到串口(PDU)。

0891683108304745F5…………..

 

TXT短信格式:

+CMGR: “REC UNREAD”,”8613203718355”,,”09/04/16,11:46:52+32”,145,36,0,0,”8613800374549”,145,9

123456789

  评论这张
 
阅读(147)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018