论文部分内容阅读
摘要:本文设计了一套经济实用的数字家庭监控系统。该系统以装有嵌入式Linux的ARM为开发平台,以廉价的USB摄像头为图像采集设备。一旦获得图像,就可以通过GPRS发送,然后在监控中心复原图像,以实现远程的安全监控。整个系统开发成本低,运行可靠,使用方便。
关键词:嵌入式Linux;GPRS;USB
中图分类号:TP338文献标识码:B文章编号:1009-3044(2007)03-10819-02
1 引言
随着宽带的普及和提速,以及3G的呼之欲出,视频监控在个人用户市场,特别是家庭安全监控领域的需求也开始冒头。
以前家庭监控采用的是有线网络监控,这样不但在组建监控系统时布线比较麻烦,在拆迁的时候也给用户带来巨大的工作量。
而无线监控系统与有线监控系统相比,具有很大的优势。如:综合成本低;组网灵活,可扩展性好,安装快速;系统功能强大、利用灵活、方便于保存和检索;安全性较高,无线网络可以具有多重加密手段。
本研究正是基于这一需求而相应提出。在网络传输上,采用了无线网络传输的方式,让监控点可以随时“移动”。同时,采用了USB摄像头技术,在实现即插即用和可移动功能的同时,也降低了生产成本。
2 系统组成及工作原理
本系统采用Samsung 公司的S3C2410 芯片为微处理器。这是一款ARM920T芯片,集成了MMU单元,能够在203MHz的频率下达到101BogoMIPS 的处理能力。芯片内部集成了符合OHCI 标准的USBHOST控制器,以及串口等输入输出接口,符合本系统的要求。
操作系统采用ARM - LINUX。它提供对MMU 的支持,能够最大限度的发挥S3C2410 的各种特性。并且它集成了很多网络协议,让网络传输变的更加容易实现。
USB 摄像头种类众多,但是对于Linux 应用来讲,主要的区别是其中的USB 桥芯片。目前市场上较为通用的是OmniVision 公司的OV511 + 。该芯片符合USB1.1 标准,提供I2C 接口,能够控制许多Sensor 。本系统使用的USB摄像头即采用了该芯片。
GPRS模块采用西门子公司提供的MC35 GPRS 模块。他的优势在于:永久在线连接、快速数据存储和数据下载速度。接口为标准的RS232双向接口。系统的结构框图如图1所示。
本系统传输的是静态图像,在降低了无线传输成本的同时尽可能地获取了有效的信息。在无线网络方面,采用了目前较为稳定又以流量来计费的GPRS方式,经济而且实用。
本系统可以设计成多种运行方式,如报警监控、定时监控和询问式监控。
在报警监测方式下,如有异常状况发生,则系统驱动USB摄像头拍摄图片,然后经压缩保存后由GPRS传输图像,并在监控中心上复原图像,处理异常情况。
在定时监控下,终端每隔一定时间发送图片到中心,让监控者随时了解家中情况。
在询问式监控方式下,监控者可以通过监控中心发送命令到终端,令其拍照并将结果反馈监控中心。
本系统中的监控中心,既可以是家用的个人电脑,也可以是现在正火速发展的智能手机,后者可以更加方便地实现“可移动”式监控,并可第一时间掌握情报以采取及时的行动。
2006年,上海试运行了无线测控网,它广泛用于城市应急防灾、防盗、家庭安全监控等领域。因此这里还指出了一种通过测控网专网传输的方案作为补充,这样和定位结合起来,就可以更好地发挥监控的作用。
3 基于V4L的USB图像截取
USB 摄像头因其灵活、小巧、方便的特性,正成为越来越多的监控应用的首选设备,在嵌入式Linux上要使USB摄像头工作起来,首要问题是解决驱动程序的问题,然后在驱动提供的API接口函数的基础上,编写应用程序来实现图像的截取等操作。
3.1 USB摄像头驱动程序的实现
驱动程序是内核和外设之间的接口。在Linux 下,设备驱动程序相当于一个个独立的“黑盒子”,使某个特定的硬件设备响应一个定义良好的内部编程接口,同时完全隐藏了设备的工作细节。
在嵌入式Linux系统中,USB驱动程序和内核的关系图如图2所示。由于在Linux系统中已经内置了USB Core, 而主控制器的驱动生产模块芯片的厂商一般都会提供,因此我们仅需考虑针对USB设备端的驱动模块。由于Linux操作系统本身支持OV511的摄像头,所以,只要修改驱动的一部分代码使之适合ARM体系结构,在运行的时候动态地加载在内核中就可以顺利地驱动我们的摄像頭了。
在OV511的驱动中,我们发现它有许多种输出格式,最后我们选择了RGB565的输出方式,在不严重影响图像质量的前提下尽可能地减小图片占用的空间。
3.2 用V4L获取图像
V4L(Video4Linux)是Linux中关于视频设备的内核驱动,他为针对视频设备的应用程序编程提供一系列接口函数,在Linux下,视频采集设备的正常使用依赖于对Video4 Linux标准的支持。
对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open、read、write、close的实现。对中断的处理实现,内存映射功能以及对I/O通道的控制接口函数ioct1的实现等,并把它们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数。
图3 采集任务程序流程
采集任务的软件程序实现流程如图3所示,由于采集得到的图像为BMP格式,因此需要将其进行压缩,这里我们用比较流行的JPEG方式来压缩图像。采集后的图像大小只有几K,大大缩减了占用的空间。
4 GPRS传输与Socket编程实现
PPP(点对点协议)是在串行线路上运行IP以及其他网络协议的一种机制,使用PPP拨号上网,我们可以顺利地让我们的嵌入式系统访问Internet网络,进行数据交换。
4.1嵌入式Linux系统中的PPP拨号
我们在Linux 中,通过在数据链路层上使用PPP 协议,就可使用Modem连接上Internet 。PPP包含三部分:在串行链路上封装IP 数据包;建立、配置及测试链路的LCP;针对不同网络层协议的NCP 体系。
嵌入式Linux 网络系统支持两个实体之间的网络连接和Sockets 通信模型。它实现了两种类型的Sockets,即BSDSockets 和INET Sockets。BSD Sockets 是用INET Sock2ets实现的。
Sockets 的建立和管理是通过Socket系统调用实现,数据的发送和接收是用Read 和Write 系统调用实现的。整体结构如图4所示。
从图中可以看到,PPP协议处于比较低的数据链路层,它在内核中实现了一个网络接口PPP0。PPP的实现实际上注册了一个网络接口。通过该接口可以向IP层提供接收和发送数据的服务。同时PPP也注册了一个虚拟的驱动程序代替TTY终端例程,它使用串口驱动连接Modem 进而连接Internet,这样PPP 可在物理层与Internet 进行数据交换。
在PPP连接过程中和网络层数据包发送及接收中,要用到PPP 虚拟驱动程序,即PPP 例程,它负责PPP帧的发送和接受。
在发送时,在传输前根据需要对PPP 帧的开头和结尾加上标志序列,使用256 位的异步传输转义位图对PPP帧中的特殊字符进行转义处理,转义字符为0x7D;转义编码完成后,PPP帧的16 位CRC校验码被添加到输出流末尾。这些工作完成后,就调用串口驱动通过Modem 发送到Internet 。
4.2 GPRS发送图像
GPRS(General Packet Radio Service)是一种基于GSM 的新型移动分组数据承载业务,支持基于标准数据协议,尤其是TCP/IP 协议的应用,从而保证移动互联网的实现,还可以实现与外部数据网的互联。嵌入式Linux 下GPRS 数据传输系统的结构原理如图5。
图5 GPRS传输过程
待传输的数据由嵌入式Linux操作系统传给GPRS通信模块,GPRS通过移动通信网络将其传输给Internet,并由服务控制端接收。我们在通过PPP拨号上网以后,GPRS 数据传输主要通过Linux 环境下的网络编程实现,即TCP 套接字编程。套接字描述了一个连结的一个端点,提供网络应用程序中所用到的网络地址和端口号信息,对所包含的数据量没有限制。目前大多数网络应用程序在编写时都采用客户—服务器模式,假定一端是客户,另一端是服务器,让服务器提供给客户一定的服务内容。一个TCP连结的建立开始于TCP 客户机创建一个套接字,然后调用connect函数启动TCP协议的三段握手操作,并与远程服务器建立连接。在服务器方面,当套接字建立以后,调用函数bind绑定自己的公认端口号,然后调用listen准备接收客户端请求,最后调用accept 完成接收,结束一次通信。这样就实现了GPRS的数据传输。
5 监控服务器设计
通信服务器软件采用可视化开发环境VB 6.0编程实现。VB的Winsock控件可以与远程计算机建立连接,并通过TCP或UDP进行数据交换。作为通信服务器端,需设置该控件的Bind属性,使该控件绑定到本机IP地址和某一端口并使用Listen方法将其设置为侦听模式。通过以上方法就可以使应用程序工作于服务器模式,当客户端有服务请求时,控件会自动在该事件中使用Accept方法接受新连接,服务器与客户端握手成功。在双方建立连接后,服务器就可以接收客户端发送过来的数据信息,使用该控件的GetData方法读取接收缓冲区的数据,作出相应的处理。
6 结束语
随着无线通信技术以及嵌入式开发技术的飞速发展,家庭安防产品也将出现新的变化,本研究正是基于这一发展潮流而提出的。USB摄像头的小巧廉价,嵌入式Linux的强大功能,还有GPRS的稳定和按流量计费,不管是在轻便性还是节约成本方面都提供了一个不错的选择。同时,系统还实现了报警监控、定时监控等功能。我们可以想象,在不久的将来,人们可以很方便的实现“出门在外,心中有数”。
参考文献:
[1]钟章队,蒋文怡,李红军.等.GPRS 通用分组无线业务[M].人民邮电出版社,2004.
[2]邹思轶.嵌入式LINUX 设计系统与应用[M].清华大学出版社,2001.
[3]戴元军.Linux系统下的网络编程技术[J].应用科技, 2001.(6): 29-31.
[4]黄德强.采用嵌入式LINUX 技術与GPRS 网络实现无线数据采集与传输[J].电子器件,2003,(6).
[5]邓晓艳,吴荣泉,李双全.等.基于Linux 移动终端的GSM/GPRS 无线通信的原理与实现[J].计算机工程,2003,(2).
[6]W Simpson. The Point To Point Protocol RFC1661.1994(1).
[7]林宇,郭凌云. L inux网络编程[M].北京:人民邮电出版社, 2000.
[8]OmniVision Tecnologies,Inc OV511 + Data Sheet,2000.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:嵌入式Linux;GPRS;USB
中图分类号:TP338文献标识码:B文章编号:1009-3044(2007)03-10819-02
1 引言
随着宽带的普及和提速,以及3G的呼之欲出,视频监控在个人用户市场,特别是家庭安全监控领域的需求也开始冒头。
以前家庭监控采用的是有线网络监控,这样不但在组建监控系统时布线比较麻烦,在拆迁的时候也给用户带来巨大的工作量。
而无线监控系统与有线监控系统相比,具有很大的优势。如:综合成本低;组网灵活,可扩展性好,安装快速;系统功能强大、利用灵活、方便于保存和检索;安全性较高,无线网络可以具有多重加密手段。
本研究正是基于这一需求而相应提出。在网络传输上,采用了无线网络传输的方式,让监控点可以随时“移动”。同时,采用了USB摄像头技术,在实现即插即用和可移动功能的同时,也降低了生产成本。
2 系统组成及工作原理
本系统采用Samsung 公司的S3C2410 芯片为微处理器。这是一款ARM920T芯片,集成了MMU单元,能够在203MHz的频率下达到101BogoMIPS 的处理能力。芯片内部集成了符合OHCI 标准的USBHOST控制器,以及串口等输入输出接口,符合本系统的要求。
操作系统采用ARM - LINUX。它提供对MMU 的支持,能够最大限度的发挥S3C2410 的各种特性。并且它集成了很多网络协议,让网络传输变的更加容易实现。
USB 摄像头种类众多,但是对于Linux 应用来讲,主要的区别是其中的USB 桥芯片。目前市场上较为通用的是OmniVision 公司的OV511 + 。该芯片符合USB1.1 标准,提供I2C 接口,能够控制许多Sensor 。本系统使用的USB摄像头即采用了该芯片。
GPRS模块采用西门子公司提供的MC35 GPRS 模块。他的优势在于:永久在线连接、快速数据存储和数据下载速度。接口为标准的RS232双向接口。系统的结构框图如图1所示。
本系统传输的是静态图像,在降低了无线传输成本的同时尽可能地获取了有效的信息。在无线网络方面,采用了目前较为稳定又以流量来计费的GPRS方式,经济而且实用。
本系统可以设计成多种运行方式,如报警监控、定时监控和询问式监控。
在报警监测方式下,如有异常状况发生,则系统驱动USB摄像头拍摄图片,然后经压缩保存后由GPRS传输图像,并在监控中心上复原图像,处理异常情况。
在定时监控下,终端每隔一定时间发送图片到中心,让监控者随时了解家中情况。
在询问式监控方式下,监控者可以通过监控中心发送命令到终端,令其拍照并将结果反馈监控中心。
本系统中的监控中心,既可以是家用的个人电脑,也可以是现在正火速发展的智能手机,后者可以更加方便地实现“可移动”式监控,并可第一时间掌握情报以采取及时的行动。
2006年,上海试运行了无线测控网,它广泛用于城市应急防灾、防盗、家庭安全监控等领域。因此这里还指出了一种通过测控网专网传输的方案作为补充,这样和定位结合起来,就可以更好地发挥监控的作用。
3 基于V4L的USB图像截取
USB 摄像头因其灵活、小巧、方便的特性,正成为越来越多的监控应用的首选设备,在嵌入式Linux上要使USB摄像头工作起来,首要问题是解决驱动程序的问题,然后在驱动提供的API接口函数的基础上,编写应用程序来实现图像的截取等操作。
3.1 USB摄像头驱动程序的实现
驱动程序是内核和外设之间的接口。在Linux 下,设备驱动程序相当于一个个独立的“黑盒子”,使某个特定的硬件设备响应一个定义良好的内部编程接口,同时完全隐藏了设备的工作细节。
在嵌入式Linux系统中,USB驱动程序和内核的关系图如图2所示。由于在Linux系统中已经内置了USB Core, 而主控制器的驱动生产模块芯片的厂商一般都会提供,因此我们仅需考虑针对USB设备端的驱动模块。由于Linux操作系统本身支持OV511的摄像头,所以,只要修改驱动的一部分代码使之适合ARM体系结构,在运行的时候动态地加载在内核中就可以顺利地驱动我们的摄像頭了。
在OV511的驱动中,我们发现它有许多种输出格式,最后我们选择了RGB565的输出方式,在不严重影响图像质量的前提下尽可能地减小图片占用的空间。
3.2 用V4L获取图像
V4L(Video4Linux)是Linux中关于视频设备的内核驱动,他为针对视频设备的应用程序编程提供一系列接口函数,在Linux下,视频采集设备的正常使用依赖于对Video4 Linux标准的支持。
对于USB口摄像头,其驱动程序中需要提供基本的I/O操作接口函数open、read、write、close的实现。对中断的处理实现,内存映射功能以及对I/O通道的控制接口函数ioct1的实现等,并把它们定义在struct file_operations中。这样当应用程序对设备文件进行诸如open、close、read、write等系统调用操作时,Linux内核将通过file_operations结构访问驱动程序提供的函数。
图3 采集任务程序流程
采集任务的软件程序实现流程如图3所示,由于采集得到的图像为BMP格式,因此需要将其进行压缩,这里我们用比较流行的JPEG方式来压缩图像。采集后的图像大小只有几K,大大缩减了占用的空间。
4 GPRS传输与Socket编程实现
PPP(点对点协议)是在串行线路上运行IP以及其他网络协议的一种机制,使用PPP拨号上网,我们可以顺利地让我们的嵌入式系统访问Internet网络,进行数据交换。
4.1嵌入式Linux系统中的PPP拨号
我们在Linux 中,通过在数据链路层上使用PPP 协议,就可使用Modem连接上Internet 。PPP包含三部分:在串行链路上封装IP 数据包;建立、配置及测试链路的LCP;针对不同网络层协议的NCP 体系。
嵌入式Linux 网络系统支持两个实体之间的网络连接和Sockets 通信模型。它实现了两种类型的Sockets,即BSDSockets 和INET Sockets。BSD Sockets 是用INET Sock2ets实现的。
Sockets 的建立和管理是通过Socket系统调用实现,数据的发送和接收是用Read 和Write 系统调用实现的。整体结构如图4所示。
从图中可以看到,PPP协议处于比较低的数据链路层,它在内核中实现了一个网络接口PPP0。PPP的实现实际上注册了一个网络接口。通过该接口可以向IP层提供接收和发送数据的服务。同时PPP也注册了一个虚拟的驱动程序代替TTY终端例程,它使用串口驱动连接Modem 进而连接Internet,这样PPP 可在物理层与Internet 进行数据交换。
在PPP连接过程中和网络层数据包发送及接收中,要用到PPP 虚拟驱动程序,即PPP 例程,它负责PPP帧的发送和接受。
在发送时,在传输前根据需要对PPP 帧的开头和结尾加上标志序列,使用256 位的异步传输转义位图对PPP帧中的特殊字符进行转义处理,转义字符为0x7D;转义编码完成后,PPP帧的16 位CRC校验码被添加到输出流末尾。这些工作完成后,就调用串口驱动通过Modem 发送到Internet 。
4.2 GPRS发送图像
GPRS(General Packet Radio Service)是一种基于GSM 的新型移动分组数据承载业务,支持基于标准数据协议,尤其是TCP/IP 协议的应用,从而保证移动互联网的实现,还可以实现与外部数据网的互联。嵌入式Linux 下GPRS 数据传输系统的结构原理如图5。
图5 GPRS传输过程
待传输的数据由嵌入式Linux操作系统传给GPRS通信模块,GPRS通过移动通信网络将其传输给Internet,并由服务控制端接收。我们在通过PPP拨号上网以后,GPRS 数据传输主要通过Linux 环境下的网络编程实现,即TCP 套接字编程。套接字描述了一个连结的一个端点,提供网络应用程序中所用到的网络地址和端口号信息,对所包含的数据量没有限制。目前大多数网络应用程序在编写时都采用客户—服务器模式,假定一端是客户,另一端是服务器,让服务器提供给客户一定的服务内容。一个TCP连结的建立开始于TCP 客户机创建一个套接字,然后调用connect函数启动TCP协议的三段握手操作,并与远程服务器建立连接。在服务器方面,当套接字建立以后,调用函数bind绑定自己的公认端口号,然后调用listen准备接收客户端请求,最后调用accept 完成接收,结束一次通信。这样就实现了GPRS的数据传输。
5 监控服务器设计
通信服务器软件采用可视化开发环境VB 6.0编程实现。VB的Winsock控件可以与远程计算机建立连接,并通过TCP或UDP进行数据交换。作为通信服务器端,需设置该控件的Bind属性,使该控件绑定到本机IP地址和某一端口并使用Listen方法将其设置为侦听模式。通过以上方法就可以使应用程序工作于服务器模式,当客户端有服务请求时,控件会自动在该事件中使用Accept方法接受新连接,服务器与客户端握手成功。在双方建立连接后,服务器就可以接收客户端发送过来的数据信息,使用该控件的GetData方法读取接收缓冲区的数据,作出相应的处理。
6 结束语
随着无线通信技术以及嵌入式开发技术的飞速发展,家庭安防产品也将出现新的变化,本研究正是基于这一发展潮流而提出的。USB摄像头的小巧廉价,嵌入式Linux的强大功能,还有GPRS的稳定和按流量计费,不管是在轻便性还是节约成本方面都提供了一个不错的选择。同时,系统还实现了报警监控、定时监控等功能。我们可以想象,在不久的将来,人们可以很方便的实现“出门在外,心中有数”。
参考文献:
[1]钟章队,蒋文怡,李红军.等.GPRS 通用分组无线业务[M].人民邮电出版社,2004.
[2]邹思轶.嵌入式LINUX 设计系统与应用[M].清华大学出版社,2001.
[3]戴元军.Linux系统下的网络编程技术[J].应用科技, 2001.(6): 29-31.
[4]黄德强.采用嵌入式LINUX 技術与GPRS 网络实现无线数据采集与传输[J].电子器件,2003,(6).
[5]邓晓艳,吴荣泉,李双全.等.基于Linux 移动终端的GSM/GPRS 无线通信的原理与实现[J].计算机工程,2003,(2).
[6]W Simpson. The Point To Point Protocol RFC1661.1994(1).
[7]林宇,郭凌云. L inux网络编程[M].北京:人民邮电出版社, 2000.
[8]OmniVision Tecnologies,Inc OV511 + Data Sheet,2000.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。