GSM模块实现中文短信息发送

GSM模块支持两种方式来发送和接收SMS短信息,文本模式和PDU(Protocol Description Unit)模式,文本模式只能发送普通的Ascill字符,要发送图片,铃声,其它编码的字符(如中文)就必须采用PDU模式。

    PDU模式中,可以采用三种编码方式来编码要发送的 内容 ,分别是7bit编码,8bit编码,16bit编码,7bit编码用于发送普通的Ascill字符,8bit编码通常用于发送数据信息,如图片和铃声, 而16bit编码用于发送Unicode字符。三种编码可以发送的最大字符分别是160,140,70。
发送中文短信要采用PDU模式的Unicode编码方式,具体步骤描述如下:
    (1)GB2321编码到Unicode编码的转换。
    ● 操作系统提供函数(有些系统不提供,如deltaos)。
    ● 手动查表。
    (2)Unicode编码到16bit编码的转换。
    ● 得到的Unicode编码后,还需要转换成PDU的16bit编码才可以正确的发送。
    ●这个转换过程中Unicode编码最开始的0xffff标志要去掉,在0xffff之后的内容才是真正的Unicode字符。
    ● Unicode是双字节,根据系统如果是小端字节序(little-endian),也就是说,存储的时候,先存低位再存高位,例如:“中”的 Unicode编码是0x4E2D,储存的时候是2D4E,在转换到16bit编码的时候要转换顺序,如果是大端字节序(big-endian)如本系 统,就不需要转换了。
    ● 正确 计算 16bit编码的消息体长度,PDU规范中,包括消息体本身。
    ● 正确设置TYPE,TP-MR,TP-PID,TP-VP,在下文PDU格式中,依次设置为:11,00,00,08,01(以上都为16进制数)。
    (3)形成标准的发送包。

 短信发送过程 分析

    处理器通过向串口发送接收AT命令与GSM模块形成通信回路,通过AT命令实现对GSM模块的基本操作,用于发送短信的AT命令如表1所示。
    发送短信可用文本模式和协议数据单元模式(PDU,protocol data unit)。大多手机不支持文本模式,只支持PDU模式。PDU模式是把短信正文经十六进制编码后被传送,其编码总体上分为三个部分:服务中心号、接收方 手机号、短信内容,如“你好”短信PDU编码是这样的(其中xyz是手机号具体数字): 0011000B8131258698yxFz000801044F60597D,其意义如表2所示。

 

表1 发送短信使用的AT命令
AT命令
功能
例子
AT+CMGF
设置短信的格式,0=PDU模式(默认),1=文本模式
AT+CMGF=0
AT+CSCA
获取服务中心的号码
AT+CSCA?
AT+CMGS
发送AT+CMGS= YYY ;其中 YYY 为TPDU的十进制长度
AT+CMGS=19
接收到“>”
响应后发送短信内容
 
表2 发送数据分析
接收号部分
短信内容部分
00 11 00 0B 8131208698yxFz
000801 04 4F605970
00:SCA以00写入,应用默认的服务中心地址,该服务中心地址用AT+CSCA指令写入
11:PDU类型
00:TP-MR表示MR 消息 参考
0B:接收号字符数
81:表示是国内代码
31258698yxFz:接收号 编码时长度为奇数末尾追加“F”每两个字节进行位置交换,即13526889xyz
00:TP-PID协议标示
08:TP-DCS数据编码方式
01:TP-VP有效期
04:UDL用户数据长度,用十六制表示
4F60597D:短信内容的UNICODE编码

 

    如果发送成功,串口返回以下结果:   
    +CMGS: X  这里的X是个数字  
 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值