需要注意的是:不同手机数据线内部电平转换芯片的供电方式是不同的,有的是通过手机直接供电;有的是通过窃取PC机串口某些引脚(通常为4、6、7、8引脚)的电流经内部整流滤波稳压后提供。判断的方法是将数据线一端插到手机数据口,测量另一端2脚与5脚之间的电压,如果有一7V左右的电压,则为前者,如果测不出电压,则为后者,对于后者则需要单片机为4、6、7、8引脚任意一引脚提供+5V电压即可,如图1中虚线所示。
2 软件接口技术及控制原理
单片机与手机的软件接口其实就是单片机通过与GSM短信息有关的AT指令控制手机的控制技术,如读取手机的短消息内容,删除短消息内容,列出手机中还未读的短消息等。关于AT指令的功能描述见参考文献[1,2]的文章内容,此处不再赘述。然而,执行一条指令,也并非某些资料中介绍得那么简单。事实上,指令的执行过程需要单片机与手机交互应答完成,每一次发送或接收的字节数有严格的规定,二者必须依据这些规定实现数据交换,否则,通信就是失败的。笔者经过对几种手机反复测试,总结出来一些规律,如表1所列。
对几个问题说明如下。
①所有AT指令的指令符号、常数、PDu数据包等都是以ASCII编码形式传送的,比如“A”的ASCII编码为41H,“T”的AscII编码为54H,数字“0,,的AsCⅡ编码为30H等。
②单片机控制手机工作,必须把手机的短信息工作模式设置为PDu格式,即通过指令AT+cMGF=O完成。
③单片机向手机发送每一条指令后,必须以回车符作为该条指令的结束,回车的ASCII编码为0DH。例如,单片机向手机发送“AT+CMGF=0”这条指令,其ASCII编码序列为“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一个字节0DH就是回车符,表示该条指令结束,如果没有这个回车符,手机将不识别这条指令。
④当手机接收到一条完整的AT指令后,手机并不立即执行这条指令,而是先把刚才接收到的AT指令的全部ASCII编码序列全部反发送出来(含0DH),然后发送一个回车符和换行符的ASCII编码,即0DH和0AH,最后执行该条指令。
⑤手机向单片机传送短信息内容时,其PDu数据包的内容是以十六进制表示的数据,但并不是直接向单片机传递十六进制数据,而仍然是把每一位十六进制数以AscII编码来发送。这样,二个字节的十六进制数就变成4字节的ASCII码。但是,PDU数据包中的数据字节长度部分仍然是实际字节长度,而不是变成AscII码的字节长度,这在编程时应特别注意,否则,接收的数据就不完整。单片机接收到PDU数据包数据后,必须将其恢复成十六进制数据,其算法如下:设a为接收的ASCII码,b为转换后的十六进制数。如果a<39H,则b=a-30H;如果a>39H,则b=a-30H-07H,最后把前后两个数合并为一个字节。
⑥手机向单片机应答PDU数据包的字节数不包括前9字节数据(短信服务中心地址),但向单片机传送PDU数据包时,包括这9个字节的数据。例如,如果手机应答的PDU数据长度为50,而实际向单片机传送的十六进制数据为59字节,ASCII码为2×59字节,所以,单片机必须按2×59字节接收PDU数据。
3 应用实例
笔者利用上述原理和接口技术开发了一个项目:高速公路显示导引系统。安装在高速公路上的LED显示屏实时显示前方路段车辆通行态势和天气气候情况,提醒并引导驾驶人员,正确驾驶。该系统的使用一定程度上消除了许多交通事故隐患,从而保障了道路的畅通和人民生命财产的安全。该系统由控制中心和若干个显示屏组成。控制中心实时将最新信息发送到各显示屏。构建控制中心与显示终端的通信链路,传统的方法要么铺设光缆用有线方式实现,要么构建专用无线网用无线方式实现。因为高速公路的特殊性,控制中心与显示终端之间的距离通常很远,两种方案都必须投入大量资金和巨大的施工工作量。如果采用GSM公众无线传输网络,控制中心以短信息的形式把显示信息发送到显示终端的技术方案,则具有投资小,施工方便,工作可靠,运行费用低等诸多优点。
在控制中心,微机编辑好短信息后通过手机这个载体发送出去。在显示终端,单片机通过读取手机的短信息把它显示到LED显示屏上。项目的核心技术是单片机与手机的接口和PDU数据包中的汉字信息编码。因为短信息中的汉字仅仅是一个编码,单片机应用系统将编码变为汉字点阵数据,必须配置汉字字库。按GSM07.05协议规定,短信息中的汉字编码为Unicode编码,如果构建一个Unicode编码的汉字字库,确实是一件繁琐的工作,因此,在设计单片机应用系统时,采用如下两点技术措施。
①单片机系统配置的字库为GB-2312编码的汉字库,即区位码汉字库,该汉字库在网上可免费下载,固化到Flash存储芯片中即可。当然这样做的前提是PDU数据包中的汉字编码必须为汉字内码而非Unicode编码。
②控制中心编辑PDU数据包数据时,采用自定义数据方式,其中,代表汉字的数据,直接取用汉字的机内码即可,免去了把机内码再转换为Unicode编码之苦。实践证明,这是可行的。
采用以上技术措施的优点,一是省去了两种编码的相互转换;二是保证了数据的保密性,非系统内用户无法接收,即使接收也无法显示。
该项目研制成功投入使用后,因显示终端只接收不发送,几乎没有运行成本。发送端(控制中心)可采用月租方式,也能把运行费用降低到最低限度。因此该项目得到用户满意的评价。