【《基于Linux的智能家居模拟系统设计与测试研究》11000字(论文)】_第1页
【《基于Linux的智能家居模拟系统设计与测试研究》11000字(论文)】_第2页
【《基于Linux的智能家居模拟系统设计与测试研究》11000字(论文)】_第3页
【《基于Linux的智能家居模拟系统设计与测试研究》11000字(论文)】_第4页
【《基于Linux的智能家居模拟系统设计与测试研究》11000字(论文)】_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

基于Linux的智能家居模拟系统设计与测试研究摘要:随着AI智能音响、智能感应垃圾桶、智能管家等等产品已经渐渐的进入大家的视线中。相比于传统的技术,智能化的产品更易受到人们的青睐。本文主要介绍了智能家居系统带来的便利和实现过程。该系统主要有三大模块,分别为远程操作模块、收集环境信息模块、视频监测模块。该系统设计是在Linux操作系统下,以QT软件和V4L2摄像头、Cortex-M0模拟设备为基础,运用C语言和C++语言来完成设计的需求功能。智能家居模拟系统实现了远程实时监控,主人可以随时监测住宅的具体情况。例如是否有外人入侵,电磁炉等危险电器是否关闭,它能给在外工作却时刻牵挂家里近况的人带来一份心安;也可以在归家的途中利用智能家居系统提前打开供暖、供明等设备,让主人尽享智能化的便利。智能家居模拟系统运用网络通信原理、图像处理技术、综合布线技术等将各种家居电器糅合为一个整体,不仅提高了家庭生活的便民性、恬逸性、安全性,同时也响应国家环保节能的号召。关键词:智能家居;远程控制;Linux;QT目录TOC\o"1-3"\h\u279791绪论 绪论现如今,计算机网络的迅速发展,人类越来越追求现代化,对家居设备的要求已不是简单满足于日常使用。智能语音、智能扫地机器人等等产品已经渐渐的进入大家的视线中。智能家居系统主要应用在自动化控制和安防领域。智能家居系统通过计算机技术和物联网技术将各种家居设备联合到一起,能够让人更方便的控制照明、供暖等家居设备,还可以利用摄像头硬件设备对环境进行监控等等。家居设备现主要分为以下三大类:1)传统家居:只能按照人的行为单一的实现某种日常活动。比如普通的照明灯,需要通过人的具体行为来控制开关。2)自动化家居:设备能够通过感知时间、温度等手段自动控制。大多是利用传感器技术实现自动化。比如楼梯里的声控灯,当声音的分贝达到某一程度就会自动打开。3)智能家居:自动化家居设备只是智能家居中的一部分。智能家居主要对人的动作行为和人的情感进行感知,然后通过感知让设备按照人的想法实现智能化。智能家居一般不指单个设备,而是家庭中所有的自动化设备能的组合。利用有线或者无线的通讯技术使设备间可以相互通讯。它也可通过远程页面让人自由的控制设备。比如当你走到楼下,可以通过手机操作提前打开客厅中的灯具。1.1课题前景及研究意义首先,传统的家居虽然能够满足人们日常的基本需求。但智能家居相比于传统方式拥有将本来的被动静止结构改变成可动的聪明的东西,不仅能提供全方位的信息交流的能力,还能保证与外部信息的有效交流,改善人们之间的生活习惯,安排合理并且有效的时间,以此来提高效率。随着人们的消费和生活水平的提升以及科技技术的成长,家居智能化已逐渐进入家家户户,这早就变为一种必定趋势。智能家居系统能够让用户以更加便捷的方式来管理家庭电子化设备。比如通过触摸显示屏、红外遥控器、语音等方式来控制住宅中的电子化设备。并且在另一方面智能家居系统中的设备能够相互间通讯,而不需要用户人为控制也可以根据之前设置的模式运行。让使用者亲身体会到智能家居系统随之带来的便捷、恬逸、安全和实用。其次,在1984年世界第一栋智能建筑被美国研发出来。其他经济相对发展较好的国家(如东南亚、加拿大、澳大利亚等)也逐渐提出了智能家居的概念REF_Ref15285\r\h[1]。在1988年美国电子工业协会颁布了第一个用于家庭卜居的电气设计标准,即HBS。在1997年我国也颁布了关于住宅电气的标准,即《小康住宅电气设计(标准)导则》REF_Ref15285\r[1]。现如今国内关于智能家居的品牌也层出不穷。1.2课题的设计内容及要求本文描述了在Linux操作系统下的智能家居的模拟。智能家居系统主要包括了通信、设备自动化、安全监控三个功能。主要介绍如何使用网络编程技术实现客户端的远程操作;如何利用V4L2摄像头完成视频监控;服务端利用线程同时对多个功能模块进行处理和使用Cortex-M0完成环境数据收集。课题研究的要求有:1.学习并且掌握Linux操作系统的原理和基本命令。2.使用Cortex-M0和V4L2摄像头完成对家庭环境的信息采集。3.使用QT完成客户端的远程操作界面。2需求分析和总体设计2.1需求分析作用需求分析是系统开发生命周期重要且起决定性的任务。通过需求分析才可以把系统的整体概念的性能描摹为特定的需求规格,进而为系统研发奠基一定的根本。需求分析的精准性能够直接影响整个系统设计和开发的进度和最终成品。因而,在设计智能家居系统之前,我们必须首先对该产品进行需求分析。只有足够了解用户的需求,我们才能快速有效地开发出可直接使用的有价值的产品。否则即使成功的设计出产品却不符合市场需求,最终也将被淘汰。2.1.1技术需求表2.1技术需求需求说明优先级实现依赖摄像头可以获取当前环境的监控的信息高摄像头QT客户端可以显示视频的信息高摄像头Qt客户端可以控制家庭的设备高服务器服务端能够收到传感器的信息高Zigbee模块QT客户端可以支配Cortex-M0传感器中Zigbee模块2.1.2功能需求表2.2功能需求表UART接口模块ZigBee协调节点对内:通过UART与服务器的连接,贯彻基本的串口通信。对外:通过ZigBee实现与Cortex-M0的各个不同功能的模块进行通信,包括模块的数据采集和控制;功能:1.通过ZigBee无线能够获得家庭环境的湿度、热度、RFID、光照强度等信息;2.接收PC端的命令传输给外部Cortex-M0模块实现控制。服务器逻辑处理1.通过修改参数从而实现对温湿度,光照度等环境信息的远程控制。2.实时接收摄像头收罗的图片信息,和Cortex-M0中的湿度、热度、RFID、光照强度等信息。客户端视频、环境信息依赖:服务器收到的视频资源及环境信息,通过点击显示按钮显示当前监控画面、环境信息、并且可以接收主机发来的紧急报警。设备控制依赖:服务器驱动响应设备。根据显示光照控制住宅和灯的打开和关闭;根据显示的温度信息控制空调的打开和关闭;根据显示的湿度信息控制温度系统的打开和关闭。摄像头打开设备打开摄像头设备以便后续操作。参数配置配置收集到图片的参数如格式、大小、像素。收集图片使用摄像头获得当前图片数据。压缩数据把取得的数据进行压缩为JPEG格式。发送数据把压缩完成的数据进行发送。关闭设备发送数据成功后,关闭摄像头设备。2.2总体设计总体设计是系统研发流程中的第二个十分关键的阶段。这一阶段目标是研发人员将依据需求分析后的具体的需求将其实现。总体设计大致遵行以下基本的纲要:整体性:系统设计被认为是合并且是一体的。所以应当要将系统当作一个整体来思考。灵活性:为使系统获得持续长久的寿命,所以央浼设计的软件系统必须拥有极强的适应环境的能力。因此该软件系统必须具备优秀的开放性和结构可变性。可靠性:可靠性是指系统有被外界环境扰乱时的柜复能力和系统有能够抵抗外围环境扰乱的能力。经济性:经济性是指在能够满足于设计系统的要求的基础上,尽可能地减少造成经济成本的花销。可操作性:对于用户来说,设计的系统必须要拥有易学易懂和操作简单的特性。使得用户能够更方便地实时调节卜居内的设备来达到最宜环境的要求。2.2.1总体描述智能家居模拟系统主要由摄像头,GIZBEE模块,cortex-M0模拟软件模块,QT软件等构成。摄像头可以实时采集有安装了摄像头的住宅的信息。可以实时观测家庭卜居环境和监测家庭居住环境安全。用户可以通过客户端,查询住宅环境的温度、湿度以及光强等信息;能够直接观测住宅环境的具体情况,也能通过远程操作在卜居环境内的电子设备使得对温湿度和灯光亮度等环境参数进行调节;系统能够自动收集室内的灯光的亮度然后根据阈值进行相应的调节。该系统设计主要运用了风扇来进行物理降温,以此达成运用流动的空气让卜居内的水分被蒸发进而吸热起到降温的目的。2.2.2系统设计思想智能家居模拟系统主要分为服务器端和客户端两部分。客户端主要功能是接收从服务端传送来的家庭卜居的环境数据并用合适的类进行显示、调节家庭的住宅环境,它与服务器之间通过网络套接字进行连接。摄像头连接在了服务器上。服务器负责对摄像头采集的数据进行显示和将采集的数据传输给客户端;负责接收ZigBee传输的数据并将数据传输给客户端;负责接收客户端发来的指令并对家庭居住环境进行相应的调节。ZigBee和M0相连接,M0负责采集环境中的光照强度、空气湿度等数据并将数据传输给ZigBee。图2.1总体框架其中实线表示为物理连接,虚线表示为虚拟连接。SmartHome为模拟的Cortex-M0模块软件。客户端是利用QT来实现显示界面。用QPushButton来控制电器的状态;用QLabel来显示电器的当前的状态和注释当前标签的用途以及显示家庭环境的监控视频;使用QLineEdit来作为输入框;使用QLCDNumber来显示温度,湿度和光照强度。3系统硬件设计和硬件模拟3.1Cortex-M0模块Cortex-M0主要负责对多种信息进行收集,然后将采集到的数据上传到终端设备以及对终端设备发送的命令进行响应。它收集的数据几乎包含了光照强度、电压、湿度、热度、以及三轴加速度等数据REF_Ref17310\r[2]。因此,它可以担任收集数据的责任。服务器端和客户端设备的信息交互运用了ZigBee通信技术。它拥有功率的损耗低、经济成本花费低,还包含网络拓扑结构。ZigBee与cortex-M0之间的连接方式是利用了串口到SPI的调换芯片,这大大的缩小了有限的串口物资。REF_Ref17854\r\h[1]温湿度传感器:能够有效的收集到环境的温度和湿度。及时地将采集到的数据变更为准确的信号,然后将数据传输到ZigBee。若卜居内温湿度超过或低于阈值,系统将会自动调用相应的设备进行调控。光敏传感器:不断的测量卜居的亮光,若卜居内温的光照强度超过或低于阈值时,系统将会自动调用相应的设备进行调整。必要时甚至会打开蜂鸣器。蜂鸣器:若卜居内的设备不合符预先设置值的区间或当发现有陌生人进入住宅时,可通过启动蜂鸣器发出警报声对非法闯入的人员或危险事件起到警告作用。图3.1M0数据传输方向ZigBee通信设备:ZigBee是一种包含了庞杂度低、经济消耗低、功耗低、间距短、数据传输速度慢等特点的无线网络或者又被称为双向的无线通信技术,现在也流行在各种的嵌入式设备中,更适用在承接较小的数据的业务,与此同时它还能够提供定位地理功能。相比于现有的种种无线通信技术,ZigBee技术是目前拥有经济消耗最低和功率耗最低的无线技术,是在当今嵌入式设备采用中最具有热点之一的技术。因此基于ZigBee的这些特点,它格外地合适智能家居系统。M0数据与指令格式Cortex-M0采集到的环境数据是以特定的格式存在的。具体参数形式如3.2图所示。其中tag下的bb代表为接收到环境数据模式;id为Cortex-M0屏幕的id号,不同的板子id名不同;len代表数据以4个字节对齐。图3.2M0接收环境数据格式控制命令格式:如果外界想让Cortex-M0的某些电子元器件状态做出改变,则必须使用特定的命令格式,才能让Cortex-M0接收识别到。具体的格式如图3.3所示。REF_Ref17310\r[2]。图3.3M0发送命令格式3.2Cortex-M0模拟设计在本次毕业设计中,因考虑到成本问题,所以使用smartHome模拟软件对Cortex-M0进行模拟。smartHome模拟软件不仅模拟了Cortex-M0中的各种传感器模块以及ZigBee模块,还模拟了具体的家庭环境。ZigBee与服务端通过UART连接,模拟smartHome软件与服务端是通过虚拟串口进行连接。3.3V4L2摄像头模块设计V4L2摄像头是Linux操作系统的视频设备。在Linux操作系统内核中运用内核视频驱动,具有更优化的灵活性和扩展性。它优势包含支持的设备相比其他型号的摄像头更多和能够自己设置设备驱动的缓存数量。摄像头的工作原理:物体先通过镜头生成的光学图像投射到图像传感器的表面上,将其转为电信号,经过模数转后就变为电信号,将电信号传送到DSP中进行加工REF_Ref17819\r[3]。再通过I/O接口传输到电脑中进行处理后,通过显示屏就能看到图像了。主控的内部工作原理如图所示。图3.4工作原理4系统软件设计按照上面的设计要求,可以将智能家居系统软件设计分为以下两个部分:服务器端:利用Linux操作系统写的服务器不仅能够向客户端传送相关必备的信息(如视频、光强、湿度等),还能够接收客户端向服务端发送的指令,用指令来操控模拟的M0,使做出相对应的改变。客户端:接收服务端传送的信息并用QT将数据(如视频、光强、湿度等)进行显示,还可以向服务端发送相关指令从而使模拟Cortex-M0做变化。模拟系统的软件功能说明:1)服务端系统初始化:对整个服务端的系统进行初始化。2)实时监控子系统:系统的实时监控和处理。光强控制:当家庭卜居环境内光线太弱时,打开灯光。温度控制:当家庭居住环境内温度超过预先指定的阈值的时候,系统将会自动启动空调设备(相当于MO风扇的启动)以此到达温度适宜;当家庭居住环境内温度低于制定的阈值的时候,系统也将会自动的关闭空调设备(相当于MO风扇的关闭)。湿度控制:当家庭居住环境内湿度小于某个值时,自动打开加湿器装置。D.警报:若发生火灾情况或温度因某种原因致使过高时,系统将会启动蜂鸣器,达到警报的作用。远程服务子系统:接收服务端发送的数据和用户人为控制面板对服务端发送指令。A.视频服务:服务器自动调用摄像头收集信息,然后将接收到的数据进行格式处理和压缩等,然后传送给客户端。B.温度服务:服务器自动调用温度传感器收集环境温度,然后将数据以特定的格式传输给客户端。C.湿度服务:服务器自动调用湿度传感器收集环境湿度,然后将数据以特定的格式传输给客户端。D.光强设置:服务器自动调用光敏度传感器收集环境光照强度,然后将数据以特定的格式传输给客户端。E.系统设置:客户端能通过面板给服务端发送指令,服务端接收到指令后进行相应的设备的处理。4.1QT客户端的设计QT的类水平非常高是由于QT的杰出的封装功能,不仅可重复使用性良好,而且对于用户编写程序来说也是十分便利。该客户端设计主要运用了QT中的QPushButton、QLabel、QLineEdit、QLCDNumber等类来完成。首先,利用ui界面设计客户端的控制面板。添加必要的设备控制按钮,例如光照、电扇、蜂鸣器等器件按钮;添加LCDNumber显示环境参数,用数字显示的方式让用户更直观的知道家庭现状。其次,编写相应程序实现功能。最后,对ui界面进行调整,让客户界面更易操作、美观。在运用QPushButton类时主要运用了信号与槽机制。比如要实现单击某个按钮就去执行相对应的行为,与软件中的中断有类似的作用。槽和信号就是当一个提前规定的事件产生的那一瞬间,就会有一个信号被触动。在QT中还有许多被提前定义的信号。不仅如此,我们还能够利用继承的方式来将之前规定的信号设置进去。槽函数本质上是可以被运用来控制特殊的信号,QT中包含许多事先被定义好的槽函数,但在实现设计的时候也能够加入自己定义的槽。槽和信号能确保将一个信号和另一个槽相连接,槽能在准确的时间运用信号的参数,进而让槽函数被调动。槽和信号也可以使用任何类型的参数。在本设计中,当用户单击连接这个连接按钮时,会触发相应的槽函数,首先,先从三个QLineEdit栏中读取相对应的ip和端口值,因为现在读取到的内容格式为字符串,需要先将读到ip和端口转换为相应的整形格式,再通过套接字进行与服务端的连接,这样客户端与服务端就建立起了网络连接。4.2服务端的设计智能家居模拟系统设计的规划是先将每个模块先分别完成再搭建服务器的框架进行联调。所以先将视频监控和环境采集模块完成后,才开始搭建服务器的框架。服务器的框架主要运用到了网络传输中的TCP来搭建服务器和客户端的连接。服务端使用多线程来处理摄像头和模拟Cortex-M0以及与客户端信息交互。服务端整体的软件流程如图所示。图4.1服务端软件流程在OSI模型中TCP主要目的是供给端口对端口的接口。因为在服务端向客户端发送的家庭环境信息和视频监控信息,涉及用户的隐私,需要保持数据在传输中保持可靠性。虽然UDP协议在传输数据速度相比TCP协议上高一些,但UDP协议不会面向连接,数据传输可靠性不高,所以在本次设计中选择了TCP协议。它是面向连接的,能够提供可靠性高的通信。这包括确保数据不丢失、数据有序、数据无失误和数据没有重复REF_Ref22956\r[4]。因M0采集的数据和摄像头的数据过大,为保证数据的实时性,所以不宜使用同一个端口进行数据传输。在本设计中还运用到地址复用,M0和摄像头数据分别使用两个套接字和服务端的进行连接。服务器创建连接具体步骤如下:创建套接字:socket运用成功后会生成一种特殊的文件描述符。intsocket(intdomain,inttype,intprotocol);domain:AF_unix为本地套接字协议,创建出来的套接字只能用于本地。AF_INET4代表为选择ipv4协议族,其中ip的地址由32位二进制数据组成。AF_INEF6代表为选择ipv6协议族,其中ip地址由128位二进制数据组成。type:STREAM表示为流式,运用于TCP协议;DGRAM表示为数据报,运用于UDP协议。绑定套接字:将服务端的信息绑定到指定的套接字中。structsockaddr_inseraddr; memset(&seraddr,0,sizeof(seraddr)); seraddr.sin_family=AF_INET; seraddr.sin_port=htons(8888); seraddr.sin_addr.s_addr=inet_addr("192.168.222.152"); inet_addr代表为把ip点分十进制转为二进制。ip地址是当前系统中的。 bind(sockfd,(structsockaddr*)&seraddr,sizeof(seraddr)); sockfd:代表为创建套接字函数正确调用后返回的套接字,是一种文件描述符。addr:代表获取服务端端的信息结构体长度,在设计运用使用时只能转换为这个结构体的类型。addrlen:代表获取服务端的信息结构体长度,如果实际用不到则可设置NULL。监听套接字:监听客户端。intlisten(intsockfd,intnumber);sockfd:代表为上述已经建立连接的套接字。number:代表为在同一个时刻可以监测到的客户端的数量。接收客户端请求。connfd=accept(listenfd,(structsockaddr*)&cliaddr,&clilen);cliaddr:代表客户端的信息数据,如果如果实际用不到则可设置NULL。clilen:代表获取用户端的信息结构体长度,如果实际用不到则可设置NULL。返回值:如果函数调用成功后就会得到一个套接字。该套接字主要运用在服务器与客户端的通信。在Linux操作系统运行时有线程和进程两种方式。系统的处理器任务调用和执行的最小单元是线程REF_Ref23184\r[6]。操作系统进行资源分派和调用的最小单元是进程。在资源开销上:每个进程都有独自的虚拟空间和代码。若进程之间需要进行数据交互,则会耗费许多的资源。而线程能够作为轻量级的进程,因此在相同的进程内的线程可以分享彼此的数据和代码。在内存分配上:相同内的进程里的线程分享当前进程的公共资源和地址,但是进程之间的地址和资源都是互相分离的。在智能家居模拟系统中由于模块之间经常需要共享数据,但进程间的同步机制没有线程间的同步方便,且进程消耗内存空间大,所以选择用线程来完成设计。本次设计中,主要使用全局变量来进行数据的分享,但是得注意的是,在同一个时间内共享的数据可以被许多个线程获得,但不能在同一个时间被许多个线程更改。为了解决这一个问题,采用了读写锁机制来解决这个问题。4.3UART模块软件设计Linux下串口通信主要有下面几个步骤:图4.2UART流程图4.3.1打开串口调用函数的目标:用以创建或打开文件某一文件时,如若该函数成功运用后则会返回相对应的整数型的文件描述符;若失败则返回-1。open()函数返回的文件描述符一定是当前系统中最小的且从未被任何文件所用过的整数型的文件描述符。#include<fcntl.h>intopen(constchar*pathname,intoflag,...);参数解释:pathname:所用文件的路径(相对路径/绝对路径),在linux中所有的东西都可以被当作为一个文件。oflag:一些文件模式的可供选择,有如下几个参数可以设置O_RDONLY:只得用以文件的读模式,不能写入数据。O_WRONLY:只得用以文件的写模式,不能读取文件的数据。O_RDWR:文件的读写模式,既可以读取文件的数据也能将数据写入到文件中。以上的三个参数在调用函数的时候必须选择其中的一个,但下列中的参数是可以进行自由的选择。O_APPNED:每次调用该函数就将数据从该文件的最后一个字符后面开始写入。O_CREAT:如果当前指定的文件在该路径中不存在,则会默认在该路径创建这个文件。O_EXCL:如果创建的文件名已经在当前路径中存在,则返回值为-1,并且将会改正errno的当前值。O_TRUNC:如果该文件在当前路径中已经存在,并且该函数调用时使用的是只写/读写的模式来打开当前文件,则将会自动的清空该文件的所有内容。O_NOCTTY:如果该指定的路径为系统的终端设备,则不能将该设备当作控制终端。O_NONBLOCK:如果该指定的路径文件是块文件或字符文件当中一种,那么会自动打开该文件,并且将该文件的I/O模式更改为非阻塞模式。下面三个常量同样是选用的,用于同步输入输出。O_DSYNC:用于在文件I/O的物理性完全结束后才能使用write。必须在不能影响当前路径所在的文件的输入和读取的数据的基本下,且不用等候文件当前的属性变化。O_RSYNC:在进行之前必须保证所有的等待输入的数据读全部写入相同的内存。O_SYNC:在文件物理I/O等待结束的前提下才能进行再写操作,还包含了对当前文件的属性的更新。对于打开串口的操作,我们务必配置串口为O_NOCTTY,意味着这打开的这一文件的为终端设备,程序不会变为该端口的控制终端。如果该函数不设置这个配置,这个任务的进程的输入(比如从键盘端输入的终止信号)都能导致该进程作用失败。O_NDELAY:表示对当前的DCD信号的状况并不注意。4.3.2串口初始化关键函数:fcntl()调用函数的目标:按照文件描述符来控制文件的特质,出错则返回-1#include<unistd.h>#include<fcntl.h>intfcntl(intfd,intcmd);intfcntl(intfd,intcmd,longarg);intfcntl(intfd,intcmd,structflock*lock);参数说明:fd:文件描述符cmd:表示为命令参数。fcntl:表示为该函数有以下5种功能:在当前系统中拷贝一个现有的描述符。在当前系统中取得或配置文件描述符标记。在当前系统中取得或配置文件状态标记。在当前系统中取得或配置异步I/O所有权。在当前系统中取得或配置记录锁。关键函数isatty()调用函数的目标:完成函数只需要利用一个专用的终端函数(若该函数执行成功,则不会更改当前的进程所有配置),然后返回返回值。4.3.3设置串口参数配置串口主要是利用到这个结构体中的各位成员。关键函数:tcgetattr()调用函数的目标:获取终端的相关参数,将得到的参数存放到termio结构体中。若这些数值被后面程序中更改了,也还能够利用tcsetattr()函数从新设置。#include<termios.h>tcgetattr(fd,&oldtio);关键函数:cfsetispeed()和cfsetospeed()调用函数的目标:用来根据实际需求配置输入输出的波特率。以下为配置波特率为230400的例子。cfsetispeed(&newtio,B230400);cfsetospeed(&newtio,B230400);参数说明:*termptr:代表的是指向termios结构体的首地址的指针。speed_tspeed:表示为需要根据实际情况配置的波特率。返回值:若函数调用成功就会得到整数型0,否则函数调用失败就会得到整数型-1。修改字符大小:newtio.c_cflag|=CLOCAL|CREAD;newtio.c_cflag&=~CSIZE;c_cflag代表控制模式CLOCAL:是状态行,会忽视全部的解调器,所达到的目标是为了确保串口不能被程序所占用REF_Ref23060\r\h[5]。CREAD:是接收器的启用字符,为了达到从串口里获得输入的数据的目标。CS5/6:代表应用5/6byte来接收或发送字符REF_Ref23060\r[5]。CSTOPB:代表每个字符都是运用是两位的结束位。HUPCL:代表关闭时挂断调制解调器。PARENB:代表为启动奇偶校验码的生成或检测。PARODD:代表为不应用偶校验但是只运用奇校验。关键函数:tcflush()调用函数的目标:通常用于清空当前终端,主要为未完成的输入或输出请求。inttcflush(intfd,intqueue_selector);参数说明:queue_selector:取值可以为如下参数中的一个:TCIFLUSH:代表为消灭当前正在收到的数据,并且阻止被读出来。TCOFLUSH:表示为消灭当前正在写入的数据,而且阻止其传输到终端。TCIOFLUSH:表示为消灭当前所有当前传递的I/O数据。关键函数:tcsetattr()#include<termios.h>tcgetattr(fd,&oldtio);参数说明:参数actions支配更改方式,一共有三种更改方式,分别如下所示:TCSANOW:立刻对值进行修改。TCSADRAIN:等待当前的输出完成后再对值进行修改。第三个参数:等眼前的输出完全成功之后,再对其值进行更改,但忽视还未从读中调用回来的当前可用的任何输入。4.4摄像头软件设计本次模拟系统设计使用的是V4L2类型的摄像头。该摄像头运用流水线的方式,操纵简便。该模拟系统摄像头模块基本主要包含了视频设备的开启、格式配置、摄像头处理数据、设备的关闭。4.4.1打开视频设备摄像头设备被作为一种文件,可以利用open()函数启动摄像头REF_Ref25314\r[10]。其中启动的主要形式有以下两种:用非阻塞启动摄像头:intcameraFd;

cameraFd=open("/dev/video0",O_RDWR,0);用阻塞模式启动摄像头设备。开启摄像头有2个办法,划分为非阻塞模式和阻塞模式。如果采用的方式为非阻塞模式,则当系统调用摄像头设备时即使没有获取到相关的信息,但驱动仍然会将缓存区内的数据返回到应用程序。4.4.2设定属性及采集方式在用open()函数启动摄像头设备之后,就能够配置打开的视频设备的相关属性,比如对收集到的图片进行裁剪和缩放等,这一步骤是可以选择的,也可不进行处理。在大多数能够运用ioctl()函数对将种种设备间的通道完成规划:ioctl(_fd,_request,.../*args*/);可以先检查该系统设计时到底采用的什么标准的视频设备以便后续使用。本次设计使用的是PAL型号的摄像头,也可以使用VIDIOC_QUERYSTD来进行相应的规格检测。然后还需设置视频的获得格式:在检查完视频设备所使用的标准后,设计者还必须设置视频获得的格式。其中捕获格式包含有图片的宽度、图片的高度、图片的分辨率等。分配内存:接下来可以为所捕获的视频分配内存并设置缓存数量。也就是说在缓存队列里保存多少张图片。视频采集方式:在Linux操作系统中,大多数是将内存分成两个部分。这两个部分分别为内核和用户空间REF_Ref23184\r[6]。V4L2摄像头能获得的数据最原始的应该是存储在前者的空间中的。这就意味着用户不能够对该内存进行直接的访问,而是必须通过一些特殊手段来处理。read/write方式内存映射方式用户指针模式对地址进行转换。以下分别有三种视频采集的方式:read/write方式:在内核和客户空间不停复制数据,占筮了许多客户的空间,这使得内存利用率不足。用户指针模式:应用程序应该自己分配内存的片段。然后将v4l2_requestbuffers中的memory字段配置成USERPTRREF_Ref23779\r[8]。处理采集数据:本次设计用到的摄像头包含数据缓存区专门储存req.count的缓存的数据数目。数据缓存采纳队列的方法。关闭视频设备:使用close()函数。5测试和软件展示5.1摄像头监控的测试打开虚拟机,在当前摄像头程序所在的文件目录下,编译摄像头模块的程序,运行./a.out(编译时可任意指定执行文件名),ctrl+alt+F6进入字符界面,运行可执行文件,测试结果如图5.1所示。图5.1摄像头测试结果5.2模拟smartHome的测试打开虚拟机,在当前Cortex-M0程序所在的文件目录下编译Cortex-M0模块的程序,运行./a.out(编译时可任意指定执行文件名)测试结果如图7.2所示。图5.2Cortex-M0的测试结果5.3客户端的测试打开QTCreator,运行客户端项目,测试结果如图5.3所示。图5.3客户端的测试结果5.4系统联合测试本系统将用一个软件来模拟当前的家庭居住环境。首先进行环境搭建。安装vspd.exe程序,双击打开程序图5.4虚拟串口点击Addpair,关闭软件,打开此电脑的控制面板项中的设备管理器图5.5虚拟串口建设成功看到如上设备存在则为成功虚拟串口连接到虚拟机关闭Ubuntu,点击虚拟机->设置,然后选择添加串行端口图5.6虚拟机添加串口添加完成后选择COM1图5.6虚拟机添加串口成功虚拟设备添加打开软件smartHome_boxed.exe,点击左上角设置按

温馨提示

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

评论

0/150

提交评论