发送短信的时候,我们是确切地知道何时发送的;而接收数据的时候, 我们则不知道何时数据会到来,因此,在短信到达时,我们需要一种方式来获知它的到来并将其读出来。有两种方式:一是查询,二是触发事件。前一种方式我们不会用的,后一种方式是上选。我们可以预先对GSM模块设置一些参数,那么当它收到短信的时候,就会自动将数据送到串口上,我们就可以接着控制我们的程序去读取它了。
在这里,你必须非常清楚一些概念。不要以为短信到来的时候,GSM模块就一定可以将短信的内容直接送到串口上,然后我们直接读就可以了。如果你这样想,那么只能说你把事情想得太美好。事实上,模块给我们的回复是比较“乱”的,需要做不少处理(例如里面不仅有PDU串的内容,还有其他字符(串));不仅如此,甚至于很多GSM模块根本就不能在接收到短信的时候自动把PDU串送到串口上!例如,我所使用的GSM模块(它里面用的是西门子MC39i芯片)就是这样一个“弱智”的模块,你要使用事件触发的方式,最多最多只能让它做到:短信到来的时候,它会把短信写入SIM卡中(MC39i唯一的选择就是写存储器,然后再读出来),然后它会送一些提示信息到串口上,这时,你便可以监测到串口有数据来了,然后你再分析串口中数据的格式(里面包含了收到的短信写入了SIM卡上的位置号),然后再去SIM卡上找到那条短信,再读出来。是不是超级麻烦?的确!认了吧!
下面我们来看看怎么做:
(