SIM900发送长中文短信和英文短信

SIM900发送长中文短信和英文短信

这是一篇介绍SIM900发送长中文短信和英文短信的文章。由于gsm03.40中的术语很难懂,还不如用实例来解释其用法更有利于理解。

Short Messaging Service 简称SMS,短信是最早的短消息业务,也是普及率最高的一种短消息业务,最长可以发送160个字符。也就是说,用户每次能发送或接收短信的字符数为160个英文或数字字符,或者是70个中文字符。对于长文本的发送,有些短信业务平台支持发送长短信,用户侧最终会收到一条长短信,但业务统计和计费会按照长短信拆分后的短信条数进行。

一、发送英文短信

AT  //发送AT,返回OK表示单片机可以和模块执行AT命令操作

OK

AT+CMGF=1   //设置为Text模式

AT+CMGS=\"1366265ABCD\"  //发送接收短信的手机号码,然后等待出现“>”

> TEST\x1A         //\x表示后面的1A需要转为转意字符“Ctrl+z”

注意:所有短息的内容,均以“Ctrl+z”结束。

顺便讲一下转义字符:

二、发送中文短信

AT  //发送AT,返回OK表示单片机可以和模块执行AT命令操作

OK

AT+CMGF=0  //设置为PDU模式,可以发送中文短信

AT+CMGS=017  //发送“PDU编码的长度”,三位十进制字符串表示

>0891683108501505F011000D91688152963059F8000800020033

+CMGS: 55

OK

PDU编码的内容:

11000D91688152963059F8000800020033”的长度为34,34/2=17,用三位十进制字符串表示就是“017”,这就是“PDU编码的长度”;

三、编辑普通中文短信

通过对编辑好的中文短信进行分析,我们可以解如何编辑中文短信。已知单一中文短信的内容如下:

0891683108501505F011000D9168316662A5CBFD000801020033

编辑后的短信是由“SCA部分 + PDU编码的内容”组成。

1、SCA部分:“0891683108501505F0

1)、字符长度

在“0891683108501505F0”中,去掉第1个“08”外,还有16个字符,这个“08”就是由16/2=8得到的,用两个字符表示就是“08”,表示后面的字符长度。

2) 国际号码91

字符长度“08”后面紧跟着的是“91,表示发送设备为“手机”;

3)、服务中心号码

在“0891”后面,就是服务中心号码“8613800551500”;

8613800551500”是怎么来的?我们将“683108501505F0”相邻两个字符交换得到“8613800551500F”,去掉“F”后就是“8613800551500”,这个“F”是用来凑数,让它们构成偶数个,这就是“8613800551500”尾部出现一个“F”字符的原因。

服务中心号码是怎么来的?要到电信部门去查吗?显然不需要。因为手机在上电初始化成功后,基站会告诉手机当前的手机号码所需要的“服务中心号码”。

短信中心号码可以使用AT+CSCA?获取。

在获取之前,最好将设置使用GSM字符:

AT+CSCS="GSM"        

OK          

 

AT+CSCA?

+CSCA: "+8613800551500",145

 

OK

这样一来,我就得到短信中心号码“+8613800551500”。去掉“+”后为“8613800551500”。以前的老手机,需要设置“服务中心号码”。有经验的人,一看“0551”就是知道合肥的,同理“0755”是深圳的。

4)、“+861380”

中国移动信息中心号码是以短消息中心号码以+861380开头,紧接的4位数号码是所在的地区码。

2PDU编码的内容:11000D9168316662A5CBFD000801020033

1)、“1100”的意思

“11”表示正常发送短信,“00”表示点到点的标准短信;

若是“5100”表示发送“带有报头的短信”;

2)、“0D9168316662A5CBFD”的意思

①、字符长度

这里接收短信的手机号码为“+861366265ABCD”。 去掉“+”后为“861366265ABCD”,记住手机长度为13,不算“+”号,用两位16进制字符串表示就是“0D”,若“861366265ABCD”的数据长度为奇数,则在末尾添加“F”。由于接收短信的手机号码“861366265ABCD”的数据长度是13,为了使字符数量变成偶数,所以要添加字符“F”,就变为“861366265ABCDF”,相邻两位交换后就是“68316662A5CBFD”。反推,就是“861366265ABCDF”。

②、国际号码91

字符长度“0D”后面紧跟着的是“91,这里表示接收设备为“手机”;若是小灵通手机,则用“81”表示。

③、TP-PID信息码:“000801

00普通GSM类型,点到点方式,TP-DCS

08是UCS2编码

01是时间戳,从00开始,00表示第1条短信,01表示第2条短信,等等;

④、分析“020033

02 是(TP-UDL)用户信息长度,是后面所有数据的总和除以2得到的,

4 / 2 = 2 = 0x02用两位16进制字符串表示就是“02

0033是中文短信内容“1”;

⑤、计算“PDU编码的长度”

PDU编码的内容为11000D91688152963059F8000801020033”,长度为34,所以34/2=17,用三位十进制字符串表示就是“017”,这就是“PDU编码的长度”,我们在执行“AT+CMGS”时要用到。

四、编辑长中文短信

所谓超长短信,就是将多个“数据报文”进行拼接。我们先了解2个“数据报文”是如何拼接成长短信的。

下面的短信分为两个包发送,如下:

AT+CMGS=023

>0891683108501505F051000D91688152963059F800080108050003FC02010031

+CMGS: 59

OK

AT+CMGS=023

>0891683108501505F051000D91688152963059F800080108050003FC02020032

+CMGS: 60

OK

虽然每条短信的内容很短,但要按照两条短信收费,第1条短信内容是"1",第2条短信内容是"2",手机会收到后,会自动进行拼接成一条短信,其内容为:"12"。

0891683108501505F0”和“0D91688152963059F8”是什么意思,在编辑单一PDU短信中,已经做了介绍。

这里用到了“5100”表示发送“带有报头的短信”;

其次是“000801”,00普通GSM类型,点到点方式,TP-DCS,08是UCS2编码,01是时间戳,从00开始,00表示第1条短信,01表示第2条短信;

在“000801”后面跟的是(TP-UDL)用户信息“08050003FC02010031”和“08050003FC02020032”,这个和单一PDU短信不太一样。

那么用户信息“08050003FC02010031”和“08050003FC02020032”是什么意思呢?

08:它是(TP-UDL)用户信息长度,是后面所有数据的总和除以2得到的,16/2=8=0x08用两位16进制字符串表示就是“08”;

05:协议头的长度

00:标志这是个分拆短信

03:分拆数据元素的长度

FC:用于把两条短信合并,可以23或FC

0201:一共有两条“数据报文”,这是第1条;

0202:一共有两条“数据报文”,这是第2条;

0031”和“0032:这才是真正的短信内容;

通过分析,和单一短信有点相似,但是解析协议不同。

五、长短信举例

下面是编辑好的长短信,内容如下:

长短信的第一条:

0891683108100005F051000D91683118216553F60008018C0500032302014E8C96F64E005B9A4F1A597D597D597D768465F665F665F695F44E0D597D597D597D768460254F1A4E8654754F604E5F4E0D898157284E006B21751F76EE8FDB665A70B954275417662F4E004E2A4E1C5F20897F62114E0D662F62117231597D4E86541754758BBE7F6E597D597D554A51765B83662F554A5475547554754F607684547562A4

分析“0891683108100005F0是SMSC地址,

91683108100005F0的长度为16/2=0x08;

683108100005F0的意思是服务中心号码8613800100005;

91是指国际的号码

51是有报头短信,04表示正常收到,11表示正常发送,别人放的是51

00表示点到点的标准短信

0D91683118216553F6是回复地址, 683118216553F6去掉F后的长度为13=0x0D,其中683118216553F6的意思是是电话号码8613811256356, 91是指国际的号码

0008分析:TP-PID,00普通GSM类型,点到点方式,TP-DCS,08是UCS2编码

01时间戳,别人放的是01

8C 是(TP-UDL)用户信息长度,是后面所有数据的总和除以2得到的(12+268)/2=140=0x8C

05 协议头的长度

00 标志这是个分拆短信

03 分拆数据元素的长度

23 唯一标志(用于把两条短信合并),或FC

02 一共两条

01指示本条短信是第一条

4E8C96F64E005B9A4F1A597D597D597D768465F665F665F695F44E0D597D597D597D768460254F1A4E8654754F604E5F4E0D898157284E006B21751F76EE8FDB665A70B954275417662F4E004E2A4E1C5F20897F62114E0D662F62117231597D4E86541754758BBE7F6E597D597D554A51765B83662F554A5475547554754F607684547562A4这是数据内容,其长度是268

长短信的第二条:

0891683108100005F051000D91683118216553F60008012605000323020281EA4ECE524D5C3177617740542754755475007A007A006C0076006C006F007A

0891683108100005F0是SMSC地址,91683108100005F0的长度为16/2=0x08,其中683108100005F0的意思是是服务中心号码8613800100005的意思,91是指国际的号码

51是有报头短信,04表示正常收到,11表示正常发送

00表示点到点的标准短信

0D91683118216553F6是回复地址, 683118216553F6去掉F后的长度为13=0x0D,其中683118216553F6的意思是是电话号码8613811256356, 91是指国际的号码

0008分析:TP-PID,00普通GSM类型,点到点方式,TP-DCS,08是UCS2编码

01时间戳,别人放的是01

26 是(TP-UDL)用户信息长度,是后面所有数据的总和除以2得到的(12+64)/2=38=0x26

05 协议头的长度

00 标志这是个分拆短信

03 分拆数据元素的长度

23唯一标志(用于把两条短信合并),或FC

02 一共两条

02 这是第二条

81EA4ECE524D5C3177617740542754755475007A007A006C0076006C006F007A这是数据内容,其长度是64

如何确定AT+CMGS=长度?

51000D91683118216553F60008012605000323020281EA4ECE524D5C3177617740542754755475007A007A006C0076006C006F007A的长度是106/2=53

AT+CMGS=长度,这个长度不包括SCA部分,就是53

六、中文短信发送综合举例:

1、不超过一包的中文短信发送如下:

AT+CMGS=017

>0891683108501505F011000D91688152963059F8000800020033

+CMGS: 55

OK

2、下面的短信分为两个包发送,如下:

AT+CMGS=023

>0891683108501505F051000D91688152963059F800080108050003FC02010031

+CMGS: 59

OK

AT+CMGS=023

>0891683108501505F051000D91688152963059F800080108050003FC02020032

+CMGS: 60

OK

按照两条短信收费,第1条短信内容是"1",第2条短信内容是"2",手机会收到一条合并后的短信,其内容为:"12"

AT+CMGS=023

>0891683108501505F051000D91688152963059F8000801080500032302010031

+CMGS: 61

OK

AT+CMGS=023

>0891683108501505F051000D91688152963059F8000801080500032302020032

+CMGS: 62

OK

七、接收到的中文短信 

在中文模式下接收到的中文如下:

接收到短信提示:\r\n +CMTI:"SM",2\r\n

AT+CMGR=2\r

\r\n +CMGR: 0,"",52\r\n0891683108707515F0240D91688186418379F20008416042712393232000280047003100320033003400350036003700380039003B003000314F600029\r\n

91683108707515F0的长度是16/2=0x08

688186418379F2去掉F的长度是13=0x0D

000841604271239323是固定长度18/2=9

240D91688186418379F20008416042712393232000280047003100320033003400350036003700380039003B003000314F600029的长度是104/2=0x52

41604271239323表示时间14/06/24,17:32:39+32

00280047003100320033003400350036003700380039003B003000314F600029的长度为64,64/2=0x20,内容为(G123456789;01你)

240D91688186418379F2表示发送短信的手机号码为:8618681438972, 688186418379F2的长度是13=0x0D;

0891683108707515F0表示短信息中心号码为:8613800757510,其中08是长度,91为类型,91683108707515F0的长度是16,16/2=0x08;

八、应用

在没有服务器的情况下,使用短信通讯,可以降低服务器的租赁费用。在一些防盗系统,液位控制系统,和台风预警系统中,短信报警,还是比较实惠的。

下图是我以前设计的一款产品,显示已经不合时宜了。但每每回想过去,激情总会涌上心头。年过五十不年轻,独来独往不合群。吾非生来性孤僻,厌倦江湖套路深。创业太难了!

至此,中文短信和英文短信编辑和发送介绍完了。

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值