物联网智能家居系统毕业论文

上传人:仙*** 文档编号:83559820 上传时间:2022-05-01 格式:DOC 页数:64 大小:414.50KB
返回 下载 相关 举报
物联网智能家居系统毕业论文_第1页
第1页 / 共64页
物联网智能家居系统毕业论文_第2页
第2页 / 共64页
物联网智能家居系统毕业论文_第3页
第3页 / 共64页
点击查看更多>>
资源描述
word某某电子信息职业技术学院毕业论文题目 物联网智能家居系统 姓 名专业班级指导教师完成时间某某电子信息职业技术学院 制2017.160 / 64摘 要:随着经济的高速增长。建立一个低本钱、高效率的智能家居系统已成为当今世界的一个热点话题。目前越来越多的智能家居产品出现在市场上,其中以基于 网的智能安防系统居多。目前在我国,使用家庭 的用户越来越少,而且 线路受地域的影响严重容易损坏,所以这类产品局限性很大。随着电信GSM网络覆盖X围的无缝化、广阔化以与手机的日益普与为基于GSM网络的智能家居系统提供了巨大的应用空间。本文设计了一种基于GSM网络的智能家居系统。本系统采用cortexA8为系统控制核心,对家庭中出现的意外情况使用各种传感器进展采集,然后通过GSM模块把采集到的信息发送给管理人员,管理员根据收到的信息发送相关指令给GSM模块来控制现场执行机构,完成意外情况的排除。关键词:智能家居 GSM 传感器 远程控制目录一、 绪论1一 智能家居概述1二 智能家居网络构成21、家居网络控制平台22、智能家居子系统23、智能家居网络的信号传输介质34、远程控制技术概括45、智能家居控制系统的国内外开展现状5二、系统需求分析与方案6一应用程序功能需求分析6二开发环境需求分析61、 硬件环境62、 软件环境7三、硬件模块与其驱动设计实现7一 主控模块7二 通信模块71、 TC35模块简介72、 TC35模块与cortexA8连接方式73、传感器模块8四、系统软件局部36一主程序与大致流程361、温度监测线程372、视频监测线程383、报警流程39二短消息程序设计401、 AT指令介绍402、PDU编码规如此423、短信模式设置424、短信的发送方法43五、测试与结论43一测试原如此43二测试方案43三结论44参 考 文 献44一、 绪论21世纪是信息化的时代,物联网新技术推动了人类文明的进步。随着人们生活水平的提高以与科技的高速开展,智能化家居已成为一种必然趋势而深入千家万户。智能化家居是利用电力自动化、计算机、网络通信、信息、结构化布线、无线等技术将多种设备应用和综合功能组成一个强大的完善的系统。它以住房为平台,同时兼备网络家电、家电设备自动化、建筑、通信、远程医疗、家庭办公、娱乐等功能,集结构、服务、系统、管理为一体的舒适、节能、安全、便利、高效、娱乐、环保的居住环境。本文介绍的智能化家居控制系统可以使得人们通过手机在任何时候、任意地点对家中的任意电器例如:热水器、空调、电饭煲、灯光等进展远程控制。你可以在下班途中,预先将家中的空调打开、电饭煲煮好香喷喷的米饭、让热水器提前烧好热水,而这一切的实现都仅仅是靠一条短信完成。本系统采用cortexA8作为主控器件,远程控制是基于GSM网络短消息通信方式,AT指令作为系统控制命令,cortexA8通过对收到的信息进展解码来识别控制信号,用户只需向TC35模块发送相应指令即可实现远程控制操作。温度传感器完成现场信息的采集,cortexA8对数据进展与时的处理,实现实时测控;短消息发送局部采用基于GSM模块TC35和IT公司的电平转换芯片MAX232等器件构成的移动终端的硬件电路,完成短消息收发功能。一 智能家居概述进入21世纪,科学技术与生产力加速了社会的开展创造能力,随之而来的也是人类对于物质水平的大力需求,而居住的环境要求也成为了人们关注的领域,所以“智能化这一概念也促使科技工作者们将其引入智能家居民应用方面的小区住宅以与小区建筑技术之中。由于计算机控制系统开展迅速,以与电子信息行业的开展成长快速,也大力促进了智能家居控制系统的产生。因为固定 和互联网技术根本上是传统智能家居控制系统的技术核心,所以安装固定 以与互联网成为了达到家庭用户传统智能家居控制系统的产生的根本硬件技术、以与硬件要求。但是随着电子技术、智能通信技术以与网络技术开展日新月异的今天,基于GSM网络通讯体统的低本钱无限制智能家居控制系统成为广阔居民以与中国居民享受新一代智能家居控制系统的变革捷径。智能家居系统成为一种新兴的综合技术学科。智能家居系统也可被定义为一个控制过程,或者控制系统,利用现在被大多数科技人员已掌握的计算机技术、网络布线技术、网络通信系统将其糅合,使之成为融合在家居控制中的多个子系统,并使其智能的结合在一起。目前相比拟其他时分多址技术手段而言,更加完美、成熟、应用更广泛的一种普与率很高的系统是GSM(Global System for Mobile munication)系统。在我国,已建成的根本覆盖全国的GSM数字蜂窝移动技术信息网,早已成为我国公众移动生活密不可分的一种技术之一。在GSM短信服务的根底上,智能家居控制系统是在移动网络通讯技术的短信应用功能的技术运用。由于GSM网络通讯系统在全国X围实现了联网以与漫游能力,所以它的网络功能很强大,用户无需另外搭建网络,因此,在GSM网络覆盖率达到全国X围的情况下,为客户省下了昂贵的网络搭建费用以与维护网络费用。同时,它对用户数量的限制也十分少,也为客户克制了一般智能家居控制系统中系统本钱高、维护困难、并且网络覆盖X围小以与用户组数量少的缺点。相比传统网络智能家居控制系统在网络通信覆盖率上具有较大的优势,加之GSM本身就具有数据的输送功能,这也促成了GSM应用在广阔生活中得到迅速普与。基于GSM的无线通讯智能系统还具有双线传送数据的功能、性能稳定。为客户在远程操控以与用户控制设备提供了强大技术平台。远程操控系统应用广泛,遍与中国经济生活开展的各大领域。而且目前人们正在使用中的操控系统从本钱、性能、稳定性、便捷性以与维护的难易方面根本都不能使人们最大程度的满意。所以,GSM网络通信技术的提出大大的提升了智能家居控制系统的完善程度。二 智能家居网络构成1、家居网络控制平台智能家居主控制平台是智能家居控制系统的“心脏局部,等效的可以说是智能家居的核心。对方可以通过手机短信的方式承受用户命令并实时操作,或者对对用户手机发送控制电器运转情况,对家庭总线和各个网络子系统实施连接,完成智能家居控制系统平台的构成。2、智能家居子系统智能家居系统的连接一般均为家电网络中的耗电类型的家电电器。例如冰箱、空调、电磁炉、热水器、电饭煲、电灯等家用电器。这些消耗电类型的家庭电器可以在现场立即布线互联构成智能家居系统,与主控家居智能平台相连接,再进展现场网络综合布线连接智能家居子系统,就可以由用户利用协议中的操作指令短信操作家庭中电器设备了。3、智能家居网络的信号传输介质智能家居网络通讯形式多彩多样,可以采用不同的传输介质传输网络通讯信号,大体上有电力线、 线、双绞线、无线方式。1) 电力线基于电力线为传输介质的通信网络可以说是最方便的,因为现在家庭根本都已铺设供电源的电源线而且家中的电源线已经延伸到家庭生活的每个角落。而且,现在大局部家用电器设备都离不开电源。所以利用家中的电力线完成智能家居控制系统网络方案方便而且经济廉价。在国际上,首个实现家庭电器智能化的方案便是通过电力线作为信息传输载体的而达成的。(2) 线利用 线作为网络信息传输载体起步虽然相较于电力线稍微晚一些,但是因为它具有布局简单、使用方便、安全性能好和易于大规模推广等优点,而且近期 线的传输速率也完成了大幅度提升,所以它的应用和开展非常快,在美国已有成熟的产品。其中包括:3、Advanced MicroDevices、AT&T、paq、HewlettPackard、Intel、IBM和Lucent Technologies等发起成立了“ 线家居网络协会,至今己有100多个成员。(3) 双绞线同轴电缆目前最通用的传输介质是用双绞线同轴电缆。可是在基于双绞线同轴电缆实际操作中最大的困难是需要另外铺设24根专用的传输线。但是它拥有通信可靠性和总线接口相对简单等优点,其仍然可以受到广泛用户的大批量应用。(4) 无线方式无线方式通过射频载波或者红外线等形式传输用户信息,“蓝牙技术是最近开展最火热的无线通信方式。音频和视频信号、计算机网络信号、控制信号均可以利用蓝牙技术传输家庭用户信号。而且用无线方式传输信息时无需架设任何线路且实现极其方便灵活,非常适合在家庭网络中应用。由于无线方式简单方便,易于架设,所以本论文便是使用的GSM无线技术平台操作的智能家居平台系统。4、远程控制技术概括本论文研究立于一个对于家居电器进展远程控制,以便于实现家居智能化的系统。远程控制指的是远端的家居控制者通过通信系统对现场的家居电器系统进展控制,其目的在于解除地域和环境对控制的限制,实现高集中的远程控制,最终实现生产资料和社会资源与通讯资源的优化配置。现代远程控制技术是计算机技术、通信技术、网络技术的集合,也是信息技术和控制技术的结合。从用户角度来讲,需要的是一种方便、安全、可靠的一种传输方式。可以利用公共数据网或者通过架设专线来实现有线传输,然而在大多数情况下,传输距离、架线环境等条件限制了有线传输2。无线传输也有很多途径,如架设微波线路、(超)短波电台等都是通过自建的无线发射接收系统。然而无线传输架设本钱高、频率资源的限制、容易受到地形地貌的影响、系统的架设和维护工作繁重,在业务量小、用户数量大、位置分散等应用场合中也受到很大限制。目前,经过三代开展的移动通信,移动通信体制中的时分多址技术中最完善、最成熟、应用最广的一种移动通信系统就是GSM系统2。在数据采集、远距离监控、GPS定位、缴费通知、无线报警等领域GMS都有着广泛的应用。在全国X围内GSM网络实现了联网和漫游,用户无需另外组网,GMS具有很强的网络能力,网络覆盖X围广阔,用户不必再花费节昂贵的建网费用和维护费用2。比传统的集群系统在无线网络覆盖上具有无法比拟的优势,加上GSM的SMS本身具备的数据传送功能,都使得这些应用得到迅速的普与2。GSM短信息系统性能稳定还可进展双向数据传输,为监控设备和远程数据传送通信提供了一个可靠、安全的支持平台。短消息发送一般采用其专用控制信道(DCCH)来发送,短信息的服务端可以实时的了解到对方是否接收到短信息,一旦信息传送失败,短信中心实时得知被叫用户没有回复信息,网络管理端如此会继续发送消息,以保证被叫方能收到短信息。所以,在GSM网络的一些主要的电信业务当中,此类短消息业务的信息传递是实时安全的2。每个短消息的信息量都是140个八位组(7比特编码,160个字符)不会超过140个字节,绝对可以满足单方面监测用户指标的信息量。综上所述,智能家居控制系统选用GSM的短消息控制方式,来实现智能家居设备的远程控制是可行的。5、智能家居控制系统的国内外开展现状目前,我国每年竣工的建筑面积达到20亿平米,智能家居/建筑的产值至少在1-2万亿元以上。智能家居的开展分为三个阶段:首先是家庭电子化Home Electronics阶段,这个时期主要是面向单个的电器,家庭电器之间并没有形成网络,亦没有大的联系。其次是住宅自动化Home Automation阶段,这个时期是面向功能的阶段,一局部的家庭电器之间形成了简单的网络,主要是为了实现某个特定单一的功能,例如单一的自动抄表功能。最后是家居智能化欧洲称为Smart Home,美国称为 Wise House阶段,这个时期是面向系统设计的阶段,系统通过家庭分布总线把住宅内各种与信息相关的通信设备、家用电器、报警装置并到网络节点中进展集中的监控、管理,保持家电与环境的协调,提供生活、工作、学习以与娱乐的各种优质服务,营造一种温馨舒适的家庭气氛。智能家居控制系统提供高效、舒适的家居环境,确保住户的生命财产安全;集中或远程监控家居环境的温度、湿度以与风速等,空气中成分也可检验,为空气质量的提高提供依据;电视机、CD等娱乐设施也不再需要人们近距离调节;周围环境以与太阳光的强弱变化都可以合理利用,使能耗降低,资源合理利用,保护环境;提供现代化的通信、信息服务12。在智能家居系统研发中,美国和欧洲一些兴旺国家一直处于领先地位。近年来,一大批国外知名企业先后挤身于智能家居的研发中尤其以美国微软公司与摩托罗拉公司等为首12。摩托罗拉公司开发的“居所之门、IBM公司开发的“家庭主任、微软公司开发的“梦幻之家等均已日趋成熟12。在亚洲,日本韩国新等一些经济兴旺国家的主要企业也进军智能化家居系统的开发,对家居市场更是跃跃欲试。经过哥本哈根会议,我国更加明确了节能减排,绿色建筑的目标,这就使住宅智能化凸显出了其合理规划,最大限度的节约能源的优势。如果我国大力推广绿色建筑,仅在铺设智能化系统上所需的新设备的生产上就有2000亿到3000亿人民币的新市场。而中国“智能家居网络必在“智能化住宅的框架下形成一个新型IT产业,而这一切必将对未来几十年我国房地产的健康有效开展起着深远的影响。由于智能家居系统还缺乏统一明确的国际标准,许多公司开发出的产品都是基于自己组的网络和信息交换协议,很多产品是针对特定的组网环境开发的,局部核心技术没有对外公布,技术复杂,直接导致了使用X围的局限性。再者,缺乏对应的第三方产品,各个接入设备之间不能兼容、互操作性差、不利于产品的扩大,因而进一步局限了产品的开展。再加上,有的系统本钱过高,严重影响了产品的普与。因此设计一个符合国家国情和规X的集远程控制和本地控制为一体的智能家居控制系统是非常具有现实意义的,且势在必行。作为智能家居的核心系统的智能家居的控制系统,它的设计功能的完善必将推动住宅智能化的开展。而系统功能的集成化、用户使用的傻瓜化以与市场的平民化将是智能家居控制器的开展趋势,系统也将逐步迈向绿色化。最终,我想全人类的梦想是智能家居控制系统将囊括所有的家事杂物,让我们真正的享受舒适温馨的家庭生活。二、系统需求分析与方案 物联网智能家居要将各成体系、互不相连的子系统协调起来,就必须有一个兼容性强的中央家居处理平台,承受并处理控制设施发出的信息,然后传送信号给你希望控制的家电或者其他家居子系统。一应用程序功能需求分析本设计采用模块化设计,整个系统由通信模块、视频采集模块、传感器模块、Lcd模块组成。cortexA8通过对传感器模块传送来的信息进展判断,如果信息异常,如此利用蜂鸣器以与LED实现报警,并通过GSM模块向用户发送报警信息。同时用户也可以根据需要,发送短信给GSM模块来控制相应的家电。实现对现场图像实时监控与工作位置实时控制。二开发环境需求分析1、 硬件环境(1) 硬件配置原如此具有可靠性,可用性和安全性,在满足软件需求的条件下,具有完善的技术支持,能够满足个人学习和设计需要。(2) 运行本软件所需的硬件资源CPU: 800M与以上;内存容量:内存达128M以上。本系统采用cortexA8为中央处理平台。2、 软件环境(1) 系统软件配置规如此能够在指定的运行环境下,满足该软件的可靠性、安全性和可用性的要求。(2) 系统软件的配置方案配置有持续工作能力、高稳定性、高度可集成的开放式标准的操作系统,如Windows NT 、Windows2000、UNIX,Linux等。熟悉C+高级程序设计语言。本系统采用Linux为操作系统。三、硬件模块与其驱动设计实现一 主控模块本系统采用cortexA8为控制核心,cortexA8不断监测有没有异常信息,当发现异常信息时,如此进入相应中断,利用cortexA8通过UART串口向GSM模块发送一系列AT指令并启动GSM模块发送报警短信给用户。再根据用户发送回来的指令打开相应的继电器来控制家用电器,完成现场控制和监测任务。二 通信模块1、 TC35模块简介TC35是西门子公司推出的一种完整的无线GSM模块,主要由GSM基带处理器、GSM射频模块、供电模块ASIC、闪存、ZIF连接器、天线接口、SIM卡支架七局部组成。它可以快速、安全可靠地实现系统方案中的数据传输、短消息服务Short Message Service。模块的工作电压为3.34.8V。该模块有AT指令集接口,支持文本和PDU模式的短消息第三组的二类 等。此外,TC35还拥有多方通话、 簿功能、漫游检测等功能。TC35具有TALK、IDLE、省电模式三种常用工作模式。通过它的40管脚的ZIF连接器实现指令、数据、语音信号、控制信号的双向传输以与电源连接。TC35的核心是基带处理器,主要处理GSM终端内的语音、数据信号,蜂窝射频设备中所有的模拟和数字功能它也拥有。可支持EFR、FR和语音编码而不需要额外硬件电路。2、 TC35模块与cortexA8连接方式TC35模块主要通过串口与cortexA8进展连接,从而cortexA8实现对TC35模块的控制。考虑到系统设计接口的简单性并且与cortexA8的UART进展连接,所以只采用TC35的串口提供了的两线TXD、RXD控制线连接。系统采用软件对TC35模块通信模块进展控制非常灵活,过多硬件信号的检测也很好地防止了。对于TC35的其它管脚在不使用的时候,如果该管脚为输出时,一般将该管脚悬空;如果该管脚为输入管脚,如此需要将该管脚通过10的电阻上拉。另外需要将IGT管脚上拉因为IGT管脚是控制TC35模块工作的管脚。并且cortexA8与该管脚进展连接,因此我们可以利用cortexA8来控制TC35模块的工作模式。由于TC35模块功能健全,TC35模块的电源管脚是并连在一起的,因此这里不需要做任何的射频处理和信号处理。此外,IGT管脚是TC35模快的启动脚,与cortexA8的ALE管脚相连接。系统加电后为使TC35i进入工作状态,必须在ALE管脚加一个大于100ms的低脉冲,电平下降持续时间不可超过1ms。以下为TC35模块的接口设计。3、传感器模块linux2.6内核的设备驱动模型中关心总线、设备和驱动这三个实体,总线将设备和驱动绑定。SOC系统中集成的独立的外设控制器、挂接在soc内存空间的外设不依附于PCI、USB、I2C、SPI等。基于这个背景linux发明了一种虚拟的总线,称为platform总线,相应的设备platform_device,而驱动称为platform_driver。1led图3.1 led电路采用platform框架 自动获取设备号,生成设备节点。led驱动:struct file_operations fops = .owner = THIS_MODULE,.read = led_read,.ioctl = led_ioctl,.release = led_release,.open = led_open,.write = led_write,;static int led_probe(struct platform_device *devices)struct resource *r;int ret;dev_t dev = MKDEV(led_major, led_minor);if(led_major)ret = register_chrdev_region(dev, count, devname);elseret = alloc_chrdev_region(&dev, led_minor, count, devname);led_major = MAJOR(dev);if(ret)return ret;cdev_init(&cdev, &fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_unreg_chrdev;atomic_set(&num, 0);myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev, NULL, %s%d, devname, led_minor);r = platform_get_resource(devices, IORESOURCE_MEM, 0);if (r = NULL) goto out_class_destroy;GPG3_CON=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 1);if (r = NULL) goto out_class_destroy;GPG3_DAT=r-start;return 0;out_class_destroy:device_destroy(myclass, dev);class_destroy(myclass);out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(dev, count);return -EINVAL;int led_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)unsigned int m=0x0;int tmp;if(cmd=CMDINIT)if(atomic_sub_and_test(1,&num)gpg3con = ioremap(GPG3_CON, 4);if(NULL = gpg3con)return -ENOMEM;gpg3dat = ioremap(GPG3_DAT, 4);if(NULL = gpg3dat)return -ENOMEM;tmp=ioread32(gpg3con);tmp=tmp&(0xffff);iowrite32(0x1111|tmp, gpg3con);tmp=ioread32(gpg3dat);tmp=tmp&(0xf);iowrite32(0x0|tmp, gpg3dat);atomic_inc(&num);return 0;else m=cmd & 0xf;tmp=ioread32(gpg3dat);tmp=tmp&(0xf);iowrite32(m, gpg3dat);return 0;led应用程序设计void led_init(void); 函数功能:打开led设备并int led_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) 函数功能:LED报警 输入参数:cmd 参数表示那个灯亮void led_exit(void); 函数功能:关闭led设备2 蜂鸣器图3.2 pwm电路图采用platform框架 自动获取设备号,生成设备节点。由于这个蜂鸣器是无源的,所以要想使其产生声音必须给他提供一个有一定频率的上下电平。所以这里我们采用S5PC100的PWM定时器来使蜂鸣器发出声音。static int pwm_probe(struct platform_device *devices)struct resource *r;int ret;dev_t dev = MKDEV(pwm_major, pwm_minor);if(pwm_major)ret = register_chrdev_region(dev, count, devname);elseret = alloc_chrdev_region(&dev, pwm_minor, count, devname);pwm_major = MAJOR(dev);if(ret)return ret;cdev_init(&cdev, &fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_unreg_chrdev;atomic_set(&num, 0);myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev, NULL, %s%d, devname, pwm_minor);r = platform_get_resource(devices, IORESOURCE_MEM, 0);if (r = NULL) goto out_class_destroy;GPD_CON1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 1);if (r = NULL) goto out_class_destroy;TCFG0=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 2);if (r = NULL) goto out_class_destroy;TCFG1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 3);if (r = NULL) goto out_class_destroy;TTB1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 4);if (r = NULL) goto out_class_destroy;TCMPB1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 5);if (r = NULL) goto out_class_destroy;TCON=r-start;return 0;out_class_destroy:device_destroy(myclass, dev);class_destroy(myclass);out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(dev, count);return -EINVAL;int pwm_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)int tmp;if(cmd=CMDINIT)if(atomic_sub_and_test(1,&num)gpdcon1 = ioremap(GPD_CON1, 4);if(NULL = gpdcon1)return -ENOMEM;tcfg0 = ioremap(TCFG0, 4);if(NULL = tcfg0)return -ENOMEM;tcfg1 = ioremap(TCFG1, 4);if(NULL = tcfg1)return -ENOMEM;ttb1 = ioremap(TTB1, 4);if(NULL = ttb1)return -ENOMEM;tcmpb1 = ioremap(TCMPB1, 4);if(NULL = tcmpb1)return -ENOMEM;gtcon = ioremap(TCON, 4);if(NULL = gtcon)return -ENOMEM;tmp=ioread32(gpdcon1);tmp=tmp&(0xf4);tmp=tmp|(0x24);iowrite32(tmp, gpdcon1);tmp=ioread32(tcfg0);tmp=tmp&0xff;tmp=tmp|0xfe;iowrite32(tmp, tcfg0);tmp=ioread32(tcfg1);tmp=tmp&(0xf4);tmp=tmp|(0x14);iowrite32(tmp, tcfg1);iowrite32(300, ttb1);iowrite32(150, tcmpb1);tmp=ioread32(gtcon);tmp=tmp|0x0e8;tmp=tmp&(0x018);iowrite32(tmp, gtcon);atomic_inc(&num);return 0;else if(cmd=CMDGO)tmp=ioread32(gtcon);tmp=tmp|(0x0d8);tmp=tmp&(0x028);iowrite32(tmp, gtcon);else if(cmd=CMDSTOP)tmp=ioread32(gtcon);tmp=tmp&(0x0fadapter,I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA)return -EIO;data = kzalloc(sizeof(struct lm75_data), GFP_KERNEL);if (!data)return -ENOMEM;i2c_set_clientdata(client, data);mutex_init(&data-update_lock);set_mask = 0;clr_mask = (1 0)| (1 6) | (1 5);status = lm75_read_value(client, LM75_REG_CONF);if (status dev, Cant read config? %dn, status);goto exit_free;data-orig_conf = status;new = status & clr_mask;new |= set_mask;if (status != new)lm75_write_value(client, LM75_REG_CONF, new);dev_dbg(&client-dev, Config %02xn, new);devn = MKDEV(lm75_major, lm75_minor);if(lm75_major)status = register_chrdev_region(devn, count, devname);elsestatus = alloc_chrdev_region(&devn, lm75_minor, count, devname);lm75_major = MAJOR(devn);if(status)return status;cdev_init(&cdev, &lm75_fops);status=cdev_add(&cdev, devn, 1);if(status)goto out_unreg_chrdev;myclass = class_create(THIS_MODULE, devname);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, devn, NULL, %s%d, devname, lm75_minor);goto out;out_cdevdel:cdev_del(&cdev);out_unreg_chrdev:unregister_chrdev_region(devn, count);exit_free:kfree(data);out:return status;static int lm75_read_value(struct i2c_client *client, u8 reg)int value;if (reg = LM75_REG_CONF)return i2c_smbus_read_byte_data(client, reg);value = i2c_smbus_read_word_data(client, reg);return (value 7; n=n-1;n=n; n=n&0xfe;n=-n; elsen=n7;tmp=n*0.5;4视屏模块图3.4 V4L2流程V4L2采用流水线的方式,操作更简单直观,根本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现。打开视频设备在Linux中,设备被看做一个文件。使用open函数打开视频设备。打开设备有两种方式:1、用非阻塞模式打开int Fd;Fd = open(/dev/video2, O_RDWR | O_NONBLOCK, 0);2用阻塞模式打开:Fd = open(/dev/video2, O_RDWR, 0);应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存DQBUFF里的东西返回给应用程序。设定属性与采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进展管理: int ioctl (int _fd, unsigned long int _request, ./*args*/) ;在进展V4L2开发中,常用的命令标志符如下(some are optional): VIDIOC_REQBUFS: 分配内存 VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址 VIDIOC_QUERYCAP:查询驱动功能 VIDIOC_ENUM_FMT:得到视频设备支持的视频格式 VIDIOC_S_FMT: 设置视频设备的频捕获格式 VIDIOC_G_FMT: 得到视频设备的频捕获格式 VIDIOC_TRY_FMT: 视频设备支持的显示格式 VIDIOC_QBUF: 从缓存中读取数据 VIDIOC_DQBUF: 数据重新进入缓存队列 VIDIOC_STREAMON:开始视频获取VIDIOC_STREAMOFF:完毕视频获取 VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。 在亚洲,一般使用PAL720X576制式的摄像头,而欧洲一般使用NTSC720X480,使用VIDIOC_QUERYSTD来检测:v4l2_std_id std;do ret = ioctl(fd, VIDIOC_QUERYSTD, &std); while (ret = -1 & errno = EAGAIN);switch (std) case V4L2_STD_NTSC: / case V4L2_STD_PAL: /设置视频捕获格式当检测完视频设备支持的标准后,还需要设定视频捕获格式,结构如下:struct v4l2_format fmmt;memset ( & fmmt, 0, sizeof(fmmt) );fmmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmmt.fmt.pix.width = 720;fmmt.fmt.pix.height = 576;fmmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;fmmt.fmt.pix.field = V4L2_FIELD_INTERLACED;if (ioctl(Fd, VIDIOC_S_FMT, & fmmt) = -1) return -1;v4l2_format结构定义:struct v4l2_format enum v4l2_buf_type type; union struct v4l2_pix_format pix; struct v4l2_window win; struct v4l2_vbi_format vbi; _u8 raw_data200; fmt;struct v4l2_pix_format _u32 width; _u32 height; _u32 pixelformat; enum v4l2_field field; _u32 bytesperline; _u32 sizeimage; enum v4l2_colorspace colorspace; _u32 priv; ;分配内存然后为从摄像头捕获的图像分配内存:struct v4l2_requestbuffers req;if (ioctl(Fd, VIDIOC_REQBUFS, &req) = -1) return -1;v4l2_requestbuffers结定义:struct v4l2_requestbuffers _u32 count; enum v4l2_buf_type type; enum v4l2_memory memory; _u32 reserved2;得到视频缓存的内存空间使用VIDIOC_REQBUFS命令,来得到count个缓存,然后通过使用VIDIOC_QUERYBUF命令来得到分配的缓存的地址,再用mmap函数把地址映射为应用程序中的绝对地址,最后把得到的缓存放入缓存队列以便循环利用。typedef struct VideoBuffer void *start; size_t length; VideoBuffer;VideoBuffer* buffers = calloc( req.count, sizeof(*buffers) );struct v4l2_buffer buf;for (numBufs = 0; numBufs req.count; numBufs+) memset( &buf, 0, sizeof(buf) ); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = numBufs; if (ioctl(fd, VIDIOC_QUERYBUF, &buf) = -1) return -1; buffersnumBufs.length = buf.length; / 转换成相对地址 buffersnumBufs.start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED,fd, buf.m.offset); if (buffersnumBufs.start = MAP_FAILED) return -1; if (ioctl(fd, VIDIOC_QBUF, &buf) = -1) return -1; 视频采集方式操作系统一般把系统使用的内存划分成用户空间和内核空间,分别由应用程序管理和操作系统管理。应用程序可以直接访问内存的地址,而内核空间存放的是供内核访问的代码和数据,用户不能直接访问。最开始用户不能直接访问v4l2获取的视频数据因为该段数据是属于内核空间,必须进展地址转换。获取视频有三种方式:内存映射、用户指针模式和read、write方式。使用read、write方式,内核空间和用户空间不能进展数据的交换,而且浪费大量用户的内存空间,效率低。内存映射模式:应用程序不能直接使用设备里的物理地址映因此必须通过映射即mmap函数达到这种效果。用户指针模式:应用程序自己分配内存空间。这一步需要在v4l2_requestbuffers里将
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!