4.2 USB 摄像头程序
在Linux kernel 源码目录中driver/usb/usb-skeleton.c 提供了一个基础的USB 驱动程序。通过它仅需要修改极少的部分,就可以完成一个USB 设备的驱动。重新编译内核生成摄像头驱动文件,然后执行insmod 加载USB 摄像头驱动,Linux 系统就在/dev 目录下注册了USB 视频设备/dev/video0。
摄像头驱动程序安装好后为了进行视频采集必须加入Video4Linux 模块,Video4Linux 是Linux 中关于视频设备的内核驱动,它为针对视频设备的应用程序提供一系列接口函数。对于USB 口摄像头, 其驱动程序中需要提供基本的I/O 操作接口函数open、close、read、write 等的实现。对中断的处理实现,内存映射功能以及I/O 通道的控制接口函数ioctl 的实现等, 并把它们定义在struct file_operations 中。这样当应用程序对设备文件进行诸如open、close、read、write 等系统调用函数时,Linux 内核将通过file_operations 结构体访问驱动程序提供的函数。
4.3 ZigBee 协调器和设备节点程序
ZigBee 家庭无线网络主要负责对现场各种信息的监控以及数据的采集, 并将内部处理过的数据经家庭网关传送到外部网络。本系统中ZigBee 协调器主要用于建立无线网络,分配地址,向终端节点发送控制命令和接收终端节点的工作状态,并将接收到的状态数据全部上传至Web 服务器, 最后通过Internet传送到远端的用户端。终端设备节点主要有加入网络,接收控制命令,以及发送状态信息给协调器等。协调器主程序流程如图2所示。
4.4 Web 服务器
Web 服务器的作用是监听用户的服务请求, 并根据用户的请求给出相应的服务。服务器和客户端浏览器之间的通信协议是超文本传输协议HTTP。HTTP 协议规定了发送和请求的标准方式, 浏览器和服务器之间传输的消息格式及各种控制信息。Linux 支持boa、httpd、thttpd 等几种Web 服务器, 其中boa 是一款单任务的Web 服务器软件,源代码开放,速度快,性能优秀,支持能够实现动态Web 技术的CGI(Common Gateway Interface)技术,特别适合应用在嵌入式系统中。
CGI 提供了一个Web 服务器的外部程序通道,运行在服务器上,由浏览器输入触发,是Web 服务器和系统中其他程序连接的通道。CGI 程序就是符合这种接口的程序。服务器接收到用户的请求,并将数据送给CGI 程序,CGI 程序接收到数据后,启动编写好的应用程序,并按照用户提供的数据执行。应用程序执行完成后,返回执行结果,并通过Web 服务器传送给用户浏览器显示。
本系统采用了CGI 来实现动态Web 技术,CGI 规定了Web服务器调用其他可执行程序(CGI 程序)的接口协议标准。Web服务器通过CGI 程序实现和浏览器的交互,也就是CGI 程序接受浏览器发送给Web 服务器的信息进行处理,将响应结果再回送给Web 服务器及浏览器。CGI 程序可以用多种程序设计语言编写, 本系统选用C 语言编写的CGI 程序。嵌入式Web 服务器工作流程如图3 所示。
5 系统测试
将服务器用网线和电脑主机相连, 服务器的地址设为192.168.1.6,电脑主机地址为192.168.1.8(只要主机IP 和服务器IP 处在同一个网段就可以)。
系统的网页包括家电系统、安防系统和视频画面三个页面,这三个画面可以相互切换, 在浏览器输入服务器IP 对系统进行测试,并选择摄像头远程控制画面,摄像头采集的视频画面截图如图4 所示。
6 结论
本文设计的智能家居综合控制系统,采用ZigBee 技术组建家庭内部无线网络, 用USB 摄像头实时采集家庭视频信息,在S3C2440A 为控制核心的硬件平台移植嵌入式Linux 操作系统和Web 服务器完成家庭网关的设计,经过实际测试,本系统达到了家庭信息网络化的目的,实现了对家庭设备远程监控的愿望。系统的功能强大,功耗低,实现简单,具有广阔的应用前景。
本文的创新点:(1)采用ZigBee 技术避免了传统家庭监控系统的布线难问题。(2)USB 摄像头的使用让我们不但可以查看设备的数字信息,还可以直观的看到动态画面。(3)Web 服务器和CGI 技术的使用, 可以实现利用远端PC 机操控家庭的设备,达到了远程监控的目的。
评论
查看更多