单片机 GSM 模块应用

如果你只要发送英文而已,那你很幸运,因为仅仅为了发送个字符而已是很简单的。TEXT模式满足你的要求,

但是不爽的是,我的上司要求我要中文字符一起混发,还好有unicode ,编码  兼容了ASCII 只是前面加了2个0;哈哈 其他的就是 常用的字符了,相信大家都知道GB2312 有需要的话自己找到两张表 写个函数互相转换吧。。。。

下面仅仅整理一下 PDU 模式的一些 内容,也是在网上找到的,感觉不错:::

关于PDU模式发送短信:

许多文章说,在PDU模式下,你要按照规范将一系列信息(包括SMSC地址、对方号码、待发内容等等)编码成PDU串,再发送出去,但是你知道吗,有不少芯片(例如我所用的GSM模块中的西门子TC35I芯片)是不支持一次将PDU串发出去的,别以为你将所有信息编码成PDU串,然后就可以一次写入串口中,然后就可以成功发送了。你要分几步来:

第一,对模块写入 AT+CMGF=0<回车>  的AT命令(<回车> 要用 \r 来实现),之后应该得到一个 OK 响应,才能继续进行下一步;

第二,对模块写入 AT+CMGS=<length><回车>  的AT命令(其中 <length> 是一个数字,该数字是代表了PDU串中某一部分的长度,这一部分就是指除了SMSC地址之外的那一部分),之后应该得到一个 \r\n> \r\n  响应(特别要注意:\r是回车,\n是换行,>是一个大于号,>后面还有一个空格!),才能继续进行下一步;

第三,可以开始写入要发送的内容了。这一部分只是PDU串中的一部分,并不是完整的PDU串(如前所述,去掉了SMSC地址那一部分),这一部分要以 Ctrl+Z 结尾,但是我们要知道,在字符串中要带上 Ctrl+Z 的话,必须是用ACSII码。Ctrl+Z的ASCII码是16进制的 1A ,所以你可以在你的字符串后面用strcat函数附加上 "\x1A " 来实现。

这样之后,如果发送成功,你就会收到GSM模块的一个发送成功的响应,形如:

       +CMGS: 246

 

       OK

 

       如果只有一个“OK”响应,没有类似于“+CMGS: 246”的部分,则并不能发送成功!所以,当你只收到一个 OK 响应的时候,你就要考虑你是哪里出错了!


是不是很麻烦?的确,TC35I芯片就是这样。我看到一篇文章里说,有些芯片是可以通过一次写入完整的PDU串,直接将短信发送出去的。那样的话,我们就只需要写一次串口就可以了,非常方便,不用像西门子的这个芯片一样,需要一次又一次地向串口写AT命令。所以你必须弄清楚你用的模块是用什么方式对它进行操作的。

 

附:

TC35的控制主要包含如下几类指令:

  (1)初始化指令

  设置短消息发送格式AT+CMGF=1<CR>,设置1代表PDU模式,<CR>是回车符号,也就是0x0d,指令正确则模块返回<CRLF>OK<CRLF>,<CRLF>是回车换行符号。

  (2)设置/读取短消息中心

  短消息中心号码由移动运营商提供。

  设置短消息中心的指令格式为:

  AT+CSCA=″+8613800531500″(短消息中心)<CR>

  设置正确则模块返回<CRLF>OK<CRLF>。

  读取短消息服务中心则使用命令:

AT+CSCA=?<CR>

  TC35模块应该返回:

<CRLF>+CSCA:″8613800531500″<CRLF>。

   (3)设置短消息到达自动提示

  设置短消息到达自动提示的指令格式为:

AT+CNMI=1,1,0,0,1<CR>

  设置正确则TC35模块返回:

<CRLF>OK<CRLF>。

  设置此命令可使模块在短消息到达后向串口发送指令:

<CRLF>+CMTI:″SM″,INDEX(信息存储位置)<CRLF>。

   通过TC35发送短消息的方法为:

  PC上的控制软件按照PDU的格式发送和接收数据,短消息的内容可以是中文或者其他字符。在PDU模式,如果发送短消息,则首先发送短消息数据的长度:

AT+CMGS=<length><CR>

  等待TC35模块返回ASCII字符">",则可以将PDU数据输入,PDU数据以<Z>(也就是0x1a)作为结束符。短消息发送成功,模块返回:

<CRLF>OK<CRLF>

   通过TC35接收短消息的方法为:

  短消息到来后,串口上会接收到指令

<CRLF>+CMTI:″SM″,INDEX(信息存储位置)<CRLF>

   PC上的控制软件通过读取PDU数据的AT命令

AT+CMGR=INDEX<CRLF>

  将TC35模块中PDU格式的短消息内容读出。如果用+CMGL代替+CMGR,则可一次性读出全部短消息。

   通过TC35删除短消息的方法为:

  PC上的控制软件收到一条短消息并处理后,需要将其在SIM卡上删除,以防止SIM卡饱和。删除短消息的指令为:

AT+CMGD=INDEX<CR>

  删除后模块返回

<CRLF>OK<CRLF>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值