引言
目前,基于GSM/GPRS模块的无线远程监控系统大多数采用嵌入式处理器,选用Linux操作系统。本文介绍一种采用Winbond公司的77E58单片机控制明基的GSM/GPRS模块BENQ23G发送MMS彩信的方法。该方法成本低、可靠性高,器件选用工业级产品,能够在较宽温度范围内工作,即使在室外较恶劣的环境下也可以使用。
本系统组成如图1所示。其中,单片机77E58有2个串口,串口0用于与BENQ23G模块进行通信,控制BENQ23G发送彩信;串口1用于与串口摄像头(如C328JPEG模块)进行通信,控制摄像头捕获图像。外部传感器报警接口用于连接外部报警传感器,77E58最小系统收到外部传感器报警触发信号后,捕获照片、封装MMS彩信,控制BENQ23G模块向指定的手机或远程接收设备发送彩信;同时还可以拨打指定电话号码,将现场声音传送过去。MIC及信号放大电路用于采集外部现场声音并进行放大。
图1 无线远程监控系统结构框图
从前面的分析可以看出,本系统充分利用了各个部件的硬件资源,最大限度地降低了硬件成本。本文主要介绍图1所示的无线远程监控系统通过中国移动梦网发送彩信时,所使用的传输协议命令格式和传输数据格式。
1 BENQ23G模块简介
BENQ23G是台湾BenQ公司生产的嵌入TCP/IP协议的GSM/GPRS模块,在BENQ23A模块的基础上增加了M2M(MachinetoMachine)功能,可以通过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连接。
下面给出一个控制设备和彩信网关服务器连接的例子:
AT$TIMEOUT=2000
$TIMEOUT: 2000
OK
AT$NOSLEEP=1
OK
AT+CGDCONT=1,"IP","CMWAP"
OK
AT%CGPCO=1,"PAP,,",1
OK
AT$DESTINFO="10.0.0.172",2,9201,0
$DESTINFO:"10.0.0.172",2,9201,0
OK
ATD*97#
Wait Socket Open
(通过UART串口上传和下载数据)
+++
OK
CONNECT
OK
ATH
OK
NO CARRIER
该例子说明如何通过BENQ23G模块实现和远程服务器的连接,以及上传和下载数据。BENQ23G模块AT指令的详细说明见参考文献[1]。
测试MMS组成及编码格式分析略,详细的编码含义见参考文献[2]和[3]。
2 基于BENQ23G发送MMS编码格式分析
当控制设备需要发送彩信时,首先通过UART串口传送AT指令完成相应的参数设置(如前面例子所示),再传送“ATD*97#”指令进行GPRS拨号,并等待BENQ23G模块完成与服务器之间的Socket连接。当收到BENQ23G模块发送的响应“Wait Socket Open”时,表明BENQ23G模块完成了与服务器的连接,并进入数据模式,控制设备可以进行发送彩信操作。
2.1 首先建立会话连接
控制设备发送会话建立连接请求(8字节):
0001 0A 00 00 12 01 10 00 00
发送数据序列中前4字节“0A 00 00 12”是WTP Invoke PDU。WTP Invoke PDU采用了固定长度格式,其结构如表1所列。
表1 WTP Invoke PDU结构
其中,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 00 00”是WSP协议数据单元。其中第5字节“01”是WSP会话连接Connect的代码,第6到8字节是WSP Connect PDU。WSP Connect PDU结构如表2所列。
表2 WSP Connect PDU结构
其中,第6字节“10”是WSP协议版本号,高4位是版本号的整数部分,低4位是版本号的小数部分,这里为V1.0;第7字节是能力字段长度,没有使用能力请求,故长度为00;第8字节是报头字段长度,没有报头,故长度为00。
服务器返回数据如下(30字节):
0001 12 80 00 02 B5 C5 15 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 gversion.1.2...
返回数据中第1~3字节是WTP Result PDU,其余为WSP协议数据单元。WTP Result PDU采用固定长度格式,其结构如表3所列。
表3 WTP Result PDU结构
其中,CON=0,PDU Type=0010,GTR=0,TTR=1,RID=0,故第1字节为12;TID High Byte=10000000,故第2字节为80;TID Low Byte=00000000,故第3字节为00。
返回数据中的第4字节“02”是WSP会话连接确认ConnectReply的代码;第5~30字节是WSP ConnectReply PDU。
WSP ConnectReply PDU结构如表4所列。
表4 WSP ConnectReply PDU结构
第5~8字节“B5 C5 15”是会话标识;第10字节“15”是HeadersLen(21字节),Headers是以00结束的字符串,即Encodingversion 1.2。
2.2 控制设备发送WTP确认完成会话连接
控制设备发送WTP确认(WTP Acknowledgement,3字节):18 00 00。WTP Acknowledgement PDU采用固定长度格式,如表5所列。
表5 WTP Acknowledgement PDU固定报头结构
其中,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字节为00。
2.3 控制设备发送WTP、WSP和MMS包
控制设备首先发送WTP和WSP(49字节):
0001 0E 00 01 12 60 1A 10 68 74 74 70 3A 2F 2F 6D 6D .......http://mm
0017 73 63 2E 6D 6F 6E 74 65 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”是WTP Invoke 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的内容类型(著名域值application/vnd.wap.mmsmessage的代码),即Content Type=application/vnd.wap.mmsmessage;第35~49字节是由3个Header组成的Headers字段,第35、36字节是第1个Header,第37、38字节是第2个Header,第39~49字节是第3个Header。
Header1:80 BE (Accept:application/vnd.wap.mmsmessage)。
Header2:C7 80 (Cashe Control:None)。
Header3:A1是域Proxy authorization的代码,第40字节“09”是域长度(9字节),第41字节“80”是Basic的代码,第42~44字节是Userid=wap,第46~48字节是Password=wap。
数据字段就是紧接着发送的MMS包。
表6 WSP Post PDU结构
服务器返回数据序列如下:
0001 12 80 01 04 20 81 26 61 70 70 6C 69 63 61 74 69 .......applicati
0017 6F 6E 2F 76 6E 64 2E 77 61 70 2E 6D 6D 73 2D 6D on/vnd.wap.mmsm
0033 65 73 73 61 67 65 00 A6 52 65 73 69 6E 2F 33 2E essage..Resin/3.
0049 30 2E 37 00 78 2D 68 75 61 77 65 69 2D 6D 6D 73 0.7.xhuaweimms
0065 63 2D 74 69 64 00 30 30 30 30 30 30 31 00 78 3D ctid.0000001.x
0081 68 75 61 77 65 69 2D 6D 6D 73 63 2D 66 72 6F 6D huaweimmscfrom
0097 00 38 36 31 33 36 39 31 31 33 35 37 35 37 00 78 .8613691135757.x
0113 2D 68 75 61 77 65 69 2D 6D 6D 73 63 2D 74 6F 00 huaweimmscto.
0129 2B 38 36 31 33 36 35 31 32 35 38 35 36 36 00 78 +8613651258566.x
0145 2D 68 75 61 77 65 69 2D 6D 6D 73 63 2D 63 6F 64 huaweimmsccod
0161 65 00 2D 31 32 38 00 92 04 48 7F F7 B1 8C 81 98 e.128...H......
0177 30 30 30 30 30 30 31 00 8D 90 8B 30 37 31 38 30 0000001....07180
0193 39 35 33 33 37 39 31 30 30 30 31 31 33 31 31 33 9533791000113113
0209 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
返回数据中,第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 Reply PDU结构如表7所列。
第5字节“20”是Status编码,表示成功;第6、7字节“81 26”是Headers的长度(解码后为A6,即166个字节,从第8字节“61”到173字节“B1”);第8~38字节是ContentType的域值,ContentType =application/vnd.wap.mmsmessage;第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。
表7 WSP Reply PDU结构
Header3:xhuaweimmscfrom:8613691135757。
Header4:xhuaweimmscto:+8613651258566。
Header5:xhuaweimmsccode:128。
Header6:Date=48 29 41 EB,以秒计算的日期,起始日期为19700101。
返回数据中,第174~209字节是Data字段,其内容与MMS头内容相对应,解码后含义:
XMMSMessageType:msendconf
XMMSTransactionID:000000
XMMSVersion:1.0
MessageID:051315232391000101241
2.4 控制设备发送WTP确认完成会话
控制设备发送WTP确认(WTP Acknowledgement PDU,3字节):1C 00 01。
WTP Acknowledgement PDU格式同表5。其中,CON=0,PDU Type=0011,Tve/Tok=1,RES=0,RID=0,故第1字节为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发送,同时还可以通过拨打预设号码将现场声音传送出去。
本文介绍了BENQ23G模块的M2M功能;通过测试发送的MMS例子,深入分析了采用BENQ23G经由中国移动梦网发送MMS彩信时与网关服务器之间通信方式、方法,以及传输协议命令格式和传输数据格式。