关于PDU模式发送短信,千万可别被误导

原创 2007年09月13日 15:36:00

最近在做GSM短信发送模块的软件,走了不少弯路,准备分几次一点点地写出来,仅供参考。

曾被网上的一些文章所误导,尤其是几篇非常流行点击率相当高的文章,可怜的我原来并不了解相关技术,后来才发现自己用GSM模块很多东西都与文中说的不一样,因此走了不少弯路,真是郁闷死

关于PDU模式发送短信:

许多文章说,在PDU模式下,你要按照规范将一系列信息(包括SMSC地址、对方号码、待发内容等等)编码成PDU串,再发送出去,但是你知道吗,有不少芯片(例如我所用的GSM模块中的西门子MC39i芯片)是不支持一次将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 响应的时候,你就要考虑你是哪里出错了!

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

(未完待续,下一篇文章里继续写)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MQTT 移植STM32+GPRS(串口透传)(六) +补充帖子

有点事情,赶快跟进,有童鞋在博客私信了,但是因为公司的有些….所以源码就不贴太多,,对于私信没回的,表示,对不起,对不起!重点是我遇到的问题。 其实大家完全可以参考 https://github.c...

MQTT 移植STM32+GPRS(串口透传)(二)

- 上一篇中,介绍了什么是MQTT协议、常用的领域和一些典型特征,这篇还要补充部分概念性理论。 ## 协议解析 整体的协议构造,整体分为 固定头部+可变头部+消息内容 如下图所示 ![hea...

MQTT 移植STM32+GPRS(串口透传)(五) +补充帖子

有人问我 为什么没有5 .。。。。。。我忘了更新了去这个网页查看吧 有你们想要的 https://blog.sectong.com/blog/mqtt5.html真的不是打广告哈

用AT命令发送PDU短信

我用一个例子说明整个过程~     短信中心:+8613800100500     收信号码:+8613401041516     短信内容:我爱听评书 第一步——格式...

利用串口调试工具来调试GSM/GPRS模块时,几个注意事项

推荐“串口调试助手” ,调试起来非常方便。(1)关于波特率:对有些模块,用超级终端进行配置的时候,波特率是要设置为57600的,而用串口调试工具进行调试的时候,波特率应设置为你的系统中用到的实际通信速...

GSM PDU模式发中文短信

GSM PDU模式发中文短信 网上的资料也有很多,但参考了这么多天才最终搞定,所以还是把自己的一点点体会写出来,做为记录,也方便其它后来者参考。       网上的资料很多都没有讲开发的环境,所以有...

MQTT 移植STM32+GPRS(串口透传)(四)

在完成相应的初始化和参数设置后主函数中while(1)执行等待读消息,timer3定时器中断中发送采集到的传感器数值,timer4定时器中断中发送ping报文。接着上一篇继续,首先说移植需要的部分 ...

stm32与sim900之GPRS通信(电脑串口与SIM900通信)

注意: 1 sim900在进行GPRS通信的时候最大电流可以到90MA.瞬间电流SIM900模块可能高达2A@4V,即输入端电流瞬间值可能高达740mA@12V,故给模块选择电源的时候,要能满足瞬间电...

MQTT 移植STM32+GPRS(串口透传)(一)

# 硬件智能之 MQTT协议介绍与移植笔记(一) ##MQTT是什么? MQTT(MessageQueuing Telemetry Transport Protocol)即全称消息队列遥感传输...

[原创]关于PDU模式接收短信,千万可别被误导

发送短信的时候,我们是确切地知道何时发送的;而接收数据的时候, 我们则不知道何时数据会到来,因此,在短信到达时,我们需要一种方式来获知它的到来并将其读出来。有两种方式:一是查询,二是触发事件。前一种方...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)