物联网智能家居系统毕业论文设计_第1页
物联网智能家居系统毕业论文设计_第2页
物联网智能家居系统毕业论文设计_第3页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、天津电子信息职业技术学院毕业论文题目物联网智能家居系统姓 名专业班级 指导教师 完成时间天津电子信息职业技术学院制2017.1摘 要:随着经济的高速增长。建立一个低成本、高效率的智能家居系统已成为当今世界的一个热点话题。目前越来越多的智能家居产品出现在市场上,其中以基于电话网的智能 安防系统居多。目前在我国,使用家庭电话的用户越来越少,而且电话线路受地域的影响 严重容易损坏,所以这类产品局限性很大。随着电信GSM网络覆盖范围的无缝化、广阔化以及手机的日益普及为基于 GSM网络的智能家居系统提供了巨大的应用空间。本文设计了一种基于 GSk网络的智能家居系统。本系统采用cortexA8为系统控制核

2、心, 对家庭中出现的意外情况使用各种传感器进行采集,然后通过GSM莫块把采集到的信息发送给管理人员,管理员根据收到的信息发送相关指令给GSM莫块来控制现场执行机构,完成意外情况的排除。关键词:智能家居GSM传感器远程控制目录一、绪论1(一)智能家居概述1(二)智能家居网络构成21、 家居网络控制平台22、 智能家居子系统23、 智能家居网络的信号传输介质 34、远程控制技术概括45、智能家居控制系统的国内外发展现状 5二、系统需求分析及方案 6(一)应用程序功能需求分析6(二)开发环境需求分析 61、硬件环境62、软件环境7三、硬件模块及其驱动设计实现 7(一)主控模块7(二)通信模块71、

3、TC35模块简介 72、 TC35模块与cortexA8连接方式 73、 传感器模块8四、系统软件部分36(一)主程序及大致流程361、 温度监测线程372、 视频监测线程383、 报警流程39(二)短消息程序设计401、AT指令介绍402、PDU编码规贝U 423、短信模式设置42434、短信的发送方法五、测试及结论43(一)测试原则43(二)测试方案43(三)结论44参考文献45绪论21世纪是信息化的时代,物联网新技术推动了人类文明的进步。随着人们 生活水平的提高以及科技的高速发展,智能化家居已成为一种必然趋势而深入 千家万户。智能化家居是利用电力自动化、计算机、网络通信、信息、结构化 布

4、线、无线等技术将多种设备应用和综合功能组成一个强大的完善的系统。它 以住房为平台,同时兼备网络家电、家电设备自动化、建筑、通信、远程医疗、 家庭办公、娱乐等功能,集结构、服务、系统、管理为一体的舒适、节能、安 全、便利、高效、娱乐、环保的居住环境。本文介绍的智能化家居控制系统可以使得人们通过手机在任何时候、任意 地点对家中的任意电器(例如:热水器、空调、电饭煲、灯光等)进行远程控 制。你可以在下班途中,预先将家中的空调打开、电饭煲煮好香喷喷的米饭、 让热水器提前烧好热水,而这一切的实现都仅仅是靠一条短信完成。本系统采用cortexA8作为主控器件,远程控制是基于GS嗣络短消息通信 方式,AT指

5、令作为系统控制命令,cortexA8通过对收到的信息进行解码来识别 控制信号,用户只需向TC35模块发送相应指令即可实现远程控制操作。温度传 感器完成现场信息的采集,cortexA8对数据进行及时的处理,实现实时测控; 短消息发送部分采用基于 GSM模块TC35和 IT公司的电平转换芯片MAX23等器 件构成的移动终端的硬件电路,完成短消息收发功能。(一)智能家居概述进入21世纪,科学技术与生产力加速了社会的发展创造能力,随之而来的 也是人类对于物质水平的大力需求,而居住的环境要求也成为了人们关注的领 域,所以“智能化”这一概念也促使科技工作者们将其引入智能家居民应用方 面的小区住宅以及小区建

6、筑技术之中。由于计算机控制系统发展迅速,以及电 子信息行业的发展成长快速,也大力促进了智能家居控制系统的产生。因为固 定电话和互联网技术基本上是传统智能家居控制系统的技术核心,所以安装固 定电话以及互联网成为了达到家庭用户传统智能家居控制系统的产生的根本硬 件技术、以及硬件要求。但是随着电子技术、智能通信技术以及网络技术发展 日新月异的今天,基于 GSM网络通讯体统的低成本无限制智能家居控制系统成 为广大居民以及中国居民享受新一代智能家居控制系统的变革捷径。智能家居系统成为一种新兴的综合技术学科。智能家居系统也可被定义为 一个控制过程,或者控制系统,利用现在被大多数科技人员已掌握的计算机技 术

7、、网络布线技术、网络通信系统将其糅合,使之成为融合在家居控制中的多 个子系统,并使其智能的结合在一起。目前相比较其他时分多址技术手段而言,更加完美、成熟、应用更广泛的一种普及率很高的系统是 GSM(Global System for Mobile communication)系统。 在我国,已建成的基本覆盖全国的 GSM数字蜂窝移动技术信息网,早已成为我 国公众移动生活密不可分的一种技术之一。在 GSM短信服务的基础上,智能家 居控制系统是在移动网络通讯技术的短信应用功能的技术运用。由于GSh网络通讯系统在全国范围实现了联网以及漫游能力,所以它的网 络功能很强大,用户无需另外搭建网络,因此,在

8、GSM网络覆盖率达到全国范围的情况下,为客户省下了昂贵的网络搭建费用以及维护网络费用。同时,它 对用户数量的限制也十分少,也为客户克服了一般智能家居控制系统中系统成 本高、维护艰难、并且网络覆盖范围小以及用户组数量少的缺点。相比传统网 络智能家居控制系统在网络通信覆盖率上具有较大的优势,加之GSM本身就具有数据的输送功能,这也促成了 GSM应用在广大生活中得到迅速普及。基于GSM 的无线通讯智能系统还具有双线传送数据的功能、性能稳定。为客户在远程操 控以及用户控制设备提供了强大技术平台。远程操控系统应用广泛,遍及中国经济生活发展的各大领域。而且目前人 们正在使用中的操控系统从成本、性能、稳定性

9、、便捷性以及维护的难易方面 基本都不能使人们最大程度的满意。 所以,GSh网络通信技术的提出大大的提升 了智能家居控制系统的完善程度。(二)智能家居网络构成1、家居网络控制平台智能家居主控制平台是智能家居控制系统的“心脏”部分,等效的可以说是智能家居的核心。对方可以通过手机短信的方式接受用户命令并实时操作,或 者对对用户手机发送控制电器运转情况,对家庭总线和各个网络子系统实施连 接,完成智能家居控制系统平台的链接构成。2、智能家居子系统智能家居系统的连接一般均为家电网络中的耗电类型的家电电器。例如冰 箱、空调、电磁炉、热水器、电饭煲、电灯等家用电器。这些消耗电类型的家 庭电器可以在现场立即布线

10、互联构成智能家居系统,与主控家居智能平台相连 接,再进行现场网络综合布线连接智能家居子系统,就可以由用户利用协议中 的操作指令短信操作家庭中电器设备了。3、智能家居网络的信号传输介质智能家居网络通讯形式多彩多样,可以采用不同的传输介质传输网络通讯 信号,大体上有电力线、电话线、双绞线、无线方式。(1) 电力线基于电力线为传输介质的通信网络可以说是最方便的,因为现在家庭基本 都已铺设供电源的电源线而且家中的电源线已经延伸到家庭生活的每个角落。 而且,现在大部分家用电器设备都离不开电源。所以利用家中的电力线完成智 能家居控制系统网络方案方便而且经济便宜。在国际上,首个实现家庭电器智 能化的方案便是

11、通过电力线作为信息传输载体的而达成的。电话线利用电话线作为网络信息传输载体起步虽然相较于电力线稍微晚一些,但 是因为它具有布局简单、使用方便、安全性能好和易于大规模推广等优点,而 且近期电话线的传输速率也完成了大幅度提升,所以它的应用和发展非常快, 在美国已有成熟的产品。其中包括:3C0M Advaneed Micro Devices、AT&TCompaq Hewlett . Packard、Intel、IBM 和 Luce nt Tech nologies 等发起成立 了“电话线家居网络协会”,至今己有 100多个成员。(3) 双绞线/同轴电缆目前最通用的传输介质是用双绞线/同轴电缆。 可是

12、在基于双绞线/同轴电 缆实际操作中最大的困难是需要另外铺设 2/4根专用的传输线。但是它拥有通 信可靠性和总线接口相对简单等优点, 其仍然可以受到广泛用户的大批量应用。(4) 无线方式无线方式通过射频载波或者红外线等形式传输用户信息,“蓝牙技术”是最近发展最火热的无线通信方式。音频和视频信号、计算机网络信号、控制信号 均可以利用蓝牙技术传输家庭用户信号。而且用无线方式传输信息时无需架设 任何线路且实现极其方便灵活,非常适合在家庭网络中应用。由于无线方式简单方便,易于架设,所以本论文便是使用的GSM无线技术平台操作的智能家居平台系统。4、远程控制技术概括本论文研究立于一个对于家居电器进行远程控制

13、,以便于实现家居智能化 的系统。远程控制指的是远端的家居控制者通过通信系统对现场的家居电器系 统进行控制,其目的在于解除地域和环境对控制的限制,实现高集中的远程控 制,最终实现生产资料和社会资源与通讯资源的优化配置。现代远程控制技术 是计算机技术、通信技术、网络技术的集合,也是信息技术和控制技术的结合。从用户角度来讲,需要的是一种方便、安全、可靠的一种传输方式。可以 利用公共数据网或者通过架设专线来实现有线传输,然而在大多数情况下,传 输距离、架线环境等条件限制了有线传输2。无线传输也有很多途径,如架设微 波线路、(超)短波电台等都是通过自建的无线发射接收系统。然而无线传输架 设成本高、频率资

14、源的限制、容易受到地形地貌的影响、系统的架设和维护工 作繁重,在业务量小、用户数量大、位置分散等应用场合中也受到很大限制。 目前,经过三代发展的移动通信,移动通信体制中的时分多址技术中最完善、 最成熟、应用最广的一种移动通信系统就是 GS系统2。在数据采集、远距离监 控、GP定位、缴费通知、无线报警等领域 GM都有着广泛的应用。在全国范围 内GS网络实现了联网和漫游,用户无需另外组网,GM具有很强的网络能力,网络覆盖范围广阔,用户不必再花费节昂贵的建网费用和维护费用2o比传统的 集群系统在无线网络覆盖上具有无法比拟的优势,加上GS的 SM本身具备的数据传送功能,都使得这些应用得到迅速的普及2

15、o GS短信息系统性能稳定还可 进行双向数据传输,为监控设备和远程数据传送通信提供了一个可靠、安全的 支持平台。短消息发送一般采用其专用控制信道(DCCH来发送,短信息的服务端可以 实时的了解到对方是否接收到短信息,一旦信息传送失败,短信中心实时得知 被叫用户没有回复信息,网络管理端则会继续发送消息,以保证被叫方能收到 短信息。所以,在GS网络的一些主要的电信业务当中,此类短消息业务的信息 传递是实时安全的2。每个短消息的信息量都是140个八位组(7比特编码,160 个字符)不会超过140个字节,绝对可以满足单方面监测用户指标的信息量。综 上所述,智能家居控制系统选用GS的短消息控制方式,来实

16、现智能家居设备的 远程控制是可行的。5、智能家居控制系统的国内外发展现状目前,我国每年竣工的建筑面积达到20亿平米,智能家居/建筑的产值至少 在1-2万亿元以上。智能家居的发展分为三个阶段:首先是家庭电子化(HomeElectronics )阶段,这个时期主要是面向单个的 电器,家庭电器之间并没有形成网络,亦没有大的联系。其次是住宅自动化(HomeAutomation )阶段,这个时期是面向功能的阶段, 一部分的家庭电器之间形成了简单的网络,主要是为了实现某个特定单一的功 能,例如单一的自动抄表功能。最后是家居智能化(欧洲称为 Smart Home美国称为 Wise House )阶段, 这个

17、时期是面向系统设计的阶段,系统通过家庭分布总线把住宅内各种与信息 相关的通信设备、家用电器、报警装置并到网络节点中进行集中的监控、管理, 保持家电与环境的协调,提供生活、工作、学习以及娱乐的各种优质服务,营 造一种温馨舒适的家庭氛围。智能家居控制系统提供高效、舒适的家居环境,确保住户的生命财产安全; 集中或远程监控家居环境的温度、湿度以及风速等,空气中成分也可检验,为 空气质量的提高提供依据;电视机、CD等娱乐设施也不再需要人们近距离调节; 周围环境以及太阳光的强弱变化都可以合理利用,使能耗降低,资源合理利用, 保护环境;提供现代化的通信、信息服务12。在智能家居系统研发中,美国和欧洲一些发达

18、国家一直处于领先地位。近 年来,一大批国外知名企业先后挤身于智能家居的研发中尤其以美国微软公司 及摩托罗拉公司等为首12。摩托罗拉公司开发的“居所之门” 、IBM公司开发的 “家庭主任”、微软公司开发的“梦幻之家”等均已日趋成熟12。在亚洲,日本 韩国新等一些经济发达国家的主要企业也进军智能化家居系统的开发,对家居 市场更是跃跃欲试。经过哥本哈根会议,我国更加明确了节能减排,绿色建筑的目标,这就使 住宅智能化凸显出了其合理规划,最大限度的节约能源的优势。如果我国大力 推广绿色建筑,仅在铺设智能化系统上所需的新设备的生产上就有2000亿到3000亿人民币的新市场。而中国“智能家居网络”必在“智能

19、化住宅”的框架 下形成一个新型IT产业,而这一切必将对未来几十年我国房地产的健康有效发展起着深远的影响。由于智能家居系统还缺乏统一明确的国际标准,许多公司开发出的产品都 是基于自己组的网络和信息交换协议, 很多产品是针对特定的组网环境开发的, 部分核心技术没有对外公布,技术复杂,直接导致了使用范围的局限性。再者, 缺乏对应的第三方产品,各个接入设备之间不能兼容、互操作性差、不利于产 品的扩充,因而进一步局限了产品的发展。再加上,有的系统成本过高,严重 影响了产品的普及。因此设计一个符合国家国情和规范的集远程控制和本地控 制为一体的智能家居控制系统是非常具有现实意义的,且势在必行。作为智能家居的

20、核心系统的智能家居的控制系统,它的设计功能的完善必 将推动住宅智能化的发展。而系统功能的集成化、用户使用的傻瓜化以及市场 的平民化将是智能家居控制器的发展趋势,系统也将逐步迈向绿色化。最终, 我想全人类的梦想是智能家居控制系统将囊括所有的家事杂物,让我们真正的 享受舒适温馨的家庭生活。二、系统需求分析及方案物联网智能家居要将各成体系、互不相连的子系统协调起来,就必须有一 个兼容性强的中央家居处理平台,接受并处理控制设施发出的信息,然后传送 信号给你希望控制的家电或者其他家居子系统。(一) 应用程序功能需求分析本设计采用模块化设计,整个系统由通信模块、视频采集模块、传感器模 块、Led模块组成。

21、cortexA8通过对传感器模块传送来的信息进行判断,如果 信息异常,则利用蜂鸣器以及 LED实现报警,并通过GSM模块向用户发送报警 信息。同时用户也可以根据需要,发送短信给GSM莫块来控制相应的家电。实现对现场图像实时监控及工作位置实时控制。(二) 开发环境需求分析1、硬件环境(1) 硬件配置原则具有可靠性,可用性和安全性,在满足软件需求的条件下,具有完善的技 术支持,能够满足个人学习和设计需要。(2) 运行本软件所需的硬件资源CPU:800M及以上;内存容量: 内存达128M以上。本系统采用cortexA8为中央处理平台。2、软件环境(1)系统软件配置规则能够在指定的运行环境下,满足该软

22、件的可靠性、安全性和可用性的要求。(2)系统软件的配置方案配置有持续工作能力、高稳定性、高度可集成的开放式标准的操作系统,如 Windows NT、Windows2000、UNIX, Linux 等。熟悉 C+高级程序设计语 言。本系统米用Linux为操作系统。三、硬件模块及其驱动设计实现(一)主控模块本系统采用cortexA8为控制核心,cortexA8不断监测有没有异常信息,当发现异常信息时,则进入相应中断,利用cortexA8通过UART串 口向GSM莫块发送一系列AT指令并启动GSM模块发送报警短信给用户。再根据用户发送回 来的指令打开相应的继电器来控制家用电器,完成现场控制和监测任务

23、。(二)通信模块1、TC35模块简介TC35是西门子公司推出的一种完整的无线 GSM模块,主要由GSMS带处理 器、GSM寸频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口、SIM卡支 架七部分组成。它可以快速、安全可靠地实现系统方案中的数据传输、短消息 服务(Short Message Service )。模块的工作电压为 3.34.8V。该模块有 AT 指令集接口,支持文本和 PDU模式的短消息第三组的二类传真等。此外, TC35 还拥有多方通话、电话簿功能、漫游检测等功能。TC35具有TALK IDLE、省电模式三种常用工作模式。通过它的40管脚的ZIF连接器实现指令、数据、语

24、音 信号、控制信号的双向传输以及电源连接。TC35的核心是基带处理器,主要处理GSM端内的语音、数据信号,蜂窝射频设备中所有的模拟和数字功能它也 拥有。可支持EFR FR和语音编码而不需要额外硬件电路。2、TC35模块与cortexA8连接方式TC35模块主要通过串口与 cortexA8进行连接,从而cortexA8实现对TC35 模块的控制。考虑到系统设计接口的简单性并且与 cortexA8的UARTS行连接, 所以只采用TC35的串口提供了的两线(TXD RXD控制线连接。系统采用软件对TC35莫块通信模块进行控制非常灵活,过多硬件信号的检测也很好地避免了。 对于TC35的其它管脚在不使用

25、的时候,如果该管脚为输出时,一般将该管脚悬 空;如果该管脚为输入管脚,则需要将该管脚通过10Q的电阻上拉。另外需要将IGT管脚上拉因为IGT管脚是控制TC35模块工作的管脚。并且cortexA8与 该管脚进行连接,因此我们可以利用 cortexA8来控制TC35模块的工作模式。 由于TC35模块功能健全,TC35模块的电源管脚是并连在一起的,因此这里不需 要做任何的射频处理和信号处理。此外,IGT管脚是TC35模快的启动脚,与 cortexA8的ALE管脚相连接。系统加电后为使TC35i进入工作状态,必须在ALE 管脚加一个大于100ms的低脉冲,电平下降持续时间不可超过1ms以下为TC35

26、模块的接口设计。3、传感器模块linu x2.6内核的设备驱动模型中关心总线、设备和驱动这三个实体,总线将 设备和驱动绑定。SOC系统中集成的独立的外设控制器、挂接在soc内存空间的 外设不依附于PCI、USB I2C、SPI等。基于这个背景linux发明了一种虚拟的 总线,称为platform 总线,相应的设备platform_device, 而驱动称为 platform_driver 。(1) ledLED图3.1 led 电路采用platform 框架 自动获取设备号,生成设备节点led驱动:struct file_operations fops = .ow ner = THIS_MOD

27、ULE,.read = led_read,.ioctl= led_ioctl,.release = led_release,.ope n= led_ope n,.write = led_write,;static int led_probe(struct platform_device *devices)struct resource *r;in t ret;dev_t dev = MKDEV(led_major, led_mi nor);if(led_major)ret = register_chrdev_regio n(dev, count, devn ame);elseret = all

28、oc_chrdev_regi on(&dev, led_m inor, count, devn ame);led_major = MAJOR(dev);if(ret)return ret;cdev_i nit(&cdev, & fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_un reg_chrdev;atomic_set(&num, 0);myclass = class_create(THIS_MODULE, devn ame);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclas

29、s, NULL, dev, NULL, %s%d,dev name,led_mi nor);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_de

30、stroy(myclass, dev);class_destroy(myclass);out_cdevdel:cdev_del(&cdev);out_un reg_chrdev:un register_chrdev_regio n(dev, coun t);return -EINVAL;int led_ioctl(struct inode *inode, struct file *filp,unsigned int cmd,un sig ned long arg)un sig ned int m=OxO;int tmp;if(cmd=CMDINIT)if(atomic_s ub_an d_te

31、st(1,&nu m)gpg3con = ioremap(GPG3_CON, 4);if(NULL = gpg3c on)return -ENOMEM;gpg3dat = iorem ap(GPG3_DAT, 4); if(NULL = gpg3dat) return -ENOMEM;tmp=ioread32(gpg3c on);tmp=tmp&(Oxffff);iowrite32(0x1111|tmp, gpg3co n);tmp=ioread32(gpg3dat);tmp=tmp&( 0xf); iowrite32(0x0|tmp, gpg3dat);atomic_i nc(&nu m);

32、return 0;elsem=cmd & 0xf;tmp=ioread32(gpg3dat);tmp=tmp&(0xf); iowrite32(m, gpg3dat);return 0;led应用程序设计 void led_in it(void);函数功能:打开led设备并file *filp,unsigned int led_ioctl(struct inode *inode, struct un sig ned long arg)函数功能:LED报警输入参数:cmd参数表示那个灯亮void led_exit(void);函数功能:关闭led设备(2) 蜂鸣器PWM BEEP

33、2TJ* C1121-TO.IuFI C06032VDD 5V1JP1JP2.0mm-2BZ1 BUZZERPWMT0UT11Q9S9013SMDR1684.7KR0603图3.2 pwm电路图采用platform框架 自动获取设备号,生成设备节点。由于这个蜂鸣器是无 源的,所以要想使其产生声音必须给他提供一个有一定频率的高低电平。所以 这里我们采用S5PC100的PWM定时器来使蜂鸣器发出声音。static int pwm_probe(struct platform_device *devices)struct resource *r;int ret;dev_t dev = MKDEV(pw

34、m_major, pwm_mi nor);if(pwm_major)ret = register_chrdev_regio n(dev, count, devn ame);elseret = alloc_chrdev_regio n(&dev, pwm_mi nor, count, devn ame); pwm_major = MAJOR(dev);if(ret)return ret;cdev_i nit(&cdev, & fops);ret=cdev_add(&cdev, dev, 1);if(ret)goto out_un reg_chrdev;atomic_set(&num, 0);my

35、class = class_create(THIS_MODULE, devn ame);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev, NULL, %s%d, dev name, pwm_mi nor);r = platform_get_resource(devices, IORESOURCE_MEM, 0);if (r = NULL) goto out_class_destroy;GPD_CON1=r-start;r = platform_get_resource(devices, IORESOURC

36、E_MEM, 1); if (r = NULL) goto out_class_destroy;TCFGO=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 2); if (r = NULL) goto out_class_destroy;TCFG 仁r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 3); if (r = NULL) goto out_class_destroy;TCNTB1=r-start;r = platform_get_resource

37、(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_un

38、 reg_chrdev:un register_chrdev_regio n(dev, count); return -EINVAL;int pwmo ctl(struct inode *ino de, struct file *filp, un sig ned int cmd, un sig ned long arg)int tmp;if(cmd=CMDINIT)if(atomic_s ub_an d_test(1,&nu m)gpdco n1 = iorem ap(GPD_CON1,4);if(NULL = gpdco n1)return -ENOMEM;tcfg0 = iorem ap(

39、TCFG0, 4);if(NULL = tcfg0)return -ENOMEM;tcfg1 = iorem ap(TCFG1,4);if(NULL = tcfg1)return -ENOMEM;ten tb1 = ioremap(TCNTB1,4);if(NULL = tcntbl)return -ENOMEM;tcmpbl = iorem ap(TCMPB1,4);if(NULL = tcmpbl)return -ENOMEM; gtc on = iorem ap(TCON, 4); if(NULL = gtco n)return -ENOMEM; tmp=ioread32(gpdc on

40、 1); tmp=tmp&(0xf4); tmp=tmp|(0x24); iowrite32(tmp, gpdc on 1); 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, ten tb1); iowrite32(150, tcmpbl); tmp=ioread32(gtc on); tmp=tmp|0x0e8; t

41、mp=tmp&(0x018); iowrite32(tmp, gtco n);atomicnc(&nu m);return 0;else if(cmd=CMDGO)tmp=ioread32(gtc on); tmp=tmp|(0x0d8);tmp=tmp&(0x028);iowrite32(tmp, gtc on);else if(cmd=CMDSTOP)tmp=ioread32(gtc on);tmp=tmp&(0x0fadapter,I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA) return -EIO;data = kzalloc

42、(sizeof(struct lm75_data), GFP_KERNEL); if (!data)return -ENOMEM;i2c_set_clie ntdata(clie nt, data);mutexnit(&data-update_lock);set_mask = 0;clr_mask = (1 0)| (1 6) | (1 5);status = Im75_read_value(clie nt, LM75_REG_CONF);if (status dev, Ca nt read con fig? %dn, status);goto exit_free;data-orig_c on

43、f = status;new = status & clr_mask;new |= set_mask;if (status != n ew)lm75_write_value(clie nt, LM75_REG_CONF, new);dev_dbg(&clie nt-dev, Co nfig %02xn, n ew);devn = MKDEV(lm75_major, Im75_mi nor);if(lm75_major)status = register_chrdev_regio n(de vn, count, devn ame);elsestatus = alloc_chrdev_region

44、(&devn,lm75_minor, count, devname);lm75_major = MAJOR(dev n);if(status)return status;cdev_i nit(&cdev, & m75_fops);status=cdev_add(&cdev, devn, 1);if(status)goto out_un reg_chrdev;myclass = class_create(THIS_MODULE, devn ame);if (IS_ERR(myclass)goto out_cdevdel;device_create(myclass, NULL, dev n,NUL

45、L, %s%d, dev name,Im75_mi nor);goto out;out_cdevdel:cdev_del(&cdev);out_un reg_chrdev:un register_chrdev_regi on(devn, coun t);exit_free:kfree(data);out:return status;static int lm75_read_value(struct i2c_clie nt *clie nt, u8 reg)int value;if (reg = LM75_REG_CONF)return i2c_smbus_read_byte_data(clie

46、 nt, reg);value = i2c_smbus_read_word_data(clie nt, reg);return (value 7; n=n-1; n=n; n=n&Oxfe; n=-n;elsen=n 7;tmp=n *0.5;(4)视屏模块图3.4 V4L2流程V4L2采用流水线的方式,操作更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现。打开视频设备在Linux中,设备被看做一个文件。使用 open函数打开视频设备。打开设备有两种方式:1、用非阻塞模式打开int Fd;Fd = ope n( /dev/video2, O

47、_RDWR | O_NONBLOCK, 0);2用阻塞模式打开:Fd = ope n( /dev/video2, O_RDWR, 0);应用程序能够使用阻塞模式或非阻塞模式打开视频设备, 如果使用非阻塞模 式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存( DQBUF)里的东 西返回给应用程序。设定属性及采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一 步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行 管理:int ioctl (int _fd, un sig ned long int _request, ./*args*/);在进行V

48、4L2开发中,常用的命令标志符如下(some are optional): VIDIOC_REQBUFS 分配内存VIDIOC_QUERYB:把VIDIOC_REQBUF中分配的数据缓存转换成物理地址 VIDIOC_QUERYCA查询驱动功能VIDIOC_ENUM_FM得到视频设备支持的视频格式VIDIOC_S_FM:T 设置视频设备的频捕获格式 VIDIOC_G_FMT 得到视频设备的频捕获格式 VIDIOC_TRY_FMT视频设备支持的显示格式VIDIOC_QBUF从缓存中读取数据VIDIOC_DQBUF数据重新进入缓存队列VIDIOC_STREAMO开始视频获取VIDIOC_STREAM

49、QF结束视频获取VIDIOC_QUERYST检查当前视频设备支持的标准,例如PAL或NTSCNTSC在亚洲,一般使用 PAL( 720X576制式的摄像头,而欧洲一般使用(720X480,使用 VIDIOC_QUERYS来检测:v4l2_stdd std;do ret = ioctl(fd, VIDIOC_QUERYSTD, & std); while (ret = -1 & errno = EAGAIN);switch (std) case V4L2_STD_NTSC:/case V4L2_STD_PAL:/设置视频捕获格式当检测完视频设备支持的标准后,还需要设定视频捕获格式,结构如下:st

50、ruct v4l2_format fmmt;memset ( & fmmt, 0, sizeof(fmmt);fmmt.type= V4L2_BUF_TYPE_VIDEO_CAPTURE;if (ioctl(Fd, VIDIOC_S_FMT, & fmmt) = -1) return -1; v4l2_format结构定义:struct v4l2_formatenum v4l2_buf_type type;unionstruct v4l2_pix_format pix;struct v4l2_wi ndow win;struct v4l2_vbi_format vbi;_u8 raw_data200; fmt;struct v4l2_pix_format_u32width;_u32height;_u32pixelformat;enum v4l2_field field;_u32bytesperl ine;_u32sizeimage;enum v4l2_colorspace colorspace;_u32priv;分配内存然后为从摄像头捕获的图像分配内存:struct v4l2_requestbuffers req;if (ioctl(Fd, VIDIOC_REQBUFS, & req) = -1) return -1;v4l2_requestbuffers结定义

温馨提示

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

评论

0/150

提交评论