GSM MODEN短信发送模块详解(短信的读取、发送过程和编码、解码过程)

GSM模块,顾名思义就是用来与手机进行点对点发送短信(文字、图片以及各种数据),需要将手机卡插入模块中,再用串口线与PC机相连(嵌入式方面,与单片机或者ARM相连)。

GSM短信编码。一种是文本模式(text模式),另一种是PDU模式;

(1)文本模式,发送的数据只能是ASCII码,即普通字母和其他符号,国内不支持中文发送。通过串口通信发送"AT+CMGF=1",将GSM短信发送方式更改为文本模式。文本模式下接收的数据会自动解码,比如你收到一条短信息,GSM会返回:+CMGR: "REC UNREAD","+8613806XXXXXX",,"11/10/21,13:22:13+32"
hello;不需要自己解码,便可得到短信的发送者、发送时间和短信内容

(2)PDU模式,短信编码方式包括三种,即7-bit 编码、8-bit 编码和UCS2 编码。

 

PDU接收串(接收到信息的字符串)的编制原理:

08//SMSC地址信息的长度共8 个八位字节(包括91)

91//国际号码格式即"+"

683108505905F0//服务号码,即8613800595500
04 //基本参数发送
0D //13个发送号码的信息长度
91//国际号码格式即"+"

683151558321F5 //发送者的号码,即8613155538125
00  //协议标识
08  //编码方式,08--USC2,00--7-bit

01704271612023  //接收时间戳,即2010-07-24/17:16:02
04 //10进制的位数转化为16进制数
64E64F60//消息内容编码

 

PDU发送串(发送信息的字符串)的编制原理:

00//服务号码信息长度为0

11//没有多余信息的发送,即不包括服务号码信息

00//消息基准值(TP-MR) 0

0D//13个发送号码的信息长度

91//国际号码格式即"+"

683151558321F5//发送者的号码,即8613155538125

00//协议标识是普通GSM 类型,点到点方式

08//编码方式,08--USC2,00--7-bit

00//有效期

06//信息长度

4F60597D0021//信息内容,USC2编码

    (a)、7-bit 编码用于发送和接收ASCII编码(普通的字母和其他符号),当你收到的短信都是ASCII时,这时你的编码方式就是7-bit编码。

7-bit编码方式:就是将上面表中的源串转为目标十六进制。  

源串	H	e	l	l	o	!
源十六进制	0x48	0x65	0x6c	0x6c	0x6f	0x21
源二进制	1001000	1100101	1101100	1101100	1101111	100001
编码过程	不足位时,由下一位的末尾数字补足
目标二进制	11001000	00110010	10011011	11111101	00001110	01
目标十六进制0xc8	0x32	0x9B	0xFD	0x0E	0x01
目标串	C8       32       9B       FD        0E       01

7-bit解码方式:就是将上面表中的目标十六进制转为源串。

    (b)、8-bit编码用于发送和接收数据消息,如图片或铃声等,普通的短信不回用到;

    (c)、UCS2编码用于发送和接收Unicode字符,即含有中文的信息;

            接收

UCS2编码方式

1、将字符串转为unicode编码

2、将unicode编码转为UCS2编码。首先我们知道UCS2编码是将单个字符转化为16位的宽字符,即由这个字符的unicode转化为十六进制,高二位补0(注意:字符串的长度为2位的16进制数,PDU模式中字符串长度为原始消息的2倍,我要发的消息UCS2编码的头两位位字符串的长度)。

 

上面的内容为GSM模块接收信息的发送信息的处理,我们要怎么接收和发送信息呢?

我们需要用AT指令来操作。关于AT指令的介绍,这里不多加描述。

 

查看GSM是否连接正常:

             AT

            返回OK

 

设置短息存储以及提醒:

             "AT+CNMI=2,1,0,0,1\r\n";

             //2: 通知TE。在数据线被占用的情况下,先缓冲起来,待数据线空闲,再行通知。

             //1:储存到默认的内存位置,并且向TE发出通知(包括class3)

 

设置回显:

              ATE0 //不可回显

              ATE1 //可回显

 

选择发送消息的格式:

              AT+CMGF=0//PDU

              AT+CMGF=1//TEXT

 

发送信息:

PDU模式:

               AT+CMGS=21 ,(pdu约定固定长度15+发送的报文的长度(16进制数))
              >0011000D91683169512363F1000800064F60597D0021//末尾加0x1a

TEXT模式:

              AT+CMGS="号码"

              >内容//末尾加0x1a

 

查看短信

             AT+CMGR=index //短信存储的索引号

删除短信

             AT+CMGD=index

 

GSM模块的知识就讲到这里,欢迎评价指出不足的地方

转载请注明本文章地址:

http://blog.csdn.net/hsl17/article/details/6895100

 

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
本程序参考网上某个例程编写而成,已完成发送短信功能。GSM模块为wavecom moden。先点击获取SIM卡信息按钮获取短信中心号码,然后输入手机号,短信内容发送短信。希望对同样初次接触GSM模块的兄弟们有帮助。 以下是本程序开发纪录(包括程序都写得比较不规范,请见谅!) 7.14----------------------------------------------- 开始着手GSM模块的学习和编程。弄了一天的时间,以为是win7下的超级终端有错误,后来才发现是我把波特率弄错了,这个wave moden的默认波特率是115200,而我却设成了一般情况下的9600。这是一个很大的教训,欲速则不达。 7.15----------------------------------------------- 自己用C#编了个简单的GSM与上位机连通判断的模块,目标是从串口发送“AT”给GSM模块GSM模块能够返回与超级终端上返回得到的信息一致(即AT\n OK)。不过没有完成预期的目标,查阅了一些资料发现有可能出现的错误是发送的AT指令编码没编好。 7.16----------------------------------------------- 实现了GSM模块与上位机的连通。比如,从C#界面发送“AT”,能够从串口读取GSM模块返回的“AT\n OK”信息,其他AT指令亦能实现。 发现了一个小BUG,如果GSM模块上电后即在VS2008上调试,则程序能够顺利运行;但如果上电后在超级终端调试过后,再在VS2008上调试,则不能从C#的小程序上获取GSM模块返回的信息。 实现了GSM模块发送短信的功能。可以发送中文\英文短信。在此过程中出现了一个低级失误,没把生成的短信中心号码“+8613000……”前的“+”去掉,导致生成的PDU编码有误,发送失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厦门Linux嵌入式+Qt开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值