GPRS模块发送中文短信_gprs模块发送中文短信

2020-02-29 其他范文 下载本文

GPRS模块发送中文短信由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“gprs模块发送中文短信”。

GPRS发送中文短信

我所使用的GPRS模块型号是WAVECOM Q2403A。

FS2410开发板通过串口1与GPRS模块通信,向串口1写入AT指令来控制GPRS模块,读串口1获得GPRS模块返回的状态信息。

使用串口连接GPRS模块发送和接收短消息,首先,我们要对由ESTI制订的SMS规范有所了解。与我们讨论的短消息收发有关的规范主要包括GSM 03.38、GSM 03.40和GSM 07.05。前二者着重描述SMS的技术实现(含编码方式),后者则规定了SMS的DTE-DCE接口标准(AT命令集)。

一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黄花,目前很少用了。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国内手机基本上不支持,主要用于欧美地区。PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默认的编码方式。Text Mode比较简单,而且不适合做自定义数据传输,我们就不讨论了。下面介绍的内容,是在PDU Mode下发送和接收短消息的实现方法。

PDU串表面上是一串ASCII码,由‘0’-‘9’、‘A’-‘F’这些数字和字母组成。它们是8位字节的十六进制数,或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标号码、回复号码、编码方式和服务时间等。发送和接收的PDU串,结构是不完全相同的。

首先以一个实例来说明在PC上通过AT指令发送PDU短信的全过程。假如我要发送下面的短信:

接收号码:+86***

短信内容:工作愉快!

短信中心号码:+86***

***5f011000d91683173711368f20008000a5bb691cc67098d3cff01

一、打开超级终端,设置波特率为9600,数据位8位,无奇偶校验,停止位1位,无流控,把GPRS模块连接到电脑的串口上。

二、对需要发送的短信内容进行处理。

1、短信中心号码处理:用字符串 addr 表示

(1)、将短信息中心号码去掉+号,看看长度是否为偶数,如果不是,最后添加F

即 addr = “+86***”

=> addr = “86***F”

(2)、将奇数位和偶数位交换。

=> addr = “683108200005F0”

(3)、将短信息中心号码前面加上字符91,91是国际化的意思

=> addr = “91683108200005F0”

(4)、算出 addr 长度,结果除2,格式化成2位的16进制字符串,16 / 2 = 8 => “08” => addr = “***5F0”

2、手机号码处理:用字符串 phone

(1)、将手机号码去掉+号,看看长度是否为偶数,如果不是,最后添加F

即 phone = “+86***”

=> phone = “86***F”

(2)、将手机号码奇数位和偶数位交换。

=> phone = “683106423346F9”

3、短信息部分处理:用字符串 msg 表示

(1)、转字符串转换为Unicode代码,例如“工作愉快!”的unicode代码为 5DE54F5C61095FEBFF01,(2)、将 msg 长度除2,保留两位16进制数,即 5DE54F5C61095FEBFF01 = 20 / 2 => “0A”,再加上 msg

=> msg = “0A5DE54F5C61095FEBFF01”

4、组合(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

三、通过串口向GPRS模块发送我们处理过的短信内容。

在超级终端里输入AT指令设置GPRS工作模式

AT+CMGF=0 //PDU模式发送

OK

接着输入我们处理的短信数据

AT+CMGS=25

> addr+phone

如果返回不是ERROR,就发送成功了。

通过以上的例子可以看出,我们编写的函数中要实现的主要功能有打开串口、设置串口的工作方式、处理发送的短信内容,把处理后的内容写入串口。

我写的接口函数如下

//打开串口和设置串口的工作方式

int gsmInit(void);

//处理发送的短信内容

int gsmEncodeUcs2(const char* pSrc, unsigned char* pDst, int nSrcLength);//UCS2编码 int gsmString2Bytes(const char* pSrc, unsigned char* pDst, int nSrcLength);//可打印字符串转换为字节数据

int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength);//字节数据转换为可打印字符串

int gsmInvertNumbers(const char* pSrc, char* pDst, int nSrcLength);//正常顺序的字符串转换为两两颠倒的字符串,若长度为奇数,补'F'凑成偶数

int gsmSerializeNumbers(const char* pSrc, char* pDst, int nSrcLength);//两两颠倒的字符串转换为正常顺序的字符串

int gsmEncodePdu(const SM_PARAM* pSrc, char* pDst);//PDU编码,用于编制、发送短消息

//发送短信函数

int gsmSendMeage(const SM_PARAM* pSrc);

//读短信函数

int gsmReadMeage(SM_PARAM* pMsg)

//删除短消息

int gsmDeleteMeage(const int index)

使用以上函数就可以发送中文短信,首先调用int gsmInit(void)做初始化工作,然后构建SM_PARAM结构体(SM_PARAM结构体的定义如下),调用int gsmSendMeage(const SM_PARAM* pSrc)函数,把SM_PARAM结构体的地址传递给这个函数就可以把短信发送出去。

// 短消息参数结构,编码/解码共用

// 其中,字符串以0结尾

typedef struct {

char SCA[16];// 短消息服务中心号码(SMSC地址)

char TPA[16];// 目标号码或回复号码(TP-DA或TP-RA)

char TP_PID;// 用户信息协议标识(TP-PID)

char TP_DCS;// 用户信息编码方式(TP-DCS)

char TP_SCTS[16];// 服务时间戳字符串(TP_SCTS), 接收时用到

char TP_UD[161];// 原始用户信息(编码前或解码后的TP-UD)

char index;// 短消息序号,在读取时用到

} SM_PARAM;

通过以上方法在虚拟机环境下测试可以正常发送中文短信,想通过FS2410开发板上的串口发送中文短信还需要做一些工作。

首先要修改int gsmInit(void)中打开的串口设备节点名称,FS2410开发板上串口的设备节点需要我们自己建立,在开发板上串口的主设备号是204,我所使用的串口1的次设备号是65,使用mknod命令在/dev目录下建立串口设备节点,把int gsmInit(void)中打开的设备节点改成我们自己建立的。

其次我们开发板上挂载的根文件系统包含的动态库可能不完全,我们进行汉字编码转换时用到的iconv系列函数需要使用/usr/lib/gconv目录下的动态库,把我们交叉工具链所在目录crotool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu/lib/gconv下的全部动态库拷贝到/usr/lib/gconv目录下。在/etc/profile文件中加入环境变量exportGCONV_PATH=/usr/lib/gconv/。

最后使用交叉工具链编译出目标系统的代码就可以运行了。

《GPRS模块发送中文短信.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
GPRS模块发送中文短信
点击下载文档
相关专题 gprs模块发送中文短信 中文 模块 短信 gprs模块发送中文短信 中文 模块 短信
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文