MC8630模块(EVDO)成功发送短信

时间:2021-10-17 18:56:41

    这个发短信问题已经纠结笔者快两个月了,陆陆续续产生一些奇怪的问题,这里笔者对使用此模块要特别注意的地方进行一些总结和说明,希望用这个模块发短信的朋友们能够从中得到参考,提高开发进度。

    1.与MC8331A不同的是,MC8630是交互式发短信的。什么意思?

    MC8331A是直接一条AT指令,过去,其中包括发送短信的号码,内容和长度,而8630则不是这样,它是这样:

   

at^hcmgs="15868152889"CR    //CR是回车
>                           //>号是模块返回的
hello                       //这是你要发送的数据
0x1a                        //结束符
^HCMGS:1                    //如下是模块返回的
OK
^HCMGSS:1

    它是交互式的,首先输入要发送的号码,然后等待模块回应:“>”这个字符,然后在输入要发送的数据,这样完成发送短信。

    2.第一个问题倒不是什么难事,最让人纠结的就是结束符问题,看过手册的人都知道,如果是英文的要发送0x1a这个结束符,如果是中文要发送0xaa 0x1a这两个结束符。

    大家也许会想这个不是很简单吗?是的,一开始笔者也认为很简单,于是对于构造at指令的最后一个字符的时候赋值为:

   

cmd[end] = 0x1a


    这样弄吧,很长一段时间程序就一直阻塞在这个地方,经过检查发现不了问题,为什么?其实它的意思是:

cmd[end] = "\x1a"


   这点要特别注意,估计大多数人都是死在这个地方!

   3.AT指令“\r”问题

    也许你有过这个错误,也许你没有,但是发送AT指令一定要加"\r",pdf上没有,也不会特别说明,所以at指令必须有回车符,以保证指令开始的时候是顶头开始。如:

   

atCmdSend("AT\r");


    这个是小细节问题,不过如果编程编到头昏眼花的时候,可能不注意,也会让人百思不得其解