SIM800A模块发短信调试中出现的问题并解决

SIM800A是基于GSM的手机通讯模块,可发短信,可打电话。可发最近一个项目要用到它的发短信功能,记录一下调试过程。

SIM800A采用串口通信,只要发送AT指令就能对它进行操作,因此先用串口调试助手手动发送AT指令。AT指令调试笔记(转)

我用USB转串口连接模块与电脑进行通信,USB转串口模块自带5v输出,于是一开始我把它作为SIM800A模块的电源,但是发现发送一些查询类的AT指令时老是返回ERROR。后来查阅商家提供的调试手册,里面提到一个检验模块是否正常工作的方法,就是给模块打电话,如果提示关机,模块就没有正常工作。试了一下,果然提示关机。那么硬件连接上就肯定存在问题,又注意到手册中强调了电源的重要性,因此怀疑USB转串口模块的供电能力。将SIM800A外接电源,于是电脑与USB转串口模块只需连接三根线(TX,RX,Gnd),又给模块打电话,没有提示关机,说明模块正常工作,问题解决。

接下来就是按照商家提供的发短信例程进行测试:

首先发送AT+CPMS?查询短消息使用状态,正常返回后继续。

 然后进行一些设置,这里我选用了TXT文本模式,GSM编码模式(GSM模式可以直接发送英文,不需要编码转换,但是只能发送英文),注意发送AT指令时串口调试助手中勾选发送新行,那么串口调试助手会在末尾自动增加回车,这是AT指令的格式要求。

发送:AT+CMGF=1 选择文本模式

发送:AT+CSCS="GSM” 选择GSM编码模式

发送:AT+CSCA? 查询短消息中心号码

发送:AT+CSMP=17,167,0,240 设置编码参数(参数具体含义不明)

发送:AT+CMGS="10086” 设置要发送的电话号码(引号内为号码)

等待返回“>”,发送短信内容(此时不要发送回车,否则会返回新的">"等待你发送短信内容)

最后发送"ctrl+z"指令:在十六进制下发送0x1a(不要回车)

一开始我按照例程发完0x1a后过一段时间返回了ERROR,发送失败,只好求助售后技术支持。技术支持远程调试,把AT+CSMP=17,167,0,240中的最后一个参数改为241后发送成功。

后来也没查到这几个参数具体是啥意思,总之能用就行了。。

在电脑上上调试好后接下来用单片机(STM32F103)进行控制, 代码用的正点原子的,就是有点古老,没有用固件库,稍微移植一下自己需要的(短信)进行测试。

其实要实现发短信的话核心就是按照流程串口发送AT指令,调试时把SIM800A模块发送的信息通过串口再转发给上位机进行观察,这里我遇到个坑:我第一次测试时由于不明原因发送失败,于是我先发个AT,然后按照发短信的流程逐句往上加,以此排查故障原因。然后我定位在:AT+CMGS="10086” ,加上这句后再发送新的指令都会返回">",然后我发现SIM800A拔电重启后又可以发送新的指令了,一开始我一直找不到原因,后来才发现,发送AT+CMGS="10086”后模块返回">"等待你继续发送消息内容,所以我发送的AT指令都被当成了短信内容,只要没有发送0x1a完成本次发送, 模块就会一直将收到的内容当成短信内容,所以AT指令也不起作用了。

然后我加上短信内容,最后发送0x1a,短信发送成功!

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值