单片机也能给手机发短信
没错!利用强大的GSM网络,就可以实现单片机和手机之间互发短信。
我们知道,单片机以其强大的低成本优势和强大的采集、控制、存储功能在工业领域已经被广泛使用,而今天我们所要说的,并不是要介绍是如何的强大,也不标榜其在哪个领域的杰出贡献,我们今天所要说的,就是给单片机插上无线的翅膀,给它配上“手机”,让其利用成熟的GSM网络和远在海外的您收发短信。
试想一下,如果单片机自身具备了收发短信功能,那将是多么令人欣喜若狂的一件事,我们可以利用手机向单片机发送一条短信,单片机可以根据不同的短信内容,进行不同的动作,比如控制某些管脚的电平,如果外部加个继电器之类的,就可以用它来控制电源的开关等,单片机也可以将自身采集到的电压、电流、压力等模拟量值发送到指定的手机上。
下面我们具体来说一下如何使用单片机和手机进行短信收发。“巧妇难为无米之炊”,我们也需要几个“零件”:
1、 单片机:无所谓什么型号,只要能提供串口就行,具体选型主要看其稳定性和自身要实现的功能,{zh1}就是xjb了。
2、 GSM短信模块:这个市面上很多,价格也是参差不齐,我这里选择西安达泰电子的T09C短信模块,个人觉得相对比较稳定,主要是它提供标准的AT指令,这样对于以后的产品升级或更换都有所保障;提供标准的RS232接口可以方便地与电脑的串口连接,通过提供的PC机测试软件方便进行电脑调试,帮助我们尽快上手。好多公司的同类产品将AT指令封装成自己的指令,这可能影响以后的产品改造和升级。
3、 相关配件:5V电源、GSM天线、SIM卡、一些电子元器件。其中的5V电源和GSM天线在购买时作为赠品已经提供给我们了,SIM卡就到当地移动服务厅办一张就行了,注意不能使用CDMA和3G卡,电子元器件主要部分是RS232转TTL的电平转换,我推荐常用的MAX232。
我想对于单片机和MAX232以及RS232接口之间的连接,搞过单片机的朋友都是轻车熟路了,为了节省互联网资源,我就不再重复。而SIM卡和GSM以及电源的连接,T09C都提供相关的接口,即所谓的零插拨式的,绝不会插错。
下面我主要来说一下如何使用单片机程序实现短信收发,今天我们只谈谈英文短信的收发,中文短信收发相对比较麻烦一点儿,主要是中文的编码部分,但其流程和英文短信是一致的(如需收发中文短信,请参见相关PDU短消息格式说明等相关文档),这里只说一下短信收发的流程。
1、 短信发送(通过单片机串口收发指令,/**/内为注释,<CR>表示回车,ASC码为0x0D+0x0A)
发送:AT<CR> /*检测模块是否工作正常*/
接收:OK /*串口返回OK表示模块工作正常*/
发送:AT+CMGF=1<CR> /*配置模块工作于TEXT模式,用于发送英文短信*/
接收:OK /*配置成功*/
发送:AT+CMGS=”131XXXX4321”<CR>/*配置要接收的手机号码*/
接收:> /*返回“>”符,表示可以发送短信*/
发送:Message Content /*要发送的短信内容“Message Content ”,
只能在接收到“>”符号后发送短信内容*/
其中“”符号为短信结束符,ASC码值为(0x1A),不作为短信内容发送*/
接收:+CMGS:<mr><CR>
OK /*短信发送成功,<mr>为消息参考值,由模块
自动分配*/
2、 读取短信
接收:+CMTI: "SM",n<CR> /*收到新短信息提示*/
发送:AT+CMGR=n<CR> /*读取第n条短信*/
接收:+CMGR: "REC UNREAD", "86XXXX4321","98/10/01,18 :22 :11+00", 80.22<CR>
OK /*短信读取成功,“86XXXX4321”为
目标电话号码,“80.22”为短信内容*/
如何判断当前接收到的短信为第几条短信,从而使用AT+CMGR=n来读取该短信呢?当然,我们可以使用串口中断来接收串口数据,当有新的短信到达时,串口会接收到诸如“+CMTI: "SM",n”的字符串,其中n就是新收到的短信存储位置,通过字符串截取可以获取n的值,这样就可以利用AT+CMGR=n来读取新收到的短信内容了,然后通过字符串分隔,分别获取短信接收时间、目标电话号码、短信内容等。
既然可以收发短信了,通俗点儿讲,就是使单片机与手机之间建立了一条数据通道,可以利用这条数据通道来进行数据传输,如果通过手机向单片机发送不同的短信内容,单片机根据短信内容进行相关动作,比如控制外部继电器等,那样手机控制远程设备将不再是梦想;同理,单片机也可以通过短信的形式,将采集到的相关信息发送到指定的手机上。
如果在PC机上通过RS232串口连接一台DTP-S09C短信模块, PC机上开发一套管理软件,该软件负责短信的收发及处理,这样以来,不需要额外申请什么短信网关之类的,就可以建立强大的远程监控系统平台。