APP下载

基于ZigBee的图像传输系统设计与实现

2015-01-18谢真良李坤明陈诗华

湖北工业大学学报 2015年5期
关键词:字节串口无线

李 达,谢真良,李坤明,陈诗华

(1湖北工业大学机械工程学院,湖北 武汉430068;2湖北省农业机械研究设计院,湖北 武汉430068)

目前已经有不少无线传感器网络的应用实例,但其应用仅局限于温度、湿度、光照等少量物理数据信息的获取和传递。随着技术的发展,人们已经无法满足从环境中获取简单的信息,渴望获得图像等更加感性和丰富的信息。在此大背景下,无线多媒体传感器网络(Wireless Multimedia Sensor Net-Work)也就应运而生[1]。相比传统无线传感器网络而言,无线多媒体传感器网络更多地关注复杂多样的信息(尤其是视频图像等大量数据信息)的采集和处理,利用压缩、识别、融合和重建等多种技术处理采集到的图像信息,实现比传统传感器更全面的监控。ZigBee技术具有低成本、低功耗和自组网能力强等优点,但是ZigBee无线网络数据传输速率较低,不适合传输有大量数据的图像信息。本文就ZigBee技术实现图像信息传输开展研究。

1 图像采集传输系统总体方案

基于ZigBee技术图像采集传输系统是由图像采集节点、路由节点、协调器节点以及上位机等组成,其中图像采集节点端的数据量大,数据处理复杂。本文提出该节点采用S3C2440ARM微处理器,USB摄像头和CC2430ZigBee模块相连,并采用WinCE[2]作为节点的操作系统。该节点具有体积小、功能强大等优点,便于采用合理的图像压缩方法,减少图像传输数据量,以实现图像数据传输。与主机相连的CC2530ZigBee模块作为协调器,主要完成网络组建、控制终端节点加入、接收路由节点和终端节点发送过来的数据,当接收到数据后,通过串口输出到PC机。由于图像数据量大,一次传输图像数据比分组多次传输图像丢失数据包概率大,而且长时间占用信道会造成阻塞,影响WSN其他信息的传输。而且单节点频繁发送大数据量图像信息也会大大消耗节点能量,甚至造成节点死机,降低网络通信质量。为了使整个WSN负载均衡,避免单条路径上节点能量集中消耗,本文结合图像传输的特点,提出将采集的图像经压缩处理并分块,采用多信道多路径传输体系,经多串口、多线程[3]以达到数据高速传输,从而获得良好图像。系统总体框架结构如图1所示。

图1 系统总体框架图

2 图像采集节点设计

2.1 图像采集节点硬件设计

图像采集节点硬件主要包括S3C2440ARM微处理器、USB摄像头和多个支持ZigBee协议的CC2430模块组成,其硬件原理如图2所示。

2.2 图像采集节点端程序设计

2.2.1 图像采集驱动程序设计 使用USB接口摄像头采集图像。由于S3C2440下USB设备驱动开发只提供一些底层支持,尚未提供WinCE下USB摄像头驱动,因此需进行USB摄像头驱动开发。

流式驱动[4]是 WinCE驱动程序的一种常规方式,应用程序通过文件系统,透过设备管理器以访问文件的形式访问驱动程序,调用IOCTL向驱动程序下达指令,从而访问驱动程序及操作硬件。所有的流式驱动程序都需实现一组统一的接口。流式驱动框架如图3所示。

图2 图像采集节点硬件原理图

图3 流式接口驱动框架

USB摄像头驱动函数编写,通过添加CAM_Close,CAM_Deinit,CAM_Init,CAM_IOControl,CAM_Open,CAM_PowerDown,CAM_PowerUp,CAM_Read,CAM_Seek及CAM_Write函数实现对USB摄像头的操作。

由于ZigBee数据速率比较低,在2.4GHz的频段只有250Kb/s,而且这只是链路上的速率,除掉信道竞争应答和重传等消耗,真正能被利用的速率可能不足100Kb/s,并且余下的速率可能要被邻近多个节点和同一个节点的多个应用所瓜分[2]。在不适合做图像传输情况下,本文通过对图像进行MJPEG图像压缩,最大程度减小了图像的体积,以便于图像传输。开发软件平台为EVC++,核心代码如下:

f= DeviceIoControl(CAMdriver,IOCTL_CAMERA_DEVICE_GETSTILLIMAGE,&vf,

sizeof (VIDFORMATSTRUCT), * ppData,dwBuff,&dwBytes,NULL);

∥ 打开驱动调用获取图像

HANDLE hFile = CreateFile (lpszName,GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,0,NULL);

WriteFile (hFile,bHdr,sizeof (bHdr), &dwBytes,NULL);∥ 为文件写入DHT颜色段

WriteFile(hFile,MJPGDHTSeg,sizeof(MJPGDHTSeg),&dwBytes,NULL);

∥从图像中移走AVI头

2.2.2 ZigBee图像传输程序设计 本文提出多串口多线程通信实现图像信息传输。根据S3C2440扩展多个串口,在主线程里面完成串口初始化,并通过串口发送图像基本信息,新建3个子线程以查询方式接收数据,并按照图像数据协议回发图像数据。

本文无线模块协采用TI公司的Z-Stack[5]协议栈,支持ZigBee2006与ZigBee2007协议混合通信,其实现方式为修改2006协议栈里面的安全模式、通信信道和PANID等3个位置,和ZigBee2007保持一致就能解决混合节点通信的问题。在2006f8wConfig.cfg中修改为:

-DZDAPP_CONFIG_PAN_ID=0x00FF;∥网络标识符

-DDEFAULT_CHANLIST=0x00008000;∥修改通信信道

-DSECURE=0∥使安全性为0;

由于ZigBee传输能力有限,当采集到视频图像后将图像分块并编号,按照相应的数据传输协议进行多路径高速传输。第一次发送图像数据时,发送图像整体大小、子节点信息(表1)。图像传输节点根据接收上位机数据指令发送下一块数据和相应的编号,循环流式发送图像,图像采集节点与协调器节点通信流程如图4和图5所示。

由于ZigBee在物理层传输的每帧数据最大为127个字节[6],且其中还包括应用层、网络层、MAC层、物理层的帧头以及校验位,因此实际传输数据时,每帧数据只有约90个字节,本文则采用80个字节。由于帧头要有两个字节做应答以确定帧的类型,因此,每帧传输的有效数据为78位。当两个设备建立联系并初始化串口后,设备将开始从串口读取数据并将数据存入缓冲区中,当数据达到80个字节或者是发送图像数据最后剩余字节时,将数据发送到消息队列,然后通过消息发送机制将这帧数据发送到指定的设备,并将缓冲区尾指针指向区头。为了避免发送相同图像信息占用宝贵带宽,先发送图像帧描述信息,然后再发送图像数据信息,其数据包结构分别如表1和2所示。

图4 协调器接收端

图5 图像采集端

Typedef struct ImageData

{ unsigned short Image_number;∥图像编号

unsigned char Image_data[78];∥图像数据

}Image_Block

表1 图像帧描述数据包结构

表2 图像数据包结构

图像采集节点通过多串口连接多个无线模块协作发送分块图像数据包。当上位机接收到的图像信息小于图像整体大小,或收到数据信息有错误,就回发图像数据结构体中应答编号给相应串口以请求重新发送该组数据,如果没有错误就继续发送下一组图像数据,直到完全接收图片信息。当上位机接收到全部图像信息,发送图像接收完成确认应答给图像采集端,并请求发送下一帧图像数据。图像采集节点发送数据代码如下:

static void rxCB (uint8port,uint8event)

HalUARTRead(0,uartbuf,80); ∥ZigBee读串口数据

形制的新发展主要体现在:盖、碗组合基础上,碗托加入,形成固定的三件结构。功能同从古至今的盏托作用一样,故使得三件式盖碗相比两件式盖碗,更添了防烫便于端拿,茶汤溢出有所承接的优势。

osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);

∥发送端ZigBee对应程序当有数据的时候设置事件

if(events&SEND_DATA_EVENT)

afAddrType_t my_DstAddr; ∥节点信息结构体

my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;∥单播方式发送数据

my_DstAddr.endPoint=GENERICAPP_ENDPOINT;∥节点为终端节点

my_DstAddr.addr.shortAddr=0x0000;∥协调器网络地址AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,

80,uartbuf,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);

∥节点信息数据发送函数

return(events^SEND_DATA_EVENT);∥事件异或,将处理完事件清除

CC2430模块通过串口每次接收由ARM板发送的80个字节,并加上节点其他信息,将这些字节以单播的方式发送给网络地址为0x0000的协调器节点。当发送节点接收到协调器返回来编号指令后,接着发送下一块图像数据,直至整幅图像数据发送完毕。

3 上位机测试程序设计

当协调器发送图像请求指令给图像采集终端节点后,终端节点将该节点类型、网络地址、父节点信息以及传感器采集到的图像信息打包,通过无线传感器网络传给上位机,采用VC++的MFC绘制节点网络拓扑图并将获得的图像数据块数据融合后显示在PC机的界面上。

由于图像数据量大,需要分块传输,为了提高传输稳定性,获得完整图像,需要在PC端制订好数据接收、确认和重传机制协议。由于确认帧ACK在WSN中代价过高,传统的TCP/UDP协议无法满足图像传输。为此,本文结合TCP和UDP传输协议,在保证传输可靠性的同时也避免浪费带宽,提出了适合WSN图像传输协议。上位机接收到图像描述信息后,给全局变量动态申请内存,通过多串口接收图像数据,当接收到图像数据错误时,对该图像数据块进行处理并发送该数据块编号到终端节点,请求该数据重传。当接收数据正确则提取数据填充到全局变量数组中。

PC机通过多串口接收多个协调器数据,在MFC中引入Mscomm控件,初始化多个串口。当对应串口中达到80个字节,则通过串口事件消息处理函数解析数据包,提取信息;当收到结束标志位时即获得完整的数据块,将接收到数据块融合成图片,在界面上显示。对于非图像数据信息,采用 MSFlexGrid控件实时显示传感器采集数据信息,通过ADO对Access2003数据库操作,以保存信息。通过图像采集信息表和节点状态信息表,能将图像信息和节点状态信息保存在PC硬盘中,便于之后的研究分析,图像采集界面如图6所示。

图6 PC端图像采集界面

4 系统性能分析

采用单串口传输,从图像采集节点传输一张分辨率为160×120,3747字节图像,每次传输数据块设置为80字节,ZigBee理论传输速率为250Kb/s,则完成一次完整图像传输理论最短时间为:2×(48×80+5)×8/115200+(48×118+43)×8/250000=0.7166s。

当采用本文提出的多串口协作并行通信传输,传输时间理论上应大幅减少。在此搭建实验平台,两个ZigBee串口终端作为图像传输节点,两个Zig-Bee节点作为汇聚节点与PC交互,无路由节点。设置串口与ZigBee连接端波特率为115200bps,每次传输数据块为80字节,通过实验做50次传输,统计接收图像成功次数以及每次图像传输时间。结果成功接收48张,失效2张,接收成功率为96%,传输的50张图像,平均每张1.156s。虽理论上每张图像最短传输时间为0.3583s,因为图像是多串口分组并行传输,在单核处理器中,并行传输在实际运行过程中还是串行执行的,而且图像采集节点连续向协调器传输大量数据会造成信道拥塞,可靠信差,为了获得完整可靠的图像建立的反馈、重发机制也占用了一定时间。造成传输失效的主要原因是Zig-Bee网络不稳定,以及传输过程的拥塞。

5 结论

本文构建了基于WinCE系统下ZigBee的无线传感器网络的图像传输平台,在此平台下实现了图像采集、传输、存储、显示。通过设计硬件节点及其软件,与常规的无线传感器网络的数据传输方式相比,性能有所提高,但传输效率仍较低,其性能还有待进一步完善。

[1] 刘 磊.基于无线传感器网络的视频传输技术研究[D].北京:华北电力大学,2012.

[2] Muench C.The windows ce technology tutorial:solutions for the developer[M].北京:中国电力出版社,2001.

[3] 李 勇.一个多串口多线程数据采集系统软件的设计与实现[J].微计算机信息,2006(16):152-154.

[4] 周立功.ARM&WinCE实验与实践—基于S3C2410[M].北京:北京航空航天大学出版社 ,2007.

[5] 王小强,欧阳骏,黄宁淋.无线传感器网络设计与实现[M].北京:化学工业出版社,2012.

[6] ZigBee Alliance.EEE 802.15.4-2003Wireless Medium Access Control(MAC)and Physical Layer(PHY)Specifications for Low Rate Wireless Personal Area Networks[S].2003.

猜你喜欢

字节串口无线
No.8 字节跳动将推出独立出口电商APP
《无线互联科技》征稿词(2021)
浅谈AB PLC串口跟RFID传感器的通讯应用
No.10 “字节跳动手机”要来了?
无线追踪3
基于ARM的无线WiFi插排的设计
简谈MC7字节码
ADF7021-N在无线寻呼发射系统中的应用
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信