物联网智能家居系统_第1页
物联网智能家居系统_第2页
物联网智能家居系统_第3页
物联网智能家居系统_第4页
物联网智能家居系统_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

1、物联网智能家居系统 毕业论文物联网智能家居系统毕业论文摘 要:随着经济的高速增长。建立一个低成本、高效率的智能家居系统已成为当今世界的一个热点话题。目前越来越多的智能家居产品出现在市场上,其中以基于电话网的智能安防系统居多。目前在我国,使用家庭电话的用户越来越少,而且电话线路受地域的影响严重容易损坏,所以这类产品局限性很大。随着电信 GSM 网络覆盖范围的无缝化、广阔化以及手机的日益普及为基于 GSM 网络的智能家居系统提供了巨大的应用空间。本文设计了一种基于GSM 网络的智能家居系统。本系统采用cortexA8 为系统控制核心, 对家庭中出现的意外情况使用各种传感器进行采集,然后通过 GSM

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

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

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

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

6、使科技工作者们将其引入智能家居民应用方面的小区住宅以及小区建筑技术之中。由于计算机控制系统发展迅速,以及电子信息行业的发展成长快速,也大力促进了智能家居控制系统的产生。因为固定电话和互联网技术基本上是传统智能家居控制系统的技术核心,所以安装固定电话以及互联网成为了达到家庭用户传统智能家居控制系统的产生的根本硬件技术、以及硬件要求。但是随着电子技术、智能通信技术以及网络技术发展日新月异的今天,基于 GSM 网络通讯体统的低成本无限制智能家居控制系统成为广大居民以及中国居民享受新一代智能家居控制系统的变革捷径。智能家居系统成为一种新兴的综合技术学科。智能家居系统也可被定义为物联网智能家居系统 毕业

7、论文 PAGE 4一个控制过程,或者控制系统,利用现在被大多数科技人员已掌握的计算机技术、网络布线技术、网络通信系统将其糅合,使之成为融合在家居控制中的多个子系统,并使其智能的结合在一起。目前相比较其他时分多址技术手段而言,更加完美、成熟、应用更广泛的一种普及率很高的系统是 GSM(Global System for Mobile communication)系统。在我国,已建成的基本覆盖全国的 GSM 数字蜂窝移动技术信息网,早已成为我国公众移动生活密不可分的一种技术之一。在 GSM 短信服务的基础上,智能家居控制系统是在移动网络通讯技术的短信应用功能的技术运用。由于 GSM 网络通讯系统在

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

9、泛,遍及中国经济生活发展的各大领域。而且目前人们正在使用中的操控系统从成本、性能、稳定性、便捷性以及维护的难易方面基本都不能使人们最大程度的满意。所以,GSM 网络通信技术的提出大大的提升了智能家居控制系统的完善程度。(二) 智能家居网络构成1、家居网络控制平台智能家居主控制平台是智能家居控制系统的“心脏”部分,等效的可以说是智能家居的核心。对方可以通过手机短信的方式接受用户命令并实时操作,或者对对用户手机发送控制电器运转情况,对家庭总线和各个网络子系统实施连接,完成智能家居控制系统平台的链接构成。2、智能家居子系统智能家居系统的连接一般均为家电网络中的耗电类型的家电电器。例如冰箱、空调、电磁

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

11、方案方便而且经济便宜。在国际上,首个实现家庭电器智能化的方案便是通过电力线作为信息传输载体的而达成的。电话线利用电话线作为网络信息传输载体起步虽然相较于电力线稍微晚一些,但是因为它具有布局简单、使用方便、安全性能好和易于大规模推广等优点,而且近期电话线的传输速率也完成了大幅度提升,所以它的应用和发展非常快, 在美国已有成熟的产品。其中包括:3COM、Advanced MicroDevices、AT&T、Compaq、HewlettPackard、Intel、IBM 和 Lucent Technologies 等发起成立了“电话线家居网络协会”,至今己有 100 多个成员。双绞线同轴电缆目前最通

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

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

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

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

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

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

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

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

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

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

22、 为中央处理平台。2、 软件环境系统软件配置规则能够在指定的运行环境下,满足该软件的可靠性、安全性和可用性的要求。系统软件的配置方案配置有持续工作能力、高稳定性、高度可集成的开放式标准的操作系统, 如 Windows NT 、Windows2000、UNIX,Linux 等。熟悉 C+高级程序设计语言。本系统采用 Linux 为操作系统。三、硬件模块及其驱动设计实现(一) 主控模块本系统采用 cortexA8 为控制核心,cortexA8 不断监测有没有异常信息, 当发现异常信息时,则进入相应中断,利用 cortexA8 通过 UART 串口向 GSM 模块发送一系列AT 指令并启动GSM 模

23、块发送报警短信给用户。再根据用户发送回来的指令打开相应的继电器来控制家用电器,完成现场控制和监测任务。(二) 通信模块1、TC35 模块简介TC35 是西门子公司推出的一种完整的无线 GSM 模块,主要由 GSM 基带处理器、GSM 射频模块、供电模块(ASIC)、闪存、ZIF 连接器、天线接口、SIM 卡支架七部分组成。它可以快速、安全可靠地实现系统方案中的数据传输、短消息服务(Short Message Service)。模块的工作电压为 3.34.8V。该模块有 AT指令集接口,支持文本和 PDU 模式的短消息第三组的二类传真等。此外,TC35 还拥有多方通话、电话簿功能、漫游检测等功能

24、。TC35 具有 TALK、IDLE、省电模式三种常用工作模式。通过它的 40 管脚的 ZIF 连接器实现指令、数据、语音信号、控制信号的双向传输以及电源连接。TC35 的核心是基带处理器,主要处理 GSM 终端内的语音、数据信号,蜂窝射频设备中所有的模拟和数字功能它也拥有。可支持 EFR、FR 和语音编码而不需要额外硬件电路。2、TC35 模块与 cortexA8 连接方式TC35 模块主要通过串口与 cortexA8 进行连接,从而 cortexA8 实现对 TC35 模块的控制。考虑到系统设计接口的简单性并且与 cortexA8 的 UART 进行连接, 所以只采用 TC35 的串口提供

25、了的两线(TXD、RXD)控制线连接。系统采用软件 PAGE 12led守 3一 ” 4 屯 2 夕 L 如 一,“.心 o i B 吟 ,3_ “ 工 :-OO 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

26、(&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)物联网智能家居系统 毕业论文1unsigned int m=0 x0; int tmp; if(cmd=CMDINIT)if(atomic_sub_and_test(1,&num)gpg3con = ioremap(GPG3_CON, 4); if(NULL =

27、 gpg3con)return -ENOMEM;gpg3dat = ioremap(GPG3_DAT, 4); if(NULL = gpg3dat)return -ENOMEM; tmp=ioread32(gpg3con); tmp=tmp&(0 xffff); iowrite32(0 x1111|tmp, gpg3con); tmp=ioread32(gpg3dat); tmp=tmp&(0 xf); iowrite32(0 x0|tmp, gpg3dat);atomic_inc(&num);return 0;elsem=cmd & 0 xf; tmp=ioread32(gpg3dat);

28、tmp=tmp&(0 xf); 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 设备蜂鸣器图 3.2 pwm 电路图采用 platform 框架 自动获取设备号,生成设

29、备节点。由于这个蜂鸣器是无源的,所以要想使其产生声音必须给他提供一个有一定频率的高低电平。所以这里我们采用 S5PC100 的 PWM 定时器来使蜂鸣器发出声音。static int pwm_probe(struct platform_device *devices)12物联网智能家居系统 毕业论文 PAGE 21struct resource *r; int ret;dev_t dev = MKDEV(pwm_major, pwm_minor); if(pwm_major)ret = register_chrdev_region(dev, count, devname);elseret =

30、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(mycla

31、ss,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, IORESOUR

32、CE_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;TCNTB1=r-start;r = platform_get_resource(devices, IORESOURCE_MEM, 4); if (r = NULL) goto out_class_destroy;TCMPB1=r-start;r = platform_get_resour

33、ce(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, st

34、ruct 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;tcntb1 = iore

35、map(TCNTB1, 4); if(NULL = tcntb1)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&(0 xf4); tmp=tmp|(0 x24); iowrite32(tmp, gpdcon1); tmp=ioread32(tcfg0); tmp=tmp&0 xff; tmp=tmp|0 xfe; i

36、owrite32(tmp, tcfg0); tmp=ioread32(tcfg1); tmp=tmp&(0 xf4); tmp=tmp|(0 x14); iowrite32(tmp, tcfg1); iowrite32(300, tcntb1); iowrite32(150, tcmpb1); tmp=ioread32(gtcon); tmp=tmp|0 x0e8; tmp=tmp&(0 x018); iowrite32(tmp, gtcon);atomic_inc(&num); return 0;else if(cmd=CMDGO)tmp=ioread32(gtcon); tmp=tmp|(

37、0 x0d8); tmp=tmp&(0 x028);iowrite32(tmp, gtcon);else if(cmd=CMDSTOP)tmp=ioread32(gtcon); tmp=tmp&(0 x0fadapter,I2C_FUNC _SMBUSBYTEDATA II 2CFUNCSMBUSWORDDATA ) )return - E IO ;data = kzalloc (sizeof (struct lm75_da t a ) , GFP_KERNE L) ; if(!data)81return -ENOMEM;物联网智能家居系统 毕业论文 PAGE 24i2c_set_client

38、data(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_wri

39、te_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 statu

40、s;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:unre

41、gister_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;2打开视频设名 启 动视 频 采 焦面视频

42、设名的韵力从视 频娱 冲院 出 队列宗取一个有衵频数括的视频缓冲区设翌视疾采案格式谅取视频 据并保存成图片文件望霜嬴憤韵翌辱图 3.4 V4L2 流程V4L2 采用流水线的方式,操作更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过 ioctl 函数来实现。物联网智能家居系统 毕业论文23打开视频设备在 Linux 中,设备被看做一个文件。使用 open 函数打开视频设备。打开设备有两种方式:1、用非阻塞模式打开int Fd;Fd = open(/dev/video2, O_RDWR | O_NONBLOCK, 0); 2 用阻塞模式打开:Fd = open(/

43、dev/video2, O_RDWR, 0);应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF)里的东西返回给应用程序。设定属性及采集方式打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在 Linux 编程中,一般使用 ioctl 函数来对设备的 I/O 通道进行管理:int ioctl (int fd, unsigned long int request, ./*args*/) ; 在进行 V4L2 开发中,常用的命令标志符如下(some are optional): VIDIOC

44、_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

45、:检查当前视频设备支持的标准,例如 PAL 或 NTSC。物联网智能家居系统 毕业论文 PAGE 40在亚洲,一般使用 PAL(720X576)制式的摄像头,而欧洲一般使用 NTSC(720X480),使用 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:/设置视频捕获格式当检测完视频设备支持的标准后,还需要设定视频

46、捕获格式,结构如下: 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_form

47、at 结构定义: struct v4l2_formatenum v4l2_buf_type type;unionstruct v4l2_pix_format pix; struct v4l2_window win; struct v4l2_vbi_format vbi; u8 raw_data200; fmt;struct v4l2_pix_format u32width; u32height; u32pixelformat;enum v4l2_fieldfield; u32bytesperline; u32sizeimage;enum v4l2_colorspacecolorspace; u

48、32priv;分配内存然后为从摄像头捕获的图像分配内存: struct v4l2_requestbuffersreq;if (ioctl(Fd, VIDIOC_REQBUFS, &req) = -1) return -1;v4l2_requestbuffers 结定义: struct v4l2_requestbuffers u32count;enum v4l2_buf_typetype; enum v4l2_memorymemory; u32reserved2;得到视频缓存的内存空间使用 VIDIOC_REQBUFS 命令, 来得到 count 个缓存, 然后通过使用VIDIOC_QUERYB

49、UF 命令来得到分配的缓存的地址,再用 mmap 函数把地址映射为应用程序中的绝对地址,最后把得到的缓存放入缓存队列以便循环利用。typedef struct VideoBuffer void *start; size_t length; VideoBuffer;VideoBuffer*buffers = calloc( req.count, sizeof(*buffers) ); struct v4l2_bufferbuf;for (numBufs = 0; numBufs 255)r0=255;if(r0255)g0=255;if(g0255)b0=255;if(b0255)r1=255;

50、if(r1255)g1=255;if(g1255)b1=255;if(b13)2)3)3)2)3)0);rgb = (rgb1dest;dest-buffer = (JOCTET *) (*cinfo-mem-alloc_small)(j_common_ptr) cinfo,JPOOL_IMAGE, OUTPUT_BUF_SIZE * sizeof(JOCTET);*(dest-written) = 0;dest-pub.next_output_byte = dest-buffer; dest-pub.free_in_buffer = OUTPUT_BUF_SIZE;METHODDEF(boo

51、lean) empty_output_buffer(j_compress_ptr cinfo) mjpg_dest_ptr dest = (mjpg_dest_ptr) cinfo-dest;memcpy(dest-outbuffer_cursor, dest-buffer, OUTPUT_BUF_SIZE); dest-outbuffer_cursor += OUTPUT_BUF_SIZE;*(dest-written) += OUTPUT_BUF_SIZE;dest-pub.next_output_byte = dest-buffer; dest-pub.free_in_buffer =

52、OUTPUT_BUF_SIZE; return TRUE;METHODDEF(void) term_destination(j_compress_ptr cinfo) mjpg_dest_ptr dest = (mjpg_dest_ptr) cinfo-dest;size_t datacount = OUTPUT_BUF_SIZE - dest-pub.free_in_buffer;memcpy(dest-outbuffer_cursor, dest-buffer, datacount); dest-outbuffer_cursor += datacount;*(dest-written) +

53、= datacount;void dest_buffer(j_compress_ptr cinfo, unsigned char *buffer, int size,int *written) mjpg_dest_ptr dest;if (cinfo-dest = NULL) cinfo-dest =(structjpeg_destination_mgr*)(*cinfo-mem-alloc_small)(j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(mjpg_destination_mgr);dest = (mjpg_dest_ptr) cinfo

54、-dest;dest-pub.init_destination = init_destination;dest-pub.empty_output_buffer = empty_output_buffer; dest-pub.term_destination = term_destination;dest-outbuffer = buffer;dest-outbuffer_size = size;dest-outbuffer_cursor = buffer; dest-written = written;摄像头采集的 YUYV 格式转换为 JPEG 格式:buf 为设备获取的原始数据首地址, b

55、uffer 为压缩后的数据首地址。size 为像素值。quality 为压缩质量。int compress_yuyv_to_jpeg(unsigned char *buf, unsigned char *buffer, int size,int quality) struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPROW row_pointer1;unsigned char *line_buffer, *yuyv; int z;static int written;line_buffer = calloc(WI

56、DTH * 3, 1);yuyv = buf; /将 YUYV 格式的图片数据赋给 YUYV 指针printf(compress start.n);cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); dest_buffer(&cinfo, buffer, size, &written); cinfo.image_width = WIDTH; cinfo.image_height = HEIGHT; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB;

57、jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE); jpeg_start_compress(&cinfo, TRUE);z = 0;while (cinfo.next_scanline HEIGHT) int x;unsigned char *ptr = line_buffer;物联网智能家居系统 毕业论文3for (x = 0; x WIDTH; x+) int r, g, b;int y, u, v;if (!z)y = yuyv0 8; elsey = yuyv2 8;g = (y - (88 * u)

58、- (183 * v) 8; b = (y + (454 * u) 8;*(ptr+) = (r 255) ? 255 : (r 255) ? 255 : (g 255) ? 255 : (b 打开设备函数;static FB *get_fb_msg(FB *fb);得到屏幕信息; static FB *fb_mmap(FB *fb);将设备映射到用户空间;static FB *clean_screen(FB *fb,POINT *start,POINT *end,unshort color);清除 start 到 end 之间的块儿装屏幕为 color 颜色;static int show_

59、word(FB *fb,const unchar *word,POINT *point,unshort color);在给定的点 location 显示 color 颜色的字符;static int drow_horizontal_line(FB *fb,POINT *start,POINT *end,unshort color);在给定的 start 到 end 之间画一条横线static int drow_vertical_line(FB *fb,POINT *start,POINT *end,unshort color);在给定的 start 到 end 之间画一条竖线static un

60、char *find_word(const char *str);在 09(包含小数点)之间找字库中对应的数组static FB *fb_munmap(FB *fb)解除映射封装给应用层的函数FB *screen_init(FB *fb):将打开设备到映射以及显示固定文字以及屏幕划线分割这些准备工作做好;int show_picture(FB *fb,int wide,int hight,const unchar*Image): 将确定宽高的图片显示在分割的视频显示区域;int show_temperature(FB *fb,const char *temperature,unshort co

温馨提示

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

评论

0/150

提交评论