作者:于捷;王祖林;刘有才
引言
目前,基于GSM/GPRS模块的无线远程监控系统大多数采用嵌入式处理器,选用Linux操作系统。本文介绍一种采用Winbond公司的77FA8单片机控制明基的GSM/GPRS模块BENQ23G发送MMS彩信的方法。该方法成本低、可靠性高,器件选用工业级产品,能够在较宽温度范围内工作,即使在室外较恶劣的环境下也可以使用。
本系统组成如图1所示。其中,单片机77E58有2个串口,串口O用于与BENQ23G模块进行通信,控制BENQ23G发送彩信;串口1用于与串口摄像头(如C328-JPEG模块)进行通信,控制摄像头捕获图像。外部传感器报警接口用于连接外部报警传感器,77E58最小系统收到外部传感器报警触发信号后,捕获照片、封装MMS彩信,控制BENQ23G模块向指定的手机或远程接收设备发送彩信;同时还可以拨打指定电话号码,将现场声音传送过去。MIC 及信号放大电路用于采集外部现场声音并进行放大。
从前面的分析可以看出,本系统充分利用了各个部件的硬件资源,最大限度地降低了硬件成本。本文主要介绍图1所示的无线远程监控系统通过中国移动梦网发送彩信时,所使用的传输协议命令格式和传输数据格式。
1 BENQ23G模块简介
BENQ23G是台湾BenQ公司生产的嵌入TCP/IP协议的GSM/GPRS模块,在BENQ23A模块的基础上增加了M2M(Machine-to —Maehine)功能,可以通过GPRS承载在BENQ23G模块和因特网TCP/UDP服务器上实现连接。控制设备和BENQ23G模块之间通过 UART串口连接,传输命令和数据。
控制设备首先通过UART串口设置网络连接参数,然后拨号连接GPRS,BENQ23G模块建立GPRS连接并和指定的因特网TCP/UDP服务器建立 Socket连接。如果Socket连接成功,则模块在控制设备和因特网TCP/UDP服务器之间通过UART串口建立点对点数据连接模式,控制设备可以通过UART串口将数据原封不动地上传至因特网TCP/UDP服务器,同时可以通过UART串口原封不动地下载因特网TCP/UDP服务器上的数据,而上传和下载数据的TCP/UDP打包和解包工作由BENQ23G模块实现。
控制设备在数据模式下通过UART串口发送数据时,如果BENQ23G模块在规定时间间隔内没有继续收到UART串口的数据,就将前面接收的数据进行 TCP/UDP打包并发送到服务器。
当BENQ23G模块通过UART串口连续收到控制模块发送的3个“+”符号后,将退出点对点数据模式而进入命令模式,可以通过UART串口接收控制设备发送的AT指令。但这时BENQ23G模块和服务器之间的TCP/UDP协议Socket连接并没有中断,控制设备如果想再次进入数据模式上传数据给服务器,可以键入ATO命令实现。
控制设备可以在命令模式下通过键入ATH命令来中断BENQ23G模块和服务器之间的Socket连接。下面给出一个控制设备和彩信网关服务器连接的例子:
该例子说明如何通过BENQ23G模块实现和远程服务器的连接,以及上传和下载数据。BENQ23G模块AT指令的详细说明见参考文献。
测试MMS组成及编码格式分析略,详细的编码含义见参考文献。
2 基于BENQ23G发送MMS编码格式分析
当控制设备需要发送彩信时,首先通过UART串口传送AT指令完成相应的参数设置(如前面例子所示),再传送“ATD*97#”指令进行 GPRS拨号,并等待BENQ23G模块完成与服务器之间的Socket连接。当收到BENQ23G模块发送的响应“Wait Socket Open”时,表明BENQ23G模块完成了与服务器的连接,并进入数据模式,控制设备可以进行发送彩信操作。
2.1 首先建立会话连接
控制设备发送会话建立连接请求(8字节):
0001 0A OO OO 12 01 10 OO 00
发送数据序列中前4字节“0A 00 00 12”是WTP In—voke PDU。WTP Invoke PDU采用了固定长度格式,其结构如表1所列。
其中,CON=0,PDU Type=0001,GTR=0,TTR=1,RID=0,故第1字节为0A;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000000,故第3字节为00;Version=00,TIDnew=0,U/p=1,RES=00,TCL=10,故第4字节为12。
发送数据序列中的第5到8字节“01 10 O000”是WSP协议数据单元。其中第5字节“01”是WSP会话连接Connect的代码,第6到8字节是WSP Connect PDU。WSP Connect PDU结构如表2所列。
其中,第6字节“10”是WSP协议版本号,高4位是版本号的整数部分,低4位是版本号的小数部分,这里为V1.0;第7字节是能力字段长度,没有使用能力请求,故长度为00;第8字节是报头字段长度,没有报头,故长度为00。
服务器返回数据如下(30字节):
0001 12 80 00 02 B5 C5 1 5 00 15 45 6E 63 6F 64 69 6E........Encodin
0017 67 2D 76 65 72 73 69 6F 6E 00 31 2F 32 00 00 00 g—version.1.2..。
返回数据中第1~3字节是WTP Result PDU,其余为WSP协议数据单元。WTP Result PDU采用固定长度格式,其结构如表3所列。
其中,CON=0,PDU Type=0010,GTR=0,TTR=1,RID=O,故第1字节为12;TID High Byte=10000000,故第2字节为80;TID Low Byte=00000000,故第3字节为OO。
返回数据中的第4字节“02”是WSP会话连接确认ConnectReply的代码;第5~30字节是WSP ConnectReplyPDU。
WSP ConneetReply PDU结构如表4所列。
第5~8字节“B5 C5 15”是会话标识;第10字节“15”是HeadersLen(21字节),Headers是以00结束的字符串,即Encoding—version 1.2。
2.2 控制设备发送WTP确认完成会话连接
控制设备发送WTP确认(WTP Acknowledgement,3字节):18 00 00。WTP Acknowledgement PDU采用固定长度格式,如表5所列。
其中,CON=0,PDU Type=0011,Tve/Tok=0,RES=0,RID=0,故第1字节为18;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000000,故第3字节为OO。
2.3 控制设备发送WTP、WSP和MMS包
控制设备首先发送WTP和WSP(49字节):
0001 0E 00 01 1 2 60 1A 10 68 74 74 70 3A 2F 2F 6D 6D.......http://mm
0017 73 63 2E 6D 6F 6E 74 6 5 72 6E 65 74 2E 63 6F 6D SC.monternet.com
0033 2F BE 80 BE C7 80 A1 09 80 77 61 70 00 77 61 70/........wap.wap
0049 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00................
发送数据序列中,前4个字节“0E 00 01 12”是WTPInvoke PDU,后45个字节是WSP协议数据单元。
WTP Invoke PDU同样采用了固定结构格式(如表1所列)。其中,CON=0,PDU Type=0001,GTR=1,TTR=1,RID=0,故第1字节为0E;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000001,故第3字节为01;Version=00,TIDnew=0,U/P=1,RES=00,TCL=10,故第4字节为12。
发送数据序列中第5字节“60”是WSP方法Post的代码,第6~49字节是WSP Post PDU。WSP Post PDU结构如表6所列。
第6字节“1A”是UriLen(26字节);第7字节“10”是HeadersLen(16字节);第8~33字节是Uri字段,URI=http:/mmsc.monternet.com/(中国移动梦网);第34字节“BE”是ContentType的内容类型(著名域值 applica—tion/vnd.wap.mms—message的代码),即Content Type=application/vnd.wap.mms—message;第35~49字节是由3个Header组成的Headers字段,第35、 36字节是第1个Header,第37、38字节是第2个Header,第39~49字节是第3个Header。
Headerl:80 BE(Accept:application/vnd.wap.mms—message)。
Header2:C7 80(Cashe Control:None)。
Header3:A1是域Proxy authorization的代码,第40字节“09”是域长度(9字节),第41字节“80”是Basic的代码,第42~44字节是User— id=wap,第46~48字节是Password=wap。
数据字段就是紧接着发送的MMS包。
服务器返回数据序列如下:
返回数据中,第1~3字节是WTP Result PDU,其余为WSP协议数据单元。WTP Result PDU格式与前面相同,只是TID=8001,与WTP Invoke PDU中的TID=0001相对应。
返回数据中第4字节“04”是WSP会话响应Reply的代码,第5~173字节是WSP Reply PDU。WSP ReplyPDU结构如表7所列。
第5字节“20”是Status编码,表示成功;第6、7字节“81 26”是Headers的长度(解码后为A6,即166个字节,从第8字节“61”到173字节“B1”);第8~38字节是Cont—entType的域值,ContentType=application/vnd.wap.
mms—message;第40~173字节是由6个Header组成的Headers字段,第40~52字节是第1个Header,第53~78字节是第2个Header,第79~111字节是第3个Header,第 112~143字节是第4个Header,第144~167字节是第5个Header,第168~173字节是第6个Header。
Header6:Date=48 29 41 EB,以秒计算的日期,起始日期为1970—01-01。
返回数据中,第174~209字节是Data字段,其内容与MMS头内容相对应,解码后含义:
2.4 控制设备发送WTP确认完成会话
控制设备发送WTP确认(WTP AcknowledgementPDU,3字节):1C 00 01。
WTP Acknowledgement PDU格式同表5。其中,CON=0,PDU Type=0011,Tve/Tok=1,RES=0,RID=0,故第l字节为1C;TID High Byte=00000000,故第2字节为00;TID Low Byte=00000001,故第3字节为01。
2.5 断开服务器连接
如果要退出数据模式,控制设备可通过UART串口传送符号+++,BENQ23G返回命令模式,但与服务器的Socket连接并没有断开。如果要断开 BENQ23G与服务器的Socket连接,则控制设备需通过UART串口发送ATH命令给BENQ23G模块。
3 结论
本文介绍了一种通过彩信传送图像的低成本远程监控系统。该系统采用Winbond公司的77E58单片机作为控制器,由外部报警传感器触发,控制串口摄像头捕获现场图像,封装MMS彩信,并通过控制BenQ公司的GSM/GPRS模块BENQ23G发送,同时还可以通过拨打预设号码将现场声音传送出去。