【《嵌入式智能实验室管理系统设计》10000字】_第1页
【《嵌入式智能实验室管理系统设计》10000字】_第2页
【《嵌入式智能实验室管理系统设计》10000字】_第3页
【《嵌入式智能实验室管理系统设计》10000字】_第4页
【《嵌入式智能实验室管理系统设计》10000字】_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式智能实验室管理系统设计摘要自21世纪以来,国内物联网技术的发展日新月异。基于物联网技术的各种系统和人工智能相应问世,如:智能家居系统、智能电网系统、智能物流管理系统、图书管理系统、跟踪定位系统等。越来越多基于Internet的系统的出现使我们看到了事物互连的巨大前景。这些系统的出现也使我们的生活更加方便,管理更加方便。为加强对学校开放实验室的日常监测、管理和指导,将实时化、智能化管理融入管理,提高开放实验室的综合利用率和安全管理水平。本设计方向以IMX6嵌入式开发板为设计平台,是一个集环境信息监控、本地视频监控、远程网络监控传输、库存管理为一体的开放式系统,本系统的优点是操作简便,兼容性好,并且非常适合在此基础上实现智能实验室系统的一些重要功能。嵌入式智能实验室系统设计模型将环境监测模块和视频监测模块移植到IMX6嵌入式开发板上,通过开发板实现网络远程监控、信息通信、数据库管理和人员管理等功能。关键词:智慧系统;嵌入式IMX6开发板;环境监测;视频监控目录TOC\o"1-3"\h\u8979摘要 16392Abstract 2294561.绪论 414401.1设计背景及意义 4119871.2系统介绍 516051.2.1系统基本构架 5260461.2.2IMX6嵌入式开发板 6146152.系统开发环境的配置 7164342.1Linux系统安装配置 7256262.2配置Linux系统网络 8221812.3配置串口超级终端 916462.4配置windows系统网络 11149232.5配置NFS、Samba服务 1222322.5.1安装配置NFS服务 1211092.5.2安装配置Samba服务 12117813.系统模块功能的设计与实现 14101883.1搭建QT开发环境 14124513.1.1QT简介 14254843.1.2设置交叉编译环境 1447903.2环境检测功能的设计与实现 15238013.3视频监控功能的设计与实现 20103973.3.1视频监控实验原理 20290163.3.2摄像头驱动配置 21213493.3.3远程视频监控 25314763.4数据交互功能的设计与实现 27214604.系统测试 28287964.1硬件测试 2889204.2测试结论 29143955.总结与展望 30251795.1全文总结 3056535.2未来工作展望 304722参考文献 33绪论1.1设计背景及意义从物联网的1999概念到现在,物联网技术的发展已经走过了21个年头。在这21年中,物联网技术一直应用于终端设备的升级换代,随着互联网技术的快速发展和国家的大力支持,稳步前行。物联网技术是在物与物、人与物之间进行信息的传递和控制。要实现这一目标,必须依靠互联网技术和终端设备的发展。经过21年的发展,互联网技术在中国已经成熟。中国已进入5g时代,成为互联网技术领先国家。随着互联网技术的发展和国民经济的提高,终端设备现在是一只手的终端设备,随时随地进入互联网。这两个优点为物联网技术的发展提供了良好的基础。一些基于物联网技术的智能系统进入市场。比较常见的是安防系统,主要用于大学校园、住宅小区、银行等。这套校园智慧实验室系统的初衷与智能家居系统大致相同。旨在解决实际问题,使实验室的使用和维护在普通教学中更加方便。由于科学技术水平的迅速提高,对科研设备和科研环境的要求越来越高,实验室是各大高校进行科学研究的重要场所。由于科研成果的重要性和安全性,对实验室场地的要求越来越高,但传统实验室已不能满足高性能实验室的要求。传统的实验室不仅耗时耗力,实验室数据的安全性也没有强有力的保障。对此,本文提出了设计-智能实验室系统的设计。通过物联网技术在生活中的应用,我们也可以将这项技术应用到校园,不仅方便了学生在校园的学习和生活,对学校管理者来说也意味着极大的便利。同时,还可以根据具体问题增加一些新的功能,如环境监控功能、视频监控功能、数据交互功能等,通过这些功能方便教学管理,提高教学质量。物联网技术的应用,是对学校新的管理模式的探索;是对学生新的生活方式的倡导;是对社会的新趋势。嵌入式智能实验室的设计与实现将具有广泛的应用前景和发展潜力。这也是我国信息化和全面建设小康社会的需要,也是加快高校实验室管理信息化建设的需要,可以预见,嵌入式智能实验室系统的应用将为广大高校实验室管理者及时、便捷地掌握实验室动态,避免各种安全隐患,减少不必要的经济损失,推动高校实验室建设向智能化、人性化方向发展具有重要的现实意义。同时,随着网络和通信技术的飞速发展,特别是在物流网络技术下,嵌入式智能实验室的建设将具有更大的应用前景。1.2系统介绍1.2.1系统基本构架智慧实验室系统主要功能是以博创科技公司的LMX6嵌入式教学科研平台实现,通过该平台中的温度湿度传感器实时获取实验室中的温度和湿度信息,并将温湿度传感器获取的数据在浏览器界面显示;通过热释红外传感器来实时监测出入实验室的人员;通过烟感传感器和蜂鸣传感器来预防实验室火灾危险,实时监测实验室中的环境状况,如图1.2.2为系统基本框架图:图1.2.1系统基本构架图1.2.2IMX6嵌入式开发板博创科技推出的IMX6嵌入式教学科研平台,采用基于飞思卡尔公司基于ARMCortex-A9MPCore的最新单核的IMX6DL嵌入式微处理器。IMX6DL是一款32RISC微处理器,该处理器具有低成本、低功耗、高性能等特征,适用于高校教学与实验环境。IMX6教学科研平台集成了USB2.0、SD、LCD、Camera、can、nfc、zigbee、扩展串口等常用设备接口,适用于各种手持设备、消费电子和工业控制设备等产品的开发。IMX6平台可以作为计算机、电子通讯、软件开发等专业开设嵌入式软件课程的教学设计平台,又可作为广大从事PDA和科研单位的参考设计平台。IMX6部分底板外有:USB接口、千兆网口、USBOTG、WIFI、3G模块、SD卡、双数码管、串口、蓝牙、CAN总线、RS485总线、NFC模块、16*16点阵、步进电机、模拟交通灯、3*4按键、摄像头、蜂鸣器、VGA、HDMI、音频、LED灯、陀螺仪、LCD电容屏等资源。如图1.0IMX6开发平台:图1.0IMX6开发平台系统开发环境的配置Linux系统安装配置Linux系统安装配置过程需要解压ubantu系统并安装VMwareWorkstation虚拟机。采用VMware可以实现在Windows下虚拟操Linux系统,设计开发应用程序,并移植到开发板上运行。Ubantu是开放源代码的自由软件,系统界面简单且功能强大,同时方便操作与管理。ubantu系统可以在浏览器搜索下载镜像文件或者在IMX6嵌入式开发平台系统光盘文件中找到Ubantu-uptech.z01和Ubantu-uptech.zip这两个文件并解压。VMwareWorkstation虚拟机可在任意浏览器下载或者在IMX6开发平台光盘中找压缩文件进行安装,安装过程在这里不进一步阐述。如图1.1是安装好以后的界面图:图1.1系统界面图配置Linux系统网络在安装完成Linux系统之后,下一步就要配置Linux系统网络,配置Linux系统网络的目的在于与嵌入式开发板进行数据通信,这一步骤在整个配置过程中尤为重要,系统网络的配置不正确会影响实验的下一步操作,ubantu系统的网络配置相对简单,以下为配置Linux系统网络的具体步骤:打开VMware虚拟机,输入初始密码123456,进入桌面找到超级终端图标并打开,在首行输入sudosu切换至root权限。点击右上角扇形图标,点击之后,会有网络配置的下拉选项,然后点击编辑连接,在弹出的对话框中选择添加。选择连接类型,此处选择以太网,然后点击新建,会弹出正在编译以太网连接1的对话框,选择设备MAC地址,右边有一个倒三角,点击下拉,会显示当前的MAC地址。设备MAC地址选择完以后,点击IPv4设置,在此将IP地址设置为1。点击关闭,点击虚拟系统右上角的扇形图标,选中启用联网,选择启动联网之后,选择启动以太网连接选择以太网连接1以后,可以看到扇形图标发生了变化,如下图1.5.32所示,系统也会弹出网络已连接的字样。打开虚拟机终端,在首行输入ifconfig,查询该虚拟机IP地址,如图1.2所示。图1.2网络连接成功(10)打开系统左侧的Firefox网络浏览器,如何可以进行外网的访问,则网络配置完成。配置串口超级终端虚拟机系统网络配置完成之后,嵌入式开发板也要做一些相关操作,但无法直接在开发板上直接配置相关操作,需要借助第三方工具,本次设计使用超级终端进行相关操作。具体操作如下:下载安装超级终端软件,安装过程在这里不进一步阐述安装完成并打开后,会提示用户输入国家和区号,用户要根据自己的位置填写,然后单击确定。如图1.3所示,然后点击确定。图1.3超级终端配置过程在弹出界面点击确定,如图1.4所示图1.4超级终端配置过程在弹出界面填入连接名称,然后点击确定,如图1.5所示。图1.5超级终端配置过程选择串口设备(根据实际硬件连接选择),如图1.6所示。图1.6超级终端配置过程在弹出界面配置串口,具体数值如图1.7所示。图1.7超级终端配置过程点击确定进入超级终端界面。超级终端建立后,连接串口设备、迷你usb线和5v电源,打开主电源开关,启动开发板。开发板上电启动后,输入root无需密码即可登录。在开发板接口中配置ip地址,输入命令ifconfigeth90..配置windows系统网络为了保证目标主机与目标机之间的网络连接,虚拟机、超级终端和windows系统的ip地址必须保持在同一网段上且互不冲突,可以通过ping命令相互交互。窗口系统网络的配置方法非常简单。找到网络和共享中心,将Window的IPV4配置为1,如图1.7所示。此时,窗口系统网络配置完成。图1.7IPV4地址配置2.5配置NFS、Samba服务2.5.1安装配置NFS服务NFS(网络文件系统服务)是Linux系统中常用的数据文件共享服务。Linux客户端通过网络向NFS服务器请求文件共享服务,类似于Windos中的文件共享服务。它旨在在不同的机器和不同的操作系统之间共享文件。客户端使用“mount”将远程主机的NFS目录文件挂载到自己的文件系统中,如图1.9所示。打开vmware虚拟机,点击桌面系统终端,在弹出界面的第一行输入sudosu命令,切换到root权限。切换到root权限后,输入安装nfs的命令:sudoapt-getinstallnfs-kernel-server。点击enter,系统会自动安装NFS服务。安装完成后,可以设置一个共享文件,进入exitenter,切换到uptech用户,并在根目录中创建IMX6文件夹:sudomkdir/IMX6。修改etc目录下的导出文件,输入命令:sudovi/etc/exports。打开配置文件之后,在其最后一行添加nfs共享目录配置语句:/IMX6*(rw,synchronization,no_root_squash,no_subtree_check)添加成功后,输入此命令重新启动nfs服务:sudo/etc/init.d/nfs-kernel-serverrestart至此,NFS服务安装配置完成。2.5.2安装配置Samba服务Samba是一个linux共享文件系统。SMB(servicemessageblock)/CIFS(universalnetworkfilesystem)协议在linux中实现,允许linux、unix、windows系统相互共享文件。Samba配置流程如下:进入虚拟机系统终端,在uptech用户下输入安装Samba服务的命令:sudoapt-getinstallsamba单击Enter自动安装系统。完成后,输入命令进入配置文件smb.conf:sudovim/etc/samba/smb.conf进入smb.conf配置文件后,在底线添加以下samba配置信息:[print]Comment=PrintPath=/Home/Nowbrowseable=yesWritable=ispublic=iscreatemask=0777directorymask=0777添加完成之后点击ESC,输入i:保存并退出。保存和退出后,在uptech用户下创建共享目录并设置权限:创建共享目录:sudomkdir/home/now,设置文件权限:sudochmod777/home/now/*此命令允许所有用户对该文件拥有权限。然后输入命令重启samba服务:sudo/etc/init.d/smbd重启。在“开始”计算机的“搜索程序和文件”中键入Linux系统中的ip地址,单击Enter,可以看到打印文件夹,如图1.9所示,表示Samba安装成功,需要共享的文件可以放在这个打印文件夹中与虚拟机共享。图1.9Samba服务配置完成系统模块功能的设计与实现搭建QT开发环境QT简介Qt是一个跨平台的应用和用户界面框架,采用c++语言,包括富c++类,包括界面设计窗口接口、io控制接口、绘图接口、多媒体接口、数据库接口等富开发接口。本系统开发主要采用的是窗口界面设计、数据库界面设计。Qt不仅是一个图形界面开发库,而且还有一个比较完整的开发环境的开发工具。Qtcreator是一个基于qt用户界面设计的可视化集成环境,可以跨平台运行,支持linux,windows,macos等操作系统。它集成了qt设计器的所有功能,包括qt语言工具、qt管理工具、gdb图形调试前端、qmake构建工具等。设置交叉编译环境交叉编译是指在某个主机平台(例如PC)上使用交叉编译器编译可以在其他平台(例如ARM)上运行的代码的过程。因为主机和开发板的运行环境不一样,所以应该提供不同的类库,以便在主机上开发的代码可以在嵌入式开发板上运行。设置交叉编译环境的过程如下:(1)将压缩包arm-linux-gcc-4.4.3.tar.gz存放到如图1.10所示目录中。图1.10交叉编译环境设置过程(2)使用tar命令:tarzxvf解压缩并将其安装在当前目录中如图1.11所示。图1.11交叉编译环境设置过程如图1.12所示,它指示已成功解压缩文件,并且解压缩文件存储在/home/song/software/opt/FriendlyARM/toolschain/4.4.3文件夹中。

图1.12交叉编译环境设置过程(4)使用命令:vim/etc/profile编辑配置文件并添加环境变量。将以下代码添加到配置文件的最后一行:ExportPATH=$PATH:/home/song/software/opt/FriendlyARM/toolschool/4.4.3/bin,单击ESC添加后,输入I:保存并退出。如图1.13所示。

图1.13交叉编译环境设置过程(5)使用命令:source/etc/profile使环境变量生效。在终端上输入命令arm-linux,然后按Tab键,如图1.14所示,表示环境变量已成功设置。图1.14交叉编译环境设置过程环境检测功能的设计与实现嵌入式LMX6开发板包含多个模块,在这里主要用到温湿度,红外,烟感,蜂鸣器传感器、LCD。通过这些传感器收集的信息,可以实时监测实验室中的环境状态,并且当有火灾发生时可以根据蜂鸣器报警及时消除火灾,并将各个传感器获取的数据在LCD显示屏上显示。界面跳转函数:voidmeau::on_hjjc_clicked()/*主界面跳转到环境监测模块定义*/{//点击触发kjjc*ab=newkjjc();//定义显示新的界面名称ab->show();//显示跳转的界面}开发板连接传感器模块时,温湿度模块连接开发板的P1端口,红外传感器连接P5端口,蜂鸣器模块连接P8端口,烟感模块连接P2端口。功能模块设计时,先添加kjjc这个类,其中kjjc.ui文件是用来设计环境监测模块的界面,添加窗口组件,建立信号槽连接,编写事件处理函数的;kjjc.cpp中是环境监测功能函数的实现;kjjc.h文件用来声明后面程序设计所需的函数库与类名;然后在kjjc.cpp中添加调用所用到的传感器驱动函数;当产生点击控制单元按钮开关的信号时,系统调用QProcess函数,启动对对应的传感器运行函数,即可实现环境信息的检测。环境监测功能流程图如下:图1.15环境监测功能流程图主界面代码:kjjc::kjjc(QWidget*parent):QWidget(parent),ui(newUi::kjjc){{ui->setupUi(this);//构建主界面QTimer*timer=newQTimer(this);//定时器连接,用来刷新采集数据connect(timer,SIGNAL(timeout()),this,SLOT(refreshStatus()));Insmod_moudles();//调用驱动模块sleep(3);timer->start(1000);//每秒刷新一次GetStatus();}}#defineMODULES_DRIVER"/root/modules_driver.sh"//定义驱动目录调用各个模块的驱动函数:voidkjjc::Insmod_moudles(){QProcess*process=newQProcess;QStringListstr;str<<"";process->start(MODULES_DRIVER,str);//连接驱动process->waitForStarted();sleep(3);fd_irda=open("/dev/irda",0);//打开红外驱动if(fd_irda<0){printf("Can'topen/dev/irda\n");}fd_smog=open("/dev/smog",0);//打开烟感驱动if(fd_smog<0){printf("Can'topen/dev/smog\n");}fd_sht11=open("/dev/sht11",0);//打开温湿度驱动if(fd_sht11<0){printf("Can'topen/dev/sht11\n");}}温湿度监测函数:voidkjjc::calc_sht11(float*p_humidity,float*p_temprature)//定义温湿度函数;具体代码不在详细介绍。voidkjjc::Show_sht11()//调用并显示温湿度主要代码{ui->label_Stemp->setText(QString("%1").arg(fvalue_t).mid(0,5));//温度显示ui->label_Shumi->setText(QString("%1").arg(fvalue_h).mid(0,5));//湿度现实}红外监测主要函数代码:voidkjjc::Show_irda(){intret;intirda_cnt;ui->label_Sirda->setText("normal");//标签Sirda用来显示是否检测到有人ret=read(fd_irda,&irda_cnt,sizeof(irda_cnt));if(ret<0){printf("readerr!\n");//打开错误}if(irda_cnt){ui->label_Sirda->setText("someone");//有人}elseif(!irda_cnt){ui->label_Sirda->setText("normal");//无}}烟感监测主要代码:voidkjjc::Show_smog(){intret;intsmog_cnt;ui->label_Ssmog->setText("normal");//标签Ssmog用来显示是否检测到发生火灾ret=read(fd_smog,&smog_cnt,sizeof(smog_cnt));if(ret<0){printf("readerr!\n");//打开失败}if(smog_cnt){ui->label_Ssmog->setText("firing");//有火灾发生}elseif(!smog_cnt){ui->label_Ssmog->setText("normal");//安全}LCD代码:voidkjjc::on_pb_matrix_on_clicked()//打开LCD{QProcess*process=newQProcess;process->start("/root/lcd/s3c24xx_lcd_test");process->waitForStarted();}voidkjjc::on_pb_matrix_off_clicked()//关闭LCD{QProcess*process=newQProcess;process->start("/root/lcd/lcd_stop.sh");process->waitForStarted();}

蜂鸣器代码:voidWidget::on_pb_buzzer_on_clicked()//打开蜂鸣器{QProcess*process=newQProcess;QStringListstr;str.clear();str<<"1"<<"1";process->start("/root/buzzer/gpio_test",str);process->waitForStarted();}voidWidget::on_pb_buzzer_off_clicked()//关闭蜂鸣器{QProcess*process=newQProcess;QStringListstr;str.clear();str<<"0"<<"0";process->start("/root/buzzer/gpio_test",str);process->waitForStarted();}视频监控功能的设计与实现3.3.1视频监控实验原理本地视频监控的流程:通过ZC301摄像头采集环境视频信息,具体的采集方法由V4LAPI函数实现,ARM开发板采集视频完毕后,开发板调用Framebuffer驱动,将视频显示在LCD显示屏。流程图如下:图1.16视屏监控流程video4linux提供常见电视摄像机、摄像机并行端口和USB接口的面对面编程,是linux视频设备的核心驱动程序。通常在视频电话需要捕获视频时使用,这是Linux嵌入式开发过程中常用的基本接口类型。通过各种视频和音频设备开发相应的驱动程序后,通过视频和音频设备实现V4L提供的系统API。V4L分为两层。底层由内核中的视频和音频设备驱动,上层为系统提供API。帧缓冲区是Linux系统内核为显示设备制作的编程接口。它是一种抽象地反映屏幕的设备,允许高级应用程序以图像的形式直接读取和使用缓冲显示工作。帧缓冲的源文件位于Linux/Drivers/video/目录中。总的抽象设备文件是fbcon.c,并且在该目录中存在与各种显示设备驱动程序相关的源文件。帧缓冲设备驱动程序基于以下文件:(1)Linux/include/Linux/fb.h(2)Linux/driver/video/fbmem.c;在这两个文件中,定义了framebuffer使用的重要数据结构,并且支持FrameBuffer的设备驱动程序提供了通用接口。3.3.2摄像头驱动配置⑴进入终端下的移植内核目录,执行命令:#maemenuconfig⑵选择并进入“Multimediedevices>”菜单选项,然后<M>选择Linux的视频选项。⑶返回主菜单,然后选择并进入“USB支持>(usb配置选项)”菜单选项,然后<M>选择USBSPCA5XXSunplusVimicroSonix摄像机以配置usb⑷保存当前配置然后退出。⑸然后执行命令:#makedep,用于建立文件依赖关系;然后执行命令:#make模块编译链接模块。编译链接完成后,将在/Linux2.6.x/kernel/drivers/usb/spca5xx文件夹中生成三个模块驱动程序spca5xx.o,spcadecoder.o和spca_core.o。⑹移植的linux内核启动后,为了使用相机,需要调用编译后的USB相机驱动模块,并在控制终端上执行以下代码:#insmodspca5xx.o⑺在V4L执行文件的开发板/root/camera/目录中,直接运行命令:./v4lcap就可以运行视频采集程序。v4l视频编程的过程与文件操作的过程没有根本区别。首先初始化帧缓冲设备,然后将帧缓冲设备的地址映射到内存mmap;初始化V4L视频捕获功能,将V4L采集的视频图像地址映射到内存mmap。通过Framebuffer设备的地址映射和V4L捕获的视频图像地址映射到存储器mmap,可以将图像参数传输到Framebuffer,并且可以在LCD上显示捕获的图像。实现信息传递主要函数:vd->fbp=(char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fbfd,0);//映射设备到内存。vd->map=mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,0);//映射采集图片信息到内存。mmap函数解析:Void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffset)Start:内存映射位置。Null通常用于显示任何地址;Length:映射的文件大小;Prot:映射的方式有两种:读动作(PROT_READ)读动作和PROT_WRITE写动作(PROT_WRITE);Flags:方式3种MAP_SHARE:修改内存,文件同步修改;MAP_FIXE:禁止修改;MAP_PRIVATE:若要修改另存为一个备份,不改源文件;Fd:打开的文件的描述符;Offset:偏移量,大小可以控制长度。主要程序流程代码:#include<Linux/videodev.h>//使用v4l必须包含的头文件#include<Linux/fb.h>//使用Framebuffer必须包含的头文件typedefstruct_fb_v4l//定义的结构体_fb_v4l:包含FrameBuffer信息和video4Linux信息{//FrameBuffer信息intfbfd;//FrameBuffer设备句柄structfb_var_screeninfovinfo;//FrameBuffer屏幕可变的信息structfb_fix_screeninfofinfo;//FrameBuffer固定不变的信息char*fbp;//FrameBuffer内存指针//video4Linux信息intfd;//保存打开视频文件的设备描述符structvideo_capabilitycapability;//定义摄像头的分辨率,信号信息structvideo_bufferbuffer;structvideo_WindowWindow;//定义摄像区域的长度,宽度structvideo_channelchannel[8];//定义信号信息structvideo_picturepicture;//定义摄像头的分辨率,信号信息structvideo_tunertuner;structvideo_audioaudio[8];structvideo_mmapmmap;//用于内存的映射structvideo_mbufmbuf;//获取内存映射的顿信息,包括顿大小,巾贞数量及偏移量unsignedchar*map;//用于指向图像数据的指针intframe_current;intframe_using[VIDEO_MAX_FRAME];//帧的状态没有采集还是等待结束?}fb_v4l;//主程序实现函数:⑴打开初始化Framebuffer,映射Framebuffer设备地址到内存mmap:intopen_framebuffer(char*ptr,fb_v41*vd){intfbfd,screensize;fbfd=open(ptr,O_RDWR);if(fbfd<0){printf("Error:cannotopenframebufferdevice.%x\n",fbfd);returnERR_FRAME_BUFFER;}printf("Theframebufferdevicewasopenedsuccessfully.\n");vd->fbfd=fbfd;//保存打开FrameBuffer设备的句柄;vd->fbp=(char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fbfd,0);//映射Framebuffer设备到内存⑵打开视频设备文件(通常是/dev/video0)intopen_video(char*fileptr,fb_v41*vd,intdep,intpal,intwidth,intheight){//打开视频设备if((vd->fd=open(fileptr,O_RDWR))<0){perror("v4l_open:");returnERR_VIDEO_OPEN;}printf("=============GetDeviceSuccess=======================");⑶获得设备信息(查询和确认设备性能)。if(ioctl(vd->fd,VIDIOCGCAP,&(vd->capability))<0){perror("v4l_get_capability:");returnERR_VIDEO_GCAP;}⑷根据需要更改设备的相关设置(设置捕获的图像的宽和高、设置色深)。if(ioctl(vd->fd,VIDIOCGPICT,&(vd->picture))<0){perror("v4l_get_picture");returnERR_VIDEO_GPIC;}printf("=============GetPictureSuccess=======================");vd->picture.palette=pal;//调色板vd->picture.depth=dep;//像素深度⑸获得采集到的图像数据(这里V4L提供了两种方法。第一种方法是直接打开设备读取图像数据。另一种方法是建立一个内存包,将图像地址反映到MMAP的内存中,得到图像数据)if(ioctl(vd->fd,VIDIOCGMBUF,&(vd->mbuf))<0){perror("v4l_get_mbuf");return-1;//建立设备内存映射vd->map=mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,0);if(vd->map<0)映{perror("v4l_mmap_init:mmap");return-1;}printf("Thevideodevicewasopenedsuccessfully.\n");//returnget_first_frame(vd);return0;⑹关闭视频设备。intv4l_close(v4l_device*vd){close(vd->fd);return0;}3.3.3远程视频监控⑴远程视频监控是通过ZC301摄像机采集视频数据。视频收集是由Vide04Linux(简称V4L)实现的,在最后一部分已经介绍过。⑵然后通过TCP/IP协议实现浏览器与服务器(开发板)之间的通信,通过Linuxsocket接口的网络程序实现网络传输。套接字与网络通信两端的套接字相同,双方的套接字接口之间存在通信。为了实现传输和接收,远程视频监控模块通过socket接口实现信息交互。⑶服务器通过web服务器响应浏览器请求,web服务器处理浏览器发送的HTTP请求,并负责响应浏览器请求。⑷利用CGI(通用网络管理接口技术)实现了浏览器与嵌入式服务器之间的动态数据交互。在系统设计中,通用网管接口技术应用程序是用c语言编写的,因为c语言可以实现嵌入式处理器对外部数据的实时采样、与外部设备的通信和控制等。CGI处理步骤:通过Internet向服务器发送用户请求(开发版);开发板服务器接受邀请并通过CGI程序进行处理CGI程序将处理结果返回给服务器;服务器将结果返回给用户。(5)浏览器视频信息通过tcp/ip协议再次传输到浏览器。流程如下。流程如下:图1.16网络视频监控流程图⑹Boa移植:①将boa-0.94.13.tar.gz复制到Linux虚拟机的“/home/uptech”②解压boa安装包:tar-zxvfboa-0.94.13.tar.gzcdboa-0.94.13/src③修改“/home/uptech/boa-0.94.13/src/compat.h”文件vicompat.h修改120行:#定义时间区域_偏移(foo)foo->tm_gmtoff④修改“/home/uptech/boa-0.94.13/src/boa.c”文件⑤运行“/home/uptech/boa-0.94.13/src/configure”文件配置源文件⑥用修改后的第31行和32行修改“/home/uptech/boa-0.94.13/src/Makefile”文件:CC=arm-Linux-gccCPP=arm-Linux-gcc-E⑦编译makecleanmake此时,在/homepage/technology/boa-094.13/src//文件夹下,将出现我们需要的可执行文件boa。通过TFTP将执行特定Boa的文件上传到开发板,同时创建目录和配置文件。⑺配置spcaview(网络摄像头的applet程序):①cd/home/uptech②解压spcaview-20061208.tar.gz安装包:tar-zvxfspcaview-20061208.tar.gzcdspcaview-20061208③修改Makefile,指向新的压缩和解压缩库,静态编译,“viMakefile”CC=arm-Linux-gccCPP=arm-Linux-g++Spcaserv:$(OBJSERVER)$(CC)$(SERVFLAGS)-Ospcaserv$(OBJSERVER)$(SERVLIBS)④编译spcaservmakespcaserv⑤通过tftp,将生成的目标文件“spcaserv”传输到ARM开发板,并建立相应的目录和配置文件。⑥在ARM开发板上执行:./boa此时,WEB服务器已在ARM开发板上启动。在ARM开发板上运行:spcaserv./spcaserv-d/dev/video0-s320*240-f;在客户端浏览器的地址栏中输入ARM开发板的ip地址。3.4数据交互功能的设计与实现数据交互功能是通过嵌入式Web服务器与浏览器进行交互,嵌入式开发板获得的数据通过移植的Web服务器与浏览器进行交互。为了实现动态Web技术,系统在设计中选择了支持CGI、更适合嵌入式系统的BoaWeb服务器,并将其移植到系统中,使系统实现了嵌入式Web服务器的功能。具体的迁移实现方法如下:下载Boa服务器源代码boa一0.94.13.tar.gz,并将其解缩在/boasrc/目录下。编译Boa源代码,生成执行文件Boa(大小约6OKB)。创建一个相关的工作目录。在/etc目录下创建boa目录,并将boa的主配置文件boa.conf放在其中。您还需要创建日志文件所在的目录/var/log/boa,HTML文档的主目录/var/www,以及CGI脚本所在的目录/var/www/cgi-bin/。配置和修改Boa。这主要是通过修改定义来实现的。h,boa.conf和mime.types文件。修改定义。h来指定Web服务器的根目录路径(SERVER-R()OT)。boa.conf文件由规则组成,这些规则用于配置Boa服务器,指定相应的endEl,服务器名称和某些相关文件的路径。为了使Boa服务器正确运行,它必须确保文件配置正确,并将文件、一些静态网页、CGI可执行程序等放在特定的目录中。放置Boa文件。在/bin/下添加生成的boa可执行文件,并将修改后的bao.conf复制到Web服务器根目录/ete/boa。并将一些静态页面放在bo-a.conf指定的目录中。重新编译内核根文件系统,再次将文件系统下载到控制中心硬件电路板,启动BoaWeb服务器,可以通过IE访问系统设计的网页。系统测试硬件测试本次设计中主要硬件有嵌入式开发板、温湿度传感器,红外传感器,烟感传感器,蜂鸣器传感器、LCD,硬件测试主要测试这些传感器是否正常工作。测试1:环境监测模块运行测试如图4-3,数据采集结果如图4-4所示:图1.17环境监测运行图图1.18环境监测采集数据图测试2:视屏采集模块本地测试如图4-10所示,网络测试如图4-11所示:图1.19本地视频监控图4.2测试结论本次测试对环境监测功能中的温湿度传感器,红外传感器,烟感传感器,蜂鸣器传感器、LCD进行了实时测试,各项传感器运行正常,且数据成功进行交互。视频监控功能中的视频采集模块测试正常,数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论