基于Cortex-A53的智能云家居系统设计毕业论文-王伟权_第1页
基于Cortex-A53的智能云家居系统设计毕业论文-王伟权_第2页
基于Cortex-A53的智能云家居系统设计毕业论文-王伟权_第3页
基于Cortex-A53的智能云家居系统设计毕业论文-王伟权_第4页
基于Cortex-A53的智能云家居系统设计毕业论文-王伟权_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

基于Cortex-A53的智能云家居系统设计摘要随着科学技术的日益增长和国家经济的迅速发展,人们的收入水平也稳步提升,进而也提升人们的生活水平,因此,人们开始对住宅环境提出了新的要求,人们希望能够拥有更加安全、更加舒适和便利的居住环境,因此,智能云家居的概念也就开始被广泛地传播开来。智能云家居是以住宅为平台,利用电子通信技术、网络管理技术、安全防范技术、自动化控制技术、音视频处理技术、综合布线技术将与家居生活相关的设备集成起来,构建了一个高效的住宅设备与家庭日程事务的管理系统,以此来提高家居的安全稳定性能,也让日常生活变得更加舒适和便利,并实现绿色、环保和节能的居住环境。本次毕设是设计了以Cortex-A53系列的GEC6818开发板为硬件开发平台,以基于Linux操作系统的Ubuntu18.04和SecureCRT为软件开发平台,以ZIGBEE技术作为关键技术来实现远程控制的智能云家居系统设计。本设计还使用了摄像头模块和WiFi模块的硬件设备,并且拥有电子相册、音视频播放、摄像头监视和远程控制等功能。关键词:智能云家居;GEC6818;ZIGBEE;远程控制DesignofsmartcloudhomesystembasedonCortex-A53AbstractWiththegrowingofscienceandtechnologyandtherapiddevelopmentofnationaleconomy,people'sincomelevelisrisingsteadily,andtoimprovethelivingstandardsofpeople,asaresult,peoplebegantoputforwardnewrequirementsonresidentialenvironment,peoplewanttobeabletohavemoresafe,morecomfortableandconvenientlivingenvironment,therefore,theconceptofintelligenthouseholdcloudalsobegantobewidelyspread.Smartcloudhomeisbasedontheresidence,whichintegratestheequipmentrelatedtothehomelifebyusingtheelectroniccommunicationtechnology,networkmanagementtechnology,securitytechnology,automaticcontroltechnology,audioandvideoprocessingtechnology,andgenericcablingtechnology,andconstructsanefficientmanagementsystemoftheresidenceequipmentandthefamilyscheduleaffairs,soastoimprovethesafetyandstabilityofthehome,andThedailylifebecomesmorecomfortableandconvenient,andrealizesthegreen,environmentalprotectionandenergysavinglivingenvironment.ThisgraduationdesignisbasedontheCortex-A53seriesofGEC6818developmentboardasthehardwaredevelopmentplatform,basedontheLinuxoperatingsystemUbuntu18.04andSecureCRTasthesoftwaredevelopmentplatform,withZIGBEEtechnologyasthekeytechnologytoachieveremotecontroloftheintelligentcloudhomesystemdesign.ThedesignalsousesthecameramoduleandWiFimodulehardwareequipment,andhaselectronicphotoalbum,audioandvideoplayback,cameramonitoringandremotecontrolfunctions.Keywords:smartcloudhome;GEC6818;ZIGBEE;remotecontrol目录1前言11.1智能云家居在国外的发展现状11.2智能云家居在国内的发展现状11.3智能云家居发展存在的问题21.4本次设计的目标和研究的课题21.5本次设计采用的技术路线和技术难题22开发工具32.1Cortex-A53处理器32.2GEC6818开发板的介绍32.3Ubuntu的介绍52.4SecureCRT的介绍53ZIGBEE技术63.1ZIGBEE技术的介绍63.2ZIGBEE协议的分析63.3ZIGBEE网络设备组成73.4ZIGBEE网络结构74系统功能的实现84.1系统功能的介绍和结构图84.2开发板的配置94.3电子相册114.4音视频的播放124.5摄像头模块134.6手机APP远程控制154.6.1WiFi模块的介绍154.6.2安装WiFi模块驱动154.7总结175参考文献186谢辞197附录20前言随着人们生活水平的提高及生活节奏的加快,人们对于住宅环境的有了更高的要求,加之随着信息技术和人工智能技术的发展,人们的生活普遍开始变得智能化,信息化,一些智能化的设备也被广泛的运用到了人们的日常生活之中,于是,智能家居的概念开始被广泛地传播开来。智能家居是一个多功能的综合技术系统,它以家庭住宅为平台,利用计算机、网络、自动化与嵌入式等技术,将与家居生活有关的各个子系统如家电操作、安防预警、远程控制等整合在一起,并通过家居信息管理平台对其进行综合管理,使得人们能够获得一体化,全方位的家居资源REF_Ref24506\r\h[1]。1.1智能云家居在国外的发展现状智能家居(smarthome)的概念虽然很早就被提出,但由于当时一些智能化、信息化的技术还未成熟,加之现实生活中也没有具体的建筑实现,因此并没有被广泛的传播开来。直到1984年美国联合科技公司(UnitedTechnologiesBuiklingSystem)将建筑设备信息化,整合化概念应用于美国康涅狄格州(Connecticut)哈特佛山(Hartford)的CityPlaceBuilding时,才出现了手动的“智能型建筑”,从此揭开了全世界争相构造智能家居派的序幕REF_Ref25377\r\h[2]。1997年比尔盖茨花费大量时间和金钱构建的智能建筑,是一款将所有家具设备都连上计算机进行控制,网络速度快、性能稳定的后台管理系统REF_Ref25479\r\h[3]。除此之外,智能家居也开始日渐兴起在欧洲、日本、韩国和新加坡等一些科技水平高的国家。1998年,新加坡创新地提出了智能家居系统“未来之家”产品,期望更快地推广到各种普通家庭中REF_Ref26259\r\h[4]。1.2智能云家居在国内的发展现状现如今,智能家居在中国已经发展了有26个年头,并且在中国也流行起来,人们开始接受和使用这种高度智能化的产品。大约在1994年,作为一个对广大消费者都十分陌生的行业,智能家居被引入了中国。作为一个新兴的行业,智能家居当时正处于一个普及推广的时期,人们对其概念还不熟悉,人们的消费观念也没有彻底的形成,因此发展地并不顺利。但是随着时间的推移,智能家居的概念被广泛地推广普及,人们开始了解这种产品的功能,体验到它所带来的好处,智能家居也得到了广大消费者的认可。因此,从市场的角度来看,智能家居的消费潜力很大,产业的发展前景也十分的利好。正因如此,许多国内拥有高科技技术研究经验的企业也逐渐开始对智能家居进行深入调研,特别是对客户和市场需求趋势变化的深入研究。随着研究地深入,一些智能家居的子产品例如:智能空调、智能冰箱等智能设备被研发出来,并得到了广泛地使用。许多智能企业也迅速崛起和发展,逐渐成为智能家居产业中的领军人物!随着市场竞争的日趋激烈,越来越多的房地产开发商积极地把高端家居智能化系统配入所开发的楼盘作为全新买点REF_Ref26798\r\h[5]。中国的智能家居发展前景是十分巨大的,人们对舒适的生活条件的需求也日益增加,因此,许多房地产商纷纷加入智能家居的建设当中,并且将这一理念传播到大众之中,大量的智能家居产品已经被开始住户们所接受。1.3智能云家居发展存在的问题虽然智能家居在渐渐地发展和完善,也得到了许多客户的认可,但在这一过程中,也会出现各种各样的问题:国内不同厂家的标准不一REF_Ref26543\r\h[6]。没有统一的标准,就意味着不同厂家的产品之间可能是不兼容的,因此用户使用的过程中,一旦出现了问题,就会变得十分的麻烦,维修的成本也很高,给用户们在实际使用时带来很大的困惑,也会造成许多的不便。市场的定位过高,没有考虑到中低端的客户。绝大部分的智能家居品牌都是定位在高端客户,目标是高档住宅和别墅,价格也比较高,导致一些中低端客户无法购买到这一类产品,这也造就了市场非常的狭窄,初期投入成本非常大,大客户也不会冒然的投资,市场局面无法打开REF_Ref26543\r\h[6]。自从互联网的普及至今,网络安全问题和个人隐私的问题一直没有得到妥善地解决。而智能家居是根据客户不同需求来配置不同的专项功能,也就是说客户会将自己的一些私人信息储存在智能家居的网络体系中,这样的话,一旦出现网络安全问题,就很有可能导致用户信息的泄露,也会给用户造成极大地困扰。1.4本次设计的目标和研究的课题本次设计的目标是以GEC6818开发板为硬件平台,Ubuntu和SecureCRT为软件平台的智能云家居系统。本次设计的研究课题是:(1)研究智能云家居的基本理论、特征;(2)研究Linux系统编程、IO编程、网络编程;(3)研究基于ARM的Cortex-A53的6818平台应用编程;(4)研究摄像头编程,摄像头数据传输;(5)设计并实现APP的远程控制。1.5本次设计采用的技术线路及技术难题本次设计采用的技术线路:使用C语言进行编程;显示终端采用BMP解码显示UI界面;显示终端采用触摸屏来实现按键功能;控制终端用ZIGBEE进行采集按键信息并实现远程发送,协议器使用串口进行数据交互。本次设计的技术难题:协议栈数据传与ZIGBEE协调器跟显示终端数据对接。2开发工具2.1Cortex-A53处理器随着电子科技技术的迅速发展,电子产品广泛普及于人们的生活中,无论是平板电脑还是智能手机,处理器都是它运行的核心设备。现如今,ARM系列的处理器是当今世界最为流行的微处理器。该处理器包括有:ARM7系列、ARM9系列、ARM9E系列、ARM10E系列等等REF_Ref1936\r\h[7]。目前,ARM系列微处理器已经成为嵌入式解决方案的RISC标准,并且在嵌入式及各种智能行业等领域等到了广泛的应用REF_Ref1936\r\h[8]。本次设计使用的是ARMCortex-A系列的Cortex-A53处理器,该处理器的功耗效率极高,非常适合应用于实际开发当中。2.2GEC6818开发板的介绍GEC6818开发板,是一款由广州粤嵌通信科技股份有限公司研发和生产的基于ARM系列的开发平台,该平台搭载三星Cortex-A53系列高性能八核处理器S5P6818,最高主频可以达到1.4GHz,其核心板采用10层板工艺设计,确保开发板结构稳定可靠。它也可以被批量生产用于多种学习平台,并具备多种完备的教学资料和实验设备,能够在许多实战开发项目中使用。同时,它也被应用于本科大学毕业生的毕业设计中,可以完成多种功能的毕业设计。本次设计就是使用了这个开发平台。GEC6818开发板图如下:图2.1GEC6818开发板GEC-6818开发板具有以下几种特性:(1)拥有极佳尺寸的GPIO引脚,且数量足够,很适合应用于开发之中。(2)使用AXP228PMU电源管理设计,成本足够低廉,同时又能确保开发板的稳定性和可靠性,而且也支持电源休眠和电源唤醒的功能;(3)内存的容量默认可支持1GB,并且能够定制扩容到2GB容量;(4)支持Linux-C操作系统、嵌入式开发操作系统、Android开发操作系统等;(5)板载千兆有线以太网,也可以支持无线网络设备;(6)板载多种接口。下面表2.1和表2.2为开发板的结构参数和系统配置:表2.1开发板的结构参数结构参数核心板尺寸75mm*55mm引脚间距2.0mm特点易更换,易维护表2.2开发板的系统配置系统配置CPUS5P6818主频64位八核1.4+GHz64位八核内存标配1GB,可定制2GB存储器标配8GB电源IC使用AXP228,支持动态调频以太网使用RTL8211E千兆以太网PHY2.3Ubuntu的介绍Ubuntu是一种目前较为主流的,基于Linux的,以桌面应用为主的操作系统,其名称据说源自于非洲南部的祖鲁语或科萨语的“ubuntu"一词,意思是“人性”,是南非一种传统的价值观。ubuntu精神,确切来说是一种“共享”的精神,而且作为一个基于GNU/Linux的开发平台,Ubuntu操作系统也将共享的精神带到了电脑操作系统的软件世界。作为一款完全开源免费的,并且也将是永久免费的开源软件,Ubuntu一直秉承着“共享”的精神,并鼓励人们去传播和使用,这也就意味着人们在使用这款软件进行实际开发时,能够实现零成本的愿望,但是这款开源软件的理念并不仅仅意味着零成本,而是希望人们能够以“对社会有用”的方式来使用这款软件。相比于传统的Windows平台,Ubuntu有以下几种优点:1.开源免费正版,系统安全稳定,漏洞修复快,极少中病毒;2.高效的文件管理系统,文件移动、拷贝、传输和发送的速度极快,一般能够达到20M/S,相比于Windows系统,效率极大地提升。且该系统不易产生系统垃圾,不需要对磁盘文件碎片进行整理,能够保证系统的流程性;3.使用DIY界面,拥有极高地自用度,能够很好地改善用户操作体验,且能够在终端上使用命令行指令完成所有的基本操作;4.权限管理很严格,其采用sudo工具,当你要操作系统相关的任务或者修改系统脚本文件时,均需要使用此指令,并输入密码,这样也能够避免客户误删误改了系统文件而导致系统出现的各种问题。从Ubuntu软件软件的开始发行到现如今,这款应用软件已经得到了广泛地使用,并且受到用户的一致好评。用户可以搜索登录到Ubuntu软件的官方网址来下载Ubuntu的安装包,也可以从其他用户分享空间上获取安装包,并移植到自己电脑的操作系统中。但是用户在使用过程中,由于没有人对该软件进行技术维护,因此当用户碰到一些问题时,只能靠自己收集资料来解决遇到的技术故障。当然,Ubuntu也拥有庞大的社区力量,用户可以方便地从社区获得帮助。2.4SecureCRT的介绍SecureCRT是一款IT从业人员最常使用的终端仿真程序软件,简单来说就是我们可以在自己的笔记本或台式电脑的Windows操作系统下,可以通过secureCRT连接到网络设备或者远程登录到Linux服务器从而进行相关的配置管理操作。因此,它也是一款支持远程连接的串口软件,在本次设计中,我们也需要使用这款软件来控制开发板功能的运行。SecureCRT不仅支持SSH(安全外壳协议),同时支持Telnet和rlogin(远程登录)协议。SecureCRT也拥有和Ubuntu相类似的功能,支持Linux操作系统,并且拥有十分强大的命令行功能,能够与Ubuntu软件配套使用,从而实现嵌入式软硬件开发的功能。SecureCRT也可以进行远程连接登录的功能,只要编写合适的代码逻辑,就可以使用它来登录各种服务器,如腾讯的云服务器或者自己搭建的服务器,实现数据的发送和传输。3ZIGBEE技术3.1ZIGBEE技术的介绍ZIGBEE是一种基于IEEE802.15.4标准的无线传输技术。它具有距离短、数据速率低、功耗低、成本低、复杂度低等特点。它也是一种双向无线通信技术。主要应用于自动控制管理、远程控制管理等领域。它还支持地理定位功能,可以嵌入到各种智能设备中。因为蜜蜂在飞行过程中翅膀的颤抖发出“嗡嗡”的声音来给同伴传输信息和确定花粉的位置,也就是说,蜜蜂使用这样的方法建立一个通信组中的“网络”,所以无线个域网发明家生动地用这种行为的来描述这种无线信息传输技术。由于ZIGBEE技术拥有传输距离短、低功耗、低成本等特点,将802无线标准集成于有组网中,实现了局域网中的安全管理和数据通信。ZIGBEE应用范围包括智能家居-对家用电器的控制和家庭音频娱乐系统的管理、楼宇自动化-整合并集中管理照明、采暖、制冷和采集周围环境。工业自动化-利用传感器采集工业生产过程中的数据并进行分析和处理,提高工业生产的安全性。在医学领域,通过ZIGBEE和各类传感器,实现了对病人的体温检测、心跳监测和血压等监测REF_Ref2837\r\h[9]。虽然ZIGBEE这项新技术已经赢得了国内许多专家的青睐和研究,而且也有很多公司愿意参与这项技术的开发,然而,考虑到这是一种新兴的技术,在初期的研发过程中,需要投入大量的资金和人力物力,这对于一些规模不是很大的公司来说,是一件很困难的事情。也正是由于各种的局限性,将这项技术大规模地应用商业领域还是需要一段时间。虽然这项技术到目前为止,仍然处于研发的初级阶段,远远没有达到成熟的标准,但它所展现出来的应用前景和商业价值是十分广阔地,所以,它是值得我们去花费时间和金钱来研究的。在此,也希望国内的高科技企业能够把握住这次机会,早日把这项技术发展成熟,并将它应用到我们的实际日常生活之中。3.2ZIGBEE协议的分析ZigBee协议是IEEE协会在802协议的基础上发展起来的一种高级通信协议。其有效转播速率可达300kbps(千比特率)。主要有限制无线通信协议、网络安全协议的标准和网络的实际应用要求。它也类似于计算机的通信方式。ZigBee网络协议是一个层次结构,它主要由用户层、ZigBee联盟和IEEE802.15.4协议等5个层次自上而下构成。ZigBee有四层:物理层、MAC层、网络/安全层和应用/支持层。MAC层和物理层由IEE802.15.4协议定义,应用/支持层和网络/安全层由ZigBee联盟定义。ZigBee结构中各层的功能如下:物理层:是ZIGBEE协议结构中的最底层,负责提供了最基础的服务,包括为上一层MAC层提供数据的接口等等服务。同时也起到了与现实世界进行信息交互的作用;MAC层:负责构建和维护不同设备之间的无线数据链路,并对数据传送和接收进行确认和结束功能;网络/安全层:保证了数据的传输和完整性,同时可对数据进行加密;应用/支持层:根据设计目的和需求使多个器件之间进行通信。3.3ZIGBEE网络设备组成根据ZIGBEE联盟构建的标准协议,可以按照应用类型进行设备划分,他们的功能分别如下:ZIGBEE协调器,它主要包括所有的网络设备功能,是一种复杂的电子元器件,其特点主要有计算能力强,数据空间大,通过发送网络信标实现网络节点的统一管理,同时,实现了节点数据的实时存储和信息下发。协调器为每个设备分配一个唯一的网络地址。为整个网络选择一个唯一的16位的PANID(个域网标识符),通过这个ID,网络中的设备就可以通过网络地址来相互通信了REF_Ref3112\r\h[10]。初始化、终止、转发网络中的消息。协调器可以作为协调器组建网络,没有配备锂电池,需要USB单独供电。ZIGBEE路由器:路由器主要适用于网络后,通过协调器分配一组特定位数的空间地址,然后通过路由器进行下级节点管理,方便不同的网关设备进行网络接入和路由器转发功能。路由器可以利用外部接口将各种设备接入到网络架构中,建立网络连接机智,起到了对望了覆盖的物理范围和数据包路由的扩增功能REF_Ref3112\r\h[10]。ZIGBEE终端设备:简化其功能设备,主要讲协调器与路由器设备进行连接,构建一套网络链路,实现网络地址的获取。终端设备主要负责无线网络数据的采集REF_Ref3112\r\h[10]。3.4ZIGBEE网络结构ZIGBEE网络结构图如图3.1所示,在ZIGBEE协议规范中,主要包括三种拓扑结构,分别是星状网络结构,网状网络结构和树状网络结构REF_Ref4287\r\h[11]。图3.1ZIGBEE的网络结构图在星状网络结构中,因为终端设备与协调器连接在了一起,所以可以由协调器来负责实现监控和管理整个网络,在树状和网状网络结构中,协调器起到了构建和初始化整个网络的作用,而路由器则是对整个网络的进行扩展,终端设备则负责传输和转发路由器的信息,在树状网络结构中,不同的终端设备只能将信息通过上级单元向下级单元进行分发,最后再有协调器进行分发处理。4系统功能的介绍和实现4.1系统功能的介绍和结构图本次设计的系统将使用C语言和Linux-C编程,以Cortex-A53系列的GEC6818开发板作为硬件开发平台,以基于Linux编程的Ubuntu系统和SecureCRT软件作为软件开发平台,再结合摄像头模块和WIFI模块等硬件设备,实现一个智能云家居的系统。本系统包含了电子相册、音视频播放、摄像头监控和手机APP远程控制等功能。本系统的结构图如图4.1所示。图4.1智能云家居结构图4.2开发板的配置(1)准备好连接的线->电源线,串口线,USB转串口线(2)安装USB转串口线驱动Hl-340.exe->双击->安装->等待几秒->驱动安装成功

PL2303_Prolific_DriverInstaller_v1210.exe->双击->下一步->完成(3)查看Windows端设备管理器有没有对应的COM口。右键计算机->设备管理器->端口->USBSERIAL-CH340(COM3)(4)打开串口工具->SecureCRT.zip解压SecureCRT.zip->得到SecureCRT->双击打开SecureCRT.exe(5)配置串口终端的参数。"文件"->"快速连接"->弹出的框中按照图4.2来配置参数图4.2SecureCRT配置参数(6)配置和修改开发板的网络信息使用“ifconfigeth070”命令配置开发板的网络IP,然后再使用“ifconfig”命令查看开发板的IP。如图4.3所示图4.3开发板IP地址的配置其中,inetaddr:70为IP地址,Bcast:55为广播地址,Mask:为子网掩码。该命令为临时修改开发板的IP地址,如果需要永久设置IP地址,则需要把该命令写入开发板脚本文件/etc/prpfile。如果使用“ifconfig”命令时,没有看到eth0的相关网络信息,就需要在开发板上输入“ifconfigeth0up”命令来启动开发板网卡。(7)配置tftp来传输文件到开发板首先,需要下载tftp32.exe软件,然后双击打开,界面如图4.4所示。图4.4tftp软件界面选择所需要下载的文件所在的目录和Windows端的IP地址,并在SecureCRT上使用“tftp69-g-rxxx”命令,就可以把文件、图片和音视频下载到开发板上了。4.3电子相册本环节主要实现的功能是在GEC6818开发板的LCD屏幕上显示图片,并且实现图片的切换,图片的格式分别为BMP格式和JPEG格式。BMP格式,是英文单词Bitmap的简写。它是一种在Windows操作系统里面的标准图像文件格式,这种格式的图像可以保留较为完整的图片信息,因此能被多种Windows应用程序和软件所支持,并且得到了广泛的应用。但是由于这种格式的图像几乎不会进行任何压缩文件的处理,因此也有比较明显的缺点——文件格式过大,占用磁盘空间多。本设计主要使用BMP格式来显示图片,然后设计一个电子相册的界面,界面上放置两个按钮,分别为上一张和下一张,并通过使用触摸屏的功能来实现点击按钮进行不同图片的切换,从而实现电子相册的功能,代码如图4.5:图4.5相册功能的实现代码JPEG格式,也一种是在各种操作系统中被广泛地应用的图像格式。JPEG的文件的拓展名为.jpg或.jpeg。与BMP位图不同的是,JPEG图像文件通过压缩处理后,极大地降低了对磁盘空间的占有率,文件格式也变小了。而且在文件进行压缩操作过后,也能够保留下十分丰富生动的图像,因此,JPEG格式的图片在网络上也是十分流行的。本次设计主要是使用JPEG格式的来显示动态图片,代码如图4.6:图4.6JPEG的实现代码4.4音视频的播放本设计环节将在开发板上实现音乐播放和视频播放。在实际设计中,我们将使用库来实现这两块功能。音乐播放模块,本设计将使用madplay库,通过把madplay库文件移植到开发板上,实现音乐的播放。madplay库文件如图4.7所示:图4.7madplay库文件然后,本设计将在代码块中使用Linux下的system命令来实现音乐的播放、暂停、继续播放和终止等功能:音乐播放:“system("madplay1.mp3&");”;音乐暂停:“system("killall-STOPmadplay&");”;音乐继续播放:“system("killall-CONTmadplay&");”;音乐终止:“system("killall-9madplay");”视频播放模块,本设计将使用mplayer库,通过把mplayer库文件一直到开发板上,实现视频的播放。mplayer库文件如图4.8所示:图4.8mplayer库文件本设计视频播放模块将和摄像头模块相结合,把摄像头拍摄到的视频图像采集起来,并在开发板上实现播放功能和监控功能。4.5摄像头模块在Linux系统下,一切接文件。因此,在本次设计中,我们使用的摄像头硬件设备也可以看做是一种设备文件,当我们把摄像头设备的USB接口连接到开发板上,然后打开根目录下的dev文件,就可以找到video7这个文件,而这个文件就是摄像头的设备文件。与开发板的LCD屏幕和触摸屏一样,摄像头的设备文件是可以被访问的,就像我们在Linux下访问其他文件一样,我们可以使用IO接口来打开,使用和关闭摄像头的设备文件。对于摄像头数据采集,则需要用到V4L2接口,V4L2是V4L的第二版,是VideoForLinux的缩写,V4L早在Linux的2.1时代就已经被引入,一直存在到2.6.38才最终被V4L2取代。V4L2是Linux处理视频的最新标准代码模块,这其中包括对视频输入设备的处理,比如高频头(即电视剧信号输入端子)或者摄像头,还包括对视频输出设备的处理。一般而言,最常见的是使用V4L2来处理摄像头数据的采集的问题。我们平常所使用的摄像头,实际上就是一个图像传感器,将光线捕捉到之后经过视频芯片的处理,编码成JPG/MJPG或者YUV格式输出。通过V4L2我们可以很方便地跟摄像头等视频设备“沟通”,比如设置或者获取它们的工作参数,下面我们就来详细分析一下如何获取摄像头的图像信息。在内核中,摄像头所捕获的视频数据,我们可以通过使用一个队里来存储,我们所做的工作大致是这样的:首先配置好摄像头的相关参数,使之能够正常地工作,然后申请若干个内核视频缓存,并将它们一一送到队列中,就好比三个空盘子被一一放到传送带上一样,然后我们还需要将这三个内核的缓存区通过mmap函数映射到用户空间,这样我们在用户层就可以操作摄像头数据了,紧接着我们就可以启动摄像头开始数据捕获,每捕获一帧数据我们就可以做一个出队操作,读取数据,然后将读取过的数据的内核缓存再次入队,依次循环。摄像头模块硬件设备如图4-9所示:图4.9摄像头模块摄像头模块主要有两个功能,第一个是摄像头实时监控的功能,我们将把摄像头拍摄到的视频存放入开发板中,并进行实时的播放。第二个功能是使用摄像头进行拍照,并将拍摄到的照片存放到文件夹中,然后可以利用电子相册的功能来显示拍摄到的照片。摄像头采集数据控制代码如图4.10所示:图4.10摄像头控制代码4.6手机APP的远程控制本环节将在开发板上连接WiFi模块,构建一个无线网络,然后将手机连接入该网络,并使用手机APP来实现远程控制开发板的功能。4.6.1WiFi模块的介绍本次设计使用的WiFi模块是由联发科技研发的一款具有高度整合式的,能够支持150MbpsPHY速率Wi-Fi单芯片——RT3070。该模块完全符合IEEE802.11n及IEEE802.11b/g标准,可以提供高标准的、功能强大的无线网络连接,并可以从远距离提供高可靠性、稳定性高且高成本效益的处理能力。通过对射频架构及基频算法的优化,可以提升模块的性能,以及带来高可靠性而低功耗的处理能力。它的智能型媒介访问控制(MAC)设计采用效率极高的直接内存访问(DMA)引擎,亦配备可减轻主处理器负荷的硬件信息处理加速器。RT3070的设计旨在提供符合国际规范标准的、高服务品质的、安全性高的功能,让用户能够在任何情况下随时享有最佳的效能表现,提升用户的实际体验。WiFi模块硬件设备如图4.11所示:图4.11WiFi模块4.6.2安装WiFi模块驱动(1)下载wifi.tar.gz文件到开发板,解压wifi.tar.gz文件:tar-zxfwifi.tar.gz(2)把RT2870AP.dat放到“/etc/Wireless/RT2870AP/”下,若是/etc下没有Wireless/RT2870AP文件,则使用下面命令新建缺少的目录:1)cd/etc;2)mkdirWireless;3)cdWireless;4)mkdirRT2870AP复制RT2870AP.dat到/etc/Wireless/RT2870AP/:1)cpRT2870AP.dat/etc/Wireless/RT2870AP/修改WiFi的名字和密码:1)vi/etc/Wireless/RT2870AP/RT2870AP.dat>按i,编辑该文件;2)SSID=RT2870AP》wifi名字;3)WPAPSK=1345678》wifi密码;4)按esc,后输入:wq,保存该文件并退出。(3)运行脚本文件install.sh1)./install.shinstall.sh文件里面的内容:1)insmodrtutil3070ap.ko2)insmodrt3070ap.ko3)insmodrtnet3070ap.ko4)ifconfigra023若看到WiFi模块的灯在闪烁,则证明WiFi模块驱动已经安装好了。备注:必须先配置好RT2870AP.dat,再按顺序安装WiFi驱动,才能够给开发板配置ra0ip,否则出现无权限操作ip配置问题,配置好之后WiFi灯才会闪!手机连接开发板WiFi,一定要设置与开发板同网段的IP地址,避免出现IP地址冲突。手机APP远程控制开发板功能界面如图4.12,图4.13所示。图4.12APP的IP登录界面图4.13APP的控制界面然后,就可以通过点击手机APP上的按钮来控制开发板来实现相应的功能。4.7总结以上就是本次设计需要完成的所有基本功能。这些功能的实现相对较为简单,不需要太复杂的代码逻辑,但也有进一步优化的空间。例如,我们可以通过优化代码来提高图片的切换的效率,也可以减少每个模块的内存消耗。同时,还可以再每个模块添加拓展的功能,如可以在电子相册环节添加刷图特效等等。因此,本次设计还拥有很大的提升空间,希望能在以后做进一步完善。参考文献耿东久.基于OSGI是只能家居模拟系统的设计和实现[D].四川:四川电子科技大学.王香童.基于ZigBee的智能三表远程抄表系统的设计与实现[D].天津:天津理工大学,2017.刘力华.基于ZigBee及嵌入式服务器的智能家居设计[D].大连:大连理工大学,2015.杨小燕,纪怀猛,周佳慧,张婉煌.基于Android平台和ZigBee的智能家居系统设计[J].数字技术与应用.2018,02(2):2.徐子同.浅谈智能家居的现状及发展[J].山东工业科技,2017,07(1):157.郭瑶.浅析中国智能家居发展现状及存在问题[J].现代营销(经营版),2019(03):97-97.满莎,杨辉先.基于ARM9的嵌入式无线智能家居网关设计[J].计算机应用,2010,30(09):2541-2544.赵建,张晨秋.基于ARM9的嵌入式视频监控系统的设计与实现[J].太原科技大学学报.2012,33(05):543-357.陆旭生.基于ZigBee的智能家居监控系统的设计与实现[D].黑龙江:黑龙江大学,2017.韦煜.基于ZigBee无线技术的智能家居系统设计与实现[D].四川:电子科技大学,2019.刘亚,赵飞.基于ZigBee的无线传感网络拓扑结构实现[J].南方农机,2017,18(03):92.谢辞时光匆匆,转眼间,为期一个学期的毕业设计即将结束了,这也将意味着我的大学四年的学习生涯马上就要结束了,我也即将从母校北理珠毕业,步入社会。回首大学四年,我的心中充满了感慨,感谢母校北理珠给我提供了这个学习平台,让我能在这里学习到宝贵的知识,并且树立了正确的人生观和价值观,这四年的生活经历将会是我人生中难忘的经历,也会是我人生中宝贵的财富。在这里,我要向所有帮助过我,关心过我的同学和老师表达我最诚挚的谢意。首先,我要感谢的是我的指导老师陈景国老师,从论文的选题到论文的完成,每一步都是在老师的悉心教导下完成的。感谢您能在繁忙的教学工作中,抽出宝贵的时间对我的论文进行指导,在写论文的过程中,遇到了许多的问题,例如专业知识的问题、论文格式的问题等等,但在您的耐心指导下,这些问题都一一得到了解决。您严谨的治学态度,精益求精的工作作风,平易近人的处事风格对我影响深远。在此,再次向您表达我诚挚的谢意:谢谢您!其次,我要向电子科学与技术专业的全体老师表示衷心的感谢,感谢你们的陪伴和教导,在这四年中,你们教会了我许多的知识,我也从你们的身上学到了许多为人处事的道理。你们的教导对我意义非凡,这将会让我永生难忘,再次感谢你们!然后,我要感谢大学四年陪伴我一起学习和生活的同学们,和你们相处真的十分愉快,回想和你们一起学习,一起玩闹的日子,让我十分的感慨,从你们身上,我也学到了许多。和你们即将分别,再次感谢你们!希望以后我们还有再次相聚的机会!最后,我要感谢我的父母,从出生到长大成人,你们一直陪伴着我成长,为我付出了许多,这些我都牢牢地记在心中。你们是我求学路上坚强的后盾,你们对我的爱和期望也是我人生不断前进的动力,我一定会在以后的生活中努力到工作,报答你们的养育之恩,不辜负你们对我的期望。感谢你们!附录程序源代码#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#include<sys/mman.h>#include<linux/input.h>#include<strings.h>#include<pthread.h>#include<stdlib.h>#include<sys/socket.h>#include<arpa/inet.h>#include"lcd.h"#include"yuyv.h"//函数声明intshow_bmp(intx,inty,intbmp_w,intbmp_h,char*bmp_name);inttouch_screen(int*x,int*y);intshow_photo();intinit_lcd();intuninit_lcd();intshow_gif();void*routine(void*arg);void*routine3(void*arg);void*routine2(void*arg);intshow_video();intshow_camera();intshow_music();intshow_camera_photo();//全局变量unsignedint*addr;intlcd_fd;intts_fd;intjpg_num;intcamera_flag;intwifi_flag;intsoc_fd;structsockaddr_incli_addr;intlen;//定义一个线程ID号变量pthread_tid3;intmusic_stop_cont;intmusic_num=1;intmain(){ init_lcd(); show_gif(); intx,y; show_bmp(0,0,800,480,"/good/xhdx/ui/func.bmp"); while(1) { touch_screen(&x,&y); //相册 if(x>100&&x<200&&y>100&&y<200) { show_photo(); } //音乐 elseif(x>300&&x<460&&y>100&&y<200) { show_music(); } //视频 elseif(x>600&&x<750&&y>100&&y<200) { show_video(); } //监控 elseif(x>300&&x<460&&y>300&&y<400) { show_camera(); } //远程控制 if(x>600&&x<750&&y>300&&y<400) { show_app_contrl(); } } uninit_lcd(); return0;}void*routine2(void*arg){ //1、买手机 soc_fd=socket(AF_INET,SOCK_DGRAM,0); if(soc_fd==-1) { printf("createsocketfailed!\n"); //return-1; } structsockaddr_inser_addr; bzero(&ser_addr,sizeof(ser_addr)); ser_addr.sin_family=AF_INET;//选择IPv4 ser_addr.sin_port=htons(2234);//0~65535 ser_addr.sin_addr.s_addr=inet_addr("23");//IP地址 //2、绑定号码 intret=bind(soc_fd,(structsockaddr*)&ser_addr,sizeof(ser_addr)); if(ret==-1) { printf("bindfailed!\n"); close(soc_fd); //return-1; } else { printf("bindsuccess\n"); } //structsockaddr_incli_addr1; intwifi_music_flag=0; charbuf[25]; while(1) { bzero(buf,25); //5、聊天(阻塞:接收数据) ret=recvfrom(soc_fd,buf,25,0,(structsockaddr*)&cli_addr,(socklen_t*)&len); /*if(ret==-1) { printf("recvfromfailed!\n"); perror("recvfromfailed:"); //break; }*/ printf("buf:%s\n",buf); printf("cli_addr:151line:%s\n",inet_ntoa(cli_addr.sin_addr));//打印客户端IP地址 if(0==strncmp(buf,"GET_VIDEO",9)) { printf("strncmp\(buf,\"GET_VIDEO\",9\n"); wifi_flag++; if(wifi_flag==1) { //创建一个摄像头线程 pthread_create(&id3,NULL,routine3,NULL); //ret=sendto(soc_fd,jpg_buf.jpg_data,jpg_buf.jpg_size,0,(structsockaddr*)&cli_addr,sizeof(cli_addr)); } else { pthread_cancel(id3); //5、退出摄像头和停止采集 linux_v4l2_yuyv_quit(); wifi_flag=0; } } elseif(0==strncmp(buf,"ENTER_KUGOU",11)) { lcd_draw_jpg(0,0,"./ui/contrl_music.jpg"); wifi_music_flag=1; } elseif(0==strncmp(buf,"BACK",4)) { lcd_draw_jpg(0,0,"./ui/contrl.jpg"); wifi_music_flag=0; system("killall-9madplay"); printf("killall-9madplay\n"); } elseif(wifi_music_flag==1) { if(0==strncmp(buf,"MUSIC_PREV",10)) { music_stop_cont=1; music_num--; if(music_num==0) music_num=5; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } elseif(0==strncmp(buf,"MUSIC_NEXT",10)) { music_stop_cont=1; music_num++; if(music_num==6) music_num=1; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } elseif(0==strncmp(buf,"MUSIC_PLAY",10)) { music_stop_cont=1; system("killall-9madplay"); printf("killall-9madplay\n"); system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); } elseif(0==strncmp(buf,"MUSIC_STOP_CONT",15)) { music_stop_cont++; if(music_stop_cont==2) { system("killall-STOPmadplay"); printf("killall-STOPmadplay\n"); } else { system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); music_stop_cont=1; } } } printf("recvbuf:%s\n",buf); } //6、挂电话 close(soc_fd);}intshow_app_contrl(){ lcd_draw_jpg(0,0,"./ui/contrl.jpg"); //定义一个线程ID号变量 pthread_tid2; //创建一个创建udpserver端的线程 pthread_create(&id2,NULL,routine2,NULL); charbuf[35]; bzero(buf,35); intx,y; while(1) { touch_screen(&x,&y); //退出远程控制界面 if(x>600&&x<800&&y>400&&y<480) { //如果摄像头发送数据到app的功能被关闭,则不需要取消该线程 if(wifi_flag==1) { //pthread_cancel(id1); printf("退出远程控制界面\n"); pthread_cancel(id3); //5、退出摄像头和停止采集 linux_v4l2_yuyv_quit(); wifi_flag=0; } pthread_cancel(id2); close(soc_fd); show_bmp(0,0,800,480,"/good/xhdx/ui/func.bmp"); break; } //上一首 elseif(x>0&&x<200&&y>200&&y<300) { music_stop_cont=1; music_num--; if(music_num==0) music_num=5; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } //下一首 elseif(x>600&&x<800&&y>200&&y<300) { music_stop_cont=1; music_num++; if(music_num==6) music_num=1; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } //暂停/继续 elseif(x>300&&x<500&&y>200&&y<300) { music_stop_cont++; if(music_stop_cont==2) { system("killall-STOPmadplay"); printf("killall-STOPmadplay\n"); } else { system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); music_stop_cont=1; } } } return0;}//视频播放界面intshow_video(){ printf("nothing\n"); return0;}//监控界面intshow_camera(){ //lcd_draw_jpg(0,0,"video.jpg"); show_bmp(0,0,800,480,"/good/xhdx/ui/video.bmp"); intx,y; //定义一个线程ID号变量 pthread_tid1; //创建一个线程函数 pthread_create(&id1,NULL,routine,NULL); while(1) { touch_screen(&x,&y); //返回 if(x>640&&x<800&&y>380&&y<480) { pthread_cancel(id1); //5、退出摄像头和停止采集 linux_v4l2_yuyv_quit(); show_bmp(0,0,800,480,"/good/xhdx/ui/func.bmp"); break; } //查看监控画面 elseif(x>640&&x<800&&y>0&&y<100) { pthread_cancel(id1); //5、退出摄像头和停止采集 linux_v4l2_yuyv_quit(); show_camera_photo(); //创建一个线程函数 pthread_create(&id1,NULL,routine,NULL); //camera_flag=1; } //拍照 elseif(x>640&&x<800&&y>200&&y<300) { camera_flag=2; } } return0; }//音乐界面intshow_music(){ intmusic_num=1; intx,y; charbuf[40]; bzero(buf,40); intmusic_stop_cont=0; show_bmp(0,0,800,480,"./ui/music.bmp"); while(1) { touch_screen(&x,&y); //音乐--返回 if(x>630&&x<800&&y>400&&y<480) { show_bmp(0,0,800,480,"/good/xhdx/ui/func.bmp"); break; } //上一首 elseif(x>40&&x<250&&y>230&&y<330) { music_stop_cont=1; music_num--; if(music_num==0) music_num=5; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } //下一首 elseif(x>600&&x<790&&y>230&&y<340) { music_num++; music_stop_cont=1; if(music_num==6) music_num=1; system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); system("killall-9madplay"); printf("killall-9madplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); printf("%s\n",buf); } //暂停/继续 elseif(x>290&&x<580&&y>200&&y<320) { music_stop_cont++; if(music_stop_cont==2) { system("killall-STOPmadplay"); printf("killall-STOPmadplay\n"); } else { system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); music_stop_cont=1; } } //播放 elseif(x>330&&x<570&&y>100&&y<200) { music_stop_cont=1; system("killall-9madplay"); printf("killall-9madplay\n"); system("killall-CONTmadplay"); printf("killall-CONTmadplay\n"); sprintf(buf,"madplay./music/%d.mp3&",music_num); system(buf); } } return0;}//摄像头线程void*routine(void*arg){ structjpg_datajpg_buf; charjpg_path[25]; bzero(jpg_path,25); intjpg_fd; //1、初始化摄像头 linux_v4l2_yuyv_init("/dev/video7"); //2、开始捕捉 linux_v4l2_start_yuyv_capturing(); while(1) { //3、获取摄像头一帧jpeg数据 640*480 linux_v4l2_get_yuyv_data(&jpg_buf); //4、显示摄像头采集数据 show_video_data(0,0,jpg_buf.jpg_data,jpg_buf.jpg_size); //拍照 if(camera_flag==2) { jpg_num++; //1、创建空白文件 sprintf(jpg_path,"./jpg/%d.jpg",jpg_num); jpg_fd=open(jpg_path,O_CREAT|O_TRUNC|O_WRONLY); if(jpg_fd==-1) { printf("create%sfailed!\n",jpg_path); } else { printf("createsuccess\n"); } //2、把摄像头捕捉的数据写入文件 write(jpg_fd,jpg_buf.jpg_data,jpg_buf.jpg_size); //3、关闭文件 close(jpg_fd); camera_flag=0; } } returnNULL; }//摄像头线程void*routine3(void*arg){ structjpg_datajpg_buf; intret; //1、初始化摄像头 linux_v4l2_yuyv_init("/dev/video7"); //2、开始捕捉 linux_v4l2_start_yuyv_capturing(); while(1) { if(wifi_flag==1) { //3、获取摄像头一帧jpeg数据 640*480 linux_v4l2_get_yuyv_data(&jpg_buf); //4、显示摄像头采集数据 //show_video_data(0,0,jpg_buf.jpg_data,jpg_buf.jpg_size); ret=sendto(soc_fd,jpg_buf.jpg_data,jpg_buf.jpg_size,0,(structsockaddr*)&cli_addr,len); /* if(ret==-1) { perror("sendtoerror:"); //printf("sendtoerror\n"); printf("cli_addr:%s\n",inet_ntoa(cli_addr.sin_addr)); }*/ } } returnNULL; }//摄像头监控截图界面intshow_camera_photo(){ intx,y; intphoto_num=1; show_bmp(0,0,800,480,"/good/xhdx/ui/photo.bmp"); lcd_draw_jpg(0,0,"./jpg/1.jpg"); charbuf[35]; bzero(buf,35); while(1) { touch_screen(&x,&y); //相册--返回 if(x>640&&x<800&&y>380&&y<480) { show_bmp(0,0,800,480,"/good/xhdx/ui/video.bmp"); break; } //相册--上一张 elseif(x>640&&x<800&&y>0&&y<100) { photo_num--;//1~5 if(photo_num==0) { photo_num=jpg_num; } //合成字符串,根据变量合成字符串,放到数组buf里面 sprintf(buf,"./jpg/%d.jpg",photo_num); lcd_draw_jpg(0,0,buf); } //相册--下一张 elseif(x>640&&x<800&&y>200&&y<300) { photo_num++;//1~5 if(photo_num==jpg_num+1) { photo_num=1; } //合成字符串,根据变量合成字符串,放到数组buf里面 sprintf(buf,"./jpg/%d.jpg",photo_num); lcd_draw_jpg(0,0,buf); } } return0; }//显示动态图intshow_gif(){ inti; charbuf[25]={0}; //显示动态图 for(i=0;i<60;i++) { sprintf(buf,"./gif_jpg/Frame%d.jpg",i); lcd_draw_jpg(0,0,buf); usleep(1000);//延时10毫秒 } return0; }//相册界面intshow_photo(){ intx,y; intphoto_num=1; show_bmp(0,0,800,480,"/good/xhdx/ui/photo.bmp"); show_bmp(0,0,640,480,"/good/xhdx/ui/photo_bmp/1.bmp"); charbuf[35]; bzero(buf,35); //char

温馨提示

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

评论

0/150

提交评论