您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页Android智能家居之照明灯控制设计

Android智能家居之照明灯控制设计

来源:意榕旅游网


本科学生毕业论文(设计)

题目(中 文): (英 文): 姓 名 学 号 院 (系) 专业、年级 指导教师

Android智能家居之照明灯控制设计 Android Smart Home of Lights Show

电子工程系 电子信息工程 级

湖南科技学院本科毕业论文(设计)诚信声明

本人郑重声明:所呈交的本科毕业论文(设计),是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。

本科毕业论文(设计)作者签名: 年 月 日

II / 55

毕业论文(设计)任务书

课题名称: Android智能家居之照明灯控制设计 学生姓名: 系 别: 专 业: 指导教师:

电子工程系 电子信息工程

湖南科技学院本科毕业论文(设计)任务书

1、主题词、关键词: FS_S5PC100 Cortex-A8 Android系统 智能终端 智能家居 2、毕业论文(设计)内容要求: 1)Android开发环境介绍 2)u-boot、内核、文件系统编译 3)Android智能终端LED灯具体设计流程 A / 55

3、文献查阅指引: [l] 侯俊.吴成东.基于zigbee的智能家居安全控制系统研究[J].机电工程学报,2009,26(1):69-70. [2] 彭建盛.基于symbian平台智能家居控制系统的设计与实现[J].天津师范大学学报,2011,31(2):56-58 [3] 满莎,杨恢先.基于ARM9的嵌入式无线智能网关家居设计[J].计算机应用,2010,30(9):2541-2544. [4] 李兰英,杨晨.基于S3C44BOX的智能家居终端控制系统的设计与实现[J].哈尔滨理工大学学报, 2007,12(3),85-86 [5] 莫满春.射频路由算法的研究与智能家居无线控制系统 的设计与实现[D],广州:中山大学,2008 [6] 臧大进,刘曾良.基于物联网的智能家居设计与实现[J].2010,31(11):38-39 [7] Yu M C,Shin D,Shin D K,et al.Fundamentals and design of smart home middleware[C]//CSO 2009:International Joint Conference on Computational Sciences sad Optimization.Washington.DC:IEEE.2009:647-650. [8] Bluetooth SIG.Specification of the Bluetooth System,Volume .Core.Version 1.1[2005-07-15]. [9] Yeo L K, Weon C J.Remote--controlled Home Automation System Via Bluetooth Home Network[C]//Proc of SICE 2003 Annum Conference.Tokyo:Soc of Instrum and Control Eng 2008;2824-2829 [10] 陈桥云,贾金玲.基于智能手机与PC机的智能家居系统设计[J].电子设计工程,2009.17(9):25-27 [1l] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010. [12] 殷华英,杨红梅.使用Java编写基于C/S模式的阿络通信程序[J] .计算机信息与技术2006(6):23-24 4、毕业论文(设计)进度安排: 2012.11月-2012.12月 根据任务书查阅资料,写好开题报告。 2013.01月-2013.03月 在对资料充分研究的基础上,确定方案,进行硬件研究和编写程序。 2013.03月-2013.4月 对系统进行整合调试,完成毕业论文的撰写。 2013.05月 完成论文修改并定稿,准备答辩。 教研室意见: 负责人签名:

注:本任务书一式三份,由指导教师填写,经教研室审批后一份下达给学生,一份交指导教师,一份留系里存档。

B / 55

湖南科技学院本科毕业论文(设计)开题报告书 论文(设计)题目 作 者 姓 名 指导教师姓名、职称 Android智能家居之照明灯控制设计 周峰 所属系、专业、年级 电子工程系 电子信息工程专业 2009年级 廖朝阳 预计字数 10000 开题日期 2012.12.24 选题的根据:1)说明本选题的理论、实际意义 2)综述国内外有关本选题的研究动态和自己的见解 一、课题的研究背景及意义 Android系统是目前市场流行的三大系统之一,它是Google公司在2005年推出的一款针对手持设备的主要是针对手机,现已推广到了平板电脑上面。市面上与之抗衡的手机系统有塞班、IOS、RIM等但均无超越之势。 Android是一个开源的操作系统并且由Google直接维护,这一点要远比MTK好得多,世界上很多人为其提交补丁。Android另一个优势是使用Linux内核。Linux内核是一个开源的操作系统核心组件。现在的最新版本为Linux-3.0。 二、智能家居国内研究现状 在智能家居控制系统中,核心设备是家居智能控制终端,综合目前的研究现状,主要有以下几种方案: 第一种方案,采用键盘、红外遥控器、触摸平板和LCD显示器等设备对家电进行控制当前智能家居控制系统大都采用此种控制终端,使用此种方式需要分别对控制终端的软件与硬件进行设计,设计复杂,成本高,用户必须购买厂家的控制器以及随后产生维修升级等问题。此外,使用此种控制终端只能进行本地控制,不能实现远程控制。 第二种方案,采用家庭或者办公电脑作为智能家居控制系统的控制终端哺。随着家居智能控制网关技术和高速宽带进入等技术发展和应用,使得电脑能够通过Internet对家居系统、安防谩备的控制方式成为了可能。但是,使用这种控制方式缺点也是显而易见的,那就是只能固定点对家居进行控制,控制终端不能移动造成此控制方式不够方便、便捷。 第三种方案,采用手机作为控制终端,例如使用手机通过无线网络(WIFI,蓝牙]等)对家居系统进行控制,可以真正做到方便、快捷、触手可及。但目前采用这种方式的智能家居系统还不是很多,而且大部分操作繁琐,没有良好的用户体验。 主要内容: 设计一个智能家居模拟照明灯控制系统 (1)根据设计要求,进行方案的论证,确定设计方案和总体框架; (2)系统硬件研究、环境搭建和软件设计; (3)软件调试、系统测试以及测试结果分析。 C / 55

研究方法: (1)文献法。通过查找的资料、文献、论文等,借鉴前人研究成果以指导研究,夯实研究的理论基础。 (2)经验总结法。将以前世人研究出的内容、网上发表的文章加以归纳,进行综述,撰写相关的应用性论文。 (3)实验法。通过软件调试,验证设计效果。 完成期限和采取的主要措施: 完成期限:2013年1月到2013年5月 主要措施: 严格遵照《湖南科技学院毕业论文(设计)工作管理办法》的指示精神,结合个人的实际情况,完成这项设计所采取的主要措施有两条:一是密切联系。联系本组设计成员及毕业设计指导导师,寻求有关毕业设计信息,确定设计课题方向与设计内容;二是虚心学习。利用课余时间到图书馆和网络上查阅资料,并虚心向老师请教和同学进行学习交流,保障毕业设计的顺利完成。 主要参考资料: [l] 侯俊.吴成东.基于zigbee的智能家居安全控制系统研究[J].机电工程学报,2009,26(1):69-70. [2] 彭建盛.基于symbian平台智能家居控制系统的设计与实现[J].天津师范大学学报,2011,31(2):56-58 [3] 满莎,杨恢先.基于ARM9的嵌入式无线智能网关家居设计[J].计算机应用,2010,30(9):2541-2544. [4] 李兰英,杨晨.基于S3C44BOX的智能家居终端控制系统的设计与实现[J].哈尔滨理工大学学报, 2007,12(3),85-86 [5] 莫满春.射频路由算法的研究与智能家居无线控制系统 的设计与实现[D],广州:中山大学,2008 [6] 臧大进,刘曾良.基于物联网的智能家居设计与实现[J].2010,31(11):38-39 [7] Yu M C,Shin D,Shin D K,et al.Fundamentals and design of smart home middleware[C]//CSO 2009:International Joint Conference on Computational Sciences sad Optimization.Washington.DC:IEEE.2009:647-650. [8] Bluetooth SIG.Specification of the Bluetooth System,Volume .Core.Version 1.1[2005-07-15]. [9] Yeo L K, Weon C J.Remote--controlled Home Automation System Via Bluetooth Home Network[C]//Proc of SICE 2003 Annum Conference.Tokyo:Soc of Instrum and Control Eng 2008;2824-2829 [10] 陈桥云,贾金玲.基于智能手机与PC机的智能家居系统设计[J].电子设计工程,2009.17(9):25-27 [1l] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010. [12] 殷华英,杨红梅.使用Java编写基于C/S模式的阿络通信程序[J] .计算机信息与技术指导教师意见: 指导教师签名: 教研室意见: 签 名: 年 月 日 D / 55

开 题 报 告 会 纪 要 时间 与 会 人 员 廖朝阳 会议记录摘要: 讲师 杨熙 讲师 李艳芳 副教授 2012年12月25日 姓 名 谭永宏 职务(职称) 副教授 姓 名 李春树 地点 职务(职称) 教授 三教608 姓 名 李小武 职务(职称) 副教授 1、选题的意义是什么? 随着智能手机的日益普及,Android智能手机成为智能家居的一部分,是智能家居系统未来的发展趋势。 2、课题研究的主要内容是什么? 在深入分析和研究Linux系统、FS_S5PC100开发板内核、FS_S5PC100各模块驱动和Android的系统架构基础上,通过安卓应用层、应用框架层、组件库层、虚拟机和Linux内核层设计和实现了一款基于Cortex-A8的Android智能终端,用于控制开发板上的LED灯。 会议主持人: 记 录 人: 年 月 日 指导小组意见 负责人签名: 年 月 日 系部 负责人签名: 年 月 日 意 见 注:此表由学生本人填写,一式三份,一份留系里存档,指导老师和本人各保存一份

E / 55

湖南科技学院毕业论文(设计)中期检查表

毕业论文(设计)题 目 学生姓名 系 别 Android智能家居之照明灯控制设计 周峰 电子工程 学 号 专 业 检查日期 2 电子信息工程 2013年4月7日 指导教师 廖朝阳 指导教师检查情况记载及修改意见: 检查情况记载: 1、已查阅各种相关资料,对相关知识有一定的了解和掌握; 2、论文内容较为合理; 3、介绍现有技术过多,创新性欠佳; 4、参考文献书写不规范; 5、中文摘要和关键词写得不好. 修改意见: 1、注意论文格式,请参照湖南科技学院毕业论文设计模版; 2、参考文献按照学校的规范写,同时在正文中出现的位置以上标的形式标出,参考文献要求10篇以上,且其中要有3篇以上的外文参考文献; 3、流程图的画法不规范,注意修改; 4、摘要内容应包括研究的目的、方法、结果和结论,要突出所做的工作及做的效果。 签名: 注:此表用于指导教师在学生毕业论文(设计)初稿完成后对学生执行任务书情况进行中期检查时用,由指导教师 填写。

F / 55

湖南科技学院毕业设计(论文)指导过程记录表

Android智能家居之照明灯控制设计 周峰 廖朝阳 学号 职称 2 讲师 专业班级 系(教研室) 指导内容 记录(一) 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 指导内容 记录(三) 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 2009级电信0901班 电子信息工程 毕业论文(设计)题目 学生姓名 指导教师 指导过指导内容 记录(二) 程记指导内容 记录(四) 录 G / 55

指 指导内容 记录(五) 导 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 指导内容 记录(六) 过程指导内容 记录(七) 学 生 签 名: 年 月 日 指导教师签名: 年 月 日 记 指导内容 记录(八) 录学 生 签 名: 年 月 日 指导教师签名: 年 月 日 (对情况是否属实做出意见) 答辩小组组长意见 组长(签名): 年 月 日 注:本表与毕业论文一起装订存档。 H / 55

湖南科技学院本科毕业论文(设计)评审表

论文题目 作者姓名 指导教师 Android智能家居之照明灯控制设计 周峰 所属系、专业、年级 电子工程 系 电子信息工程 专业 2009年级 廖朝阳 讲师 姓名、职称 中 文 摘 关键词 字 数 10000 定稿日期 2013.5.8 现在Android系统已经占有大面积市场,对于Android系统的研究也慢慢兴起。针对新型操作系统的设计也有了概念性的了解。 随着国家对物联网重视,在Android系统上集成了很多如WIFI,红外等无线技术。通过对Android系统的构建,了解Android系统结构,了解Linux内核工作原理,根据需求对系统进行改造。 在深入分析和研究Linux系统、FS_S5PC100开发板内核、FS_S5PC100各模块驱动和Android的系统架构基础上,通过安卓应用层、应用框架层、组件库层、虚拟机和Linux内核层设计和实现了一款基于Cortex-A8的Android智能终端。本文主要是基于FS_S5PC100开发板来控制LED灯。在智能终端设置四个按键分别控制开发板上四个不同的LED灯,当按键响应后,上层应用会向底层驱动传递LED灯开或关的控制命令,从而控制硬件设备,这个研究设计主要用以体现在智能家居Android终端是如何控制家用照明灯,具有较强的实用价值和开发指导意义。 FS_S5PC100 Cortex-A8 Android系统 智能终端 智能家居 I / 55

英 文 摘 要 关键词 Android system has already occupied large market now, for the Android system research also gradually rise. According to the design of the new operating system also have conceptual understanding. As the country on the Internet of things seriously, the Android system integrate a lot of technology,such as wifi, IR. Through the build of the Android system, know the structure of the Android system, understand the working principle of the Linux kernel, according to the demand to reform the system. On the bases of the in-depth analysis and research of Linux system, the kernel of FS_S5PC100 development board , each module driver of FS_S5PC100 and the Android system, through the Android application layer, application framework, component library, virtual machine and the Linux kernel layer design and implementation of a Android intelligent terminal based on Cortex-A8 . This article is based on FS_S5PC100 development board to control the LED lights.Set of four buttons respectively control four different LED lights of development board in the intelligent terminal,when the key response, the application layer will transfer control commands of LED lights on or off to the the driver layer,so as to control the hardware equipment.This study is mainly used to embody in Smart Home System the Android terminal is how to control the domestic lighting, have a strong significant practical value and the development guide value. FS_S5PC100 Cortex-A8 Android System Intelligent Terminal 指导教师评定成绩 评审基元 评审要素 目的明确 符合要求 理论意义或 实际价值 选题恰当 查阅文献 资料能力 综合运用 知识能力 研究方案的 设计能力 评审内涵 选题符合专业培养目标,体现学科、专业特点和教学计划的基本要求,达到毕业论文(设计)综合训练的目的。 符合本学科的理论发展,有一定的学术意义;对经济建设和社会发展的应用性研究中的某个理论或方法问题进行研究,具有一定的实际价值。 题目规模适当,难易度适中;有一定的科学性。 能独立查阅相关文献资料,归纳总结本论文所涉及的有关研究状况及成果。 能运用所学专业知识阐述问题;能对查阅的资料进行整理和运用;能对其科学论点进行论证。 整体思路清晰;研究方案合理可行。 满分 10 指导教师 实评分 选题质量25% 10 5 10 10 5 10 5 5 能力水平40% 能运用本学科常规研究方法及相关研究手段(如计算机、研究方法和手实验仪器设备等)进行实验、实践并加工处理、总结信段的运用能力 息。 外文应用 能阅读、翻译一定量的本专业外文资料、外文摘要和外能力 文参考书目(特殊专业除外)体现一定的外语水平。 文题相符 较好地完成论文选题的目的要求。 论文J / 55

质量35% 写作水平 写作规范 论文篇幅 论点鲜明;论据充分;条理清晰;语言流畅。 符合学术论文的基本要求。用语、格式、图表、数据、量和单位、各种资料引用规范化、符合标准。 10000字左右。 15 10 5 实评总分 成绩等级 指导教师评审意见: 指导教师签名: 说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优 秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。

评阅教师评定成绩 评审基元 评审要素 目的明确 符合要求 理论意义或 实际价值 选题恰当 查阅文献 资料能力 综合运用 知识能力 研究方案的 设计能力 研究方法和手段的运用能力 外文应用 能力 文题相符 评审内涵 选题符合专业培养目标,体现学科、专业特点和教学计划的基本要求,达到毕业论文(设计)综合训练的目的。 符合本学科的理论发展,有一定的学术意义;对经济建设和社会发展的应用性研究中的某个理论或方法问题进行研究,具有一定的实际价值。 题目规模适当,难易度适中;有一定的科学性。 能独立查阅相关文献资料,归纳总结本论文所涉及的有关研究状况及成果。 能运用所学专业知识阐述问题;能对查阅的资料进行整理和运用;能对其科学论点进行论证。 整体思路清晰;研究方案合理可行。 能运用本学科常规研究方法及相关研究手段(如计算机、实验仪器设备等)进行实验、实践并加工处理、总结信息。 能阅读、翻译一定量的本专业外文资料、外文摘要和外文参考书目(特殊专业除外)体现一定的外语水平。 较好地完成论文选题的目的要求。 K / 55

满分 10 评阅教师 实评分 选题质量25% 10 5 10 10 5 10 5 5 能力水平40% 论文质量35% 写作水平 写作规范 论文篇幅 论点鲜明;论据充分;条理清晰;语言流畅。 符合学术论文的基本要求。用语、格式、图表、数据、量和单位、各种资料引用规范化、符合标准。 10000字左右。 15 10 5 实评总分 成绩等级 评阅教师评审意见: 评阅教师签名: 说明:评定成绩分为优秀、良好、中等、及格、不及格五个等级,实评总分90—100分记为优 秀,80—89分记为良好,70—79分记为中等,60—69分记为及格,60分以下记为不及格。

L / 55

湖南科技学院本科毕业论文(设计)答辩记录表

论文题目 作者姓名 指导教师 姓名、职称 Android智能家居之照明灯控制设计 周峰 所属系、专业、年级 电子工程系 电子信息工程专业 2009年级 廖朝阳 讲师 答 辩 会 纪 要 时间 答 辩 小 组 成 员 姓 名 谭永红 李艳芳 2013年5月18日 职务(职称) 副教授 副教授 姓 名 李春树 杨熙 地点 职务(职称) 教授 讲师 三教608 姓 名 廖朝阳 李小武 职务(职称) 讲师 副教授 答辩中提出的主要问题及回答的简要情况记录: 1、现阶段手机智能家居的主要通信方式有哪些? Wifi通信,蓝牙模块。 2、智能家居照明灯控制发展前景如何? 随着科技的飞速发展及生活水平的不断提高,人们对智能化家居生活的需求也逐渐增大,越来越多的智能宅,智能小区应运而生,智能家居照明灯得到了众多开发商和消费者青睐。 会议主持人: 记 录 人: 年 月 日 M / 55

评语: 答 辩 小 组 意 见 评定等级: 负责人(签名): 年 月 日 系 学 位 委 员 会 意 见 校 学 位 委 员 会 意 见 评语: 论文(设计)最终评定等级: 负责人(签名): 系部(公章) 评语: 评定等级: 负责人(签名): 年 月 日 年 月 日 N / 55

目录

绪论 .................................................................. 1 1 开发环境介绍 ........................................................ 3

1.1 FS_S5PC100开发板简介 .......................................... 3 1.2 Cortex-A8处理器 ............................................... 3 1.3 Android系统及框架 ............................................. 4

1.3.1 Android 系统介绍 ......................................... 4 1.3.2 Android 框架介绍 ......................................... 5 1.4 开发环境的搭建................................................. 6

1.4.1 U_BOOT镜像的下载与烧写................................... 6 1.4.2 内核镜像的下载与烧写 ..................................... 9 1.4.3 烧写文件系统镜像 ........................................ 10 1.4.4 交叉开发环境的搭建 ...................................... 12

2 u-boot、内核、文件系统编译 ......................................... 14

2.1 u-boot 的编译................................................. 14 2.2 内核镜像的编译................................................ 14 2.3 Android 文件系统的编译........................................ 15 3 Android智能终端LED灯具体设计...................................... 18

3.1 应用层终端控制设计及代码编写.................................. 20 3.2 Jni层本地库的实现与代码编写 .................................. 22 3.3 Hal层模块的设计与代码编写 .................................... 25 3.4 LED驱动层硬件控制设计与代码修改 .............................. 27 3.5 安卓智能终端.................................................. 30 结论 ................................................................. 31 参考文献 ............................................................. 32 致谢 ................................................................. 33

I / 55

插图索引

图 1 FS_S5PC100开发板原图 ................................................. 3 图 2安卓框架 .............................................................. 5 图 3 硬件拨码开关 SW1...................................................... 6 图 4 DNW串口连接成功 ...................................................... 7 图 5 DNW下载bin文件 ...................................................... 7 图 6 DNW下载u-boot.bin.................................................... 8 图 7 u-boot.bin 成功下载................................................... 8 图 8 u-boot.bin烧录成功 ................................................... 9 图 9进入u-boot设置 ....................................................... 9 图 10下载内核镜像 ........................................................ 10 图 11烧写内核镜像文件 .................................................... 10 图 12下载文件系统镜像 .................................................... 11 图 13烧写到Nandflash..................................................... 11 图 14安卓文件系统界面 .................................................... 12 图 15安装交叉工具链 ...................................................... 12 图 16安装JDK............................................................. 13 图 17 linux配置界面 ...................................................... 14 图 18 配置显示类型........................................................ 15 图 19编译成内核 .......................................................... 15 图 20文件系统镜像 ........................................................ 17 图 21 yaffs2文件系统制作 ................................................. 17 图 22设计流程图 .......................................................... 19 图 23 LED实现调用关系图 .................................................. 20 图 24 Eclipse中终端设计调试图 ............................................ 22 图 25 仿真调试图.......................................................... 22 图 26 LED灯原理图 ........................................................ 27 图 27智能控制终端 ........................................................ 30

II / 55

Android智能家居之照明灯控制设计

摘 要

现在Android系统已经占有大面积市场,对于Android系统的研究也慢慢兴起。针对新型操作系统的设计也有了概念性的了解。

随着国家对物联网重视,在Android系统上集成了很多如WIFI,红外等无线技术。通过对Android系统的构建,了解Android系统结构,了解Linux内核工作原理,根据需求对系统进行改造。

在深入分析和研究Linux系统、FS_S5PC100开发板内核、FS_S5PC100各模块驱动和Android的系统架构基础上,通过安卓应用层、应用框架层、组件库层、虚拟机和Linux内核层设计和实现了一款基于Cortex-A8的Android智能终端。本文主要是基于FS_S5PC100开发板来控制LED灯。在智能终端设置四个按键分别控制开发板上四个不同的LED灯,当按键响应后,上层应用会向底层驱动传递LED灯开或关的控制命令,从而控制硬件设备,这个研究设计主要用以体现在智能家居中Android终端是如何控制家用照明灯,具有较强的实用价值和开发指导意义。

【关键词】:FS_S5PC100 Cortex-A8 Android系统 智能终端 智能家居

III / 55

Android Smart Home of Light Show

Abstract

Android system has already occupied large market now, for the Android system research also gradually rise. According to the design of the new operating system also have conceptual understanding.

As the country on the Internet of things seriously, the Android system integrate a lot of technology,such as wifi, IR. Through the build of the Android system, know the structure of the Android system, understand the working principle of the Linux kernel, according to the demand to reform the system.

On the bases of the in-depth analysis and research of Linux system, the kernel of FS_S5PC100 development board , each module driver of FS_S5PC100 and the Android system, through the Android application layer, application framework, component library, virtual machine and the Linux kernel layer design and implementation of a Android intelligent terminal based on Cortex-A8 . This article is based on FS_S5PC100 development board to control the LED lights.Set of four buttons respectively control four different LED lights of development board in the intelligent terminal,when the key response, the application layer will transfer control commands of LED lights on or off to the the driver layer,so as to control the hardware equipment.This study is mainly used to embody in Smart Home System the Android terminal is how to control the domestic lighting, have a strong significant practical value and the development guide value.

【Key words】: FS_S5PC100 Cortex-A8 Android System Intelligent Terminal Smart Home System

IV / 55

绪论

一、课题的研究背景及意义

智能家居[1]是这样定义的:它是以用户住宅为平台,利用各种新技术,如通信技术、自动控制技术等,把生活息息相关的各种家电、安防等设施集成,组成住宅设施管理系统,造就一个安全、便利、舒适、环保的家居生活环境。目前智能家居正朝着具备无线远程袖近程控制相结合、多媒体,游戏娱乐功能于一身、快速便利的家电控制等功能的方向发展,其核心技术为扩展性强的智能家居控制器和满足信息传输快而准需要的家庭网络[2]。

Android系统是目前市场流行的三大系统之一,它是Google公司在2005年推出的一款针对手持设备的主要是针对手机,现已推广到了平板电脑上面。市面上与之抗衡的手机系统有塞班、IOS、RIM等但均无超越之势。

Android是一个开源的操作系统并且由Google直接维护,这一点要远比MTK好得多,世界上很多人为其提交补丁。Android另一个优势是使用Linux内核。Linux内核是一个开源的操作系统核心组件。现在的最新版本为Linux-3.0。

Google在Android系统上面增加了很多有趣的Google服务。可以方便用户登录,Gmail,谷歌地图等。Android软件是由Java编写,这样做的目的也是为了吸引大量的Java程序员进入Android世界。

二、智能家居国内研究现状

在智能家居控制系统中,核心设备是家居智能控制终端,综合目前的研究现状,主要有以下几种方案:

第一种方案,采用键盘、红外遥控器、触摸平板和LCD显示器等设备对家电进行控制当前智能家居控制系统大都采用此种控制终端,使用此种方式需要分别对控制终端的软件与硬件进行设计,设计复杂,成本高,用户必须购买厂家的控制器以及随后产生维修升级等问题。此外,使用此种控制终端只能进行本地控制,不能实现远程控制[3]。

第二种方案,采用家庭或者办公电脑作为智能家居控制系统的控制终端[4]。随着家居智能控制网关[5]技术和高速宽带进入等技术发展和应用,使得电脑能够通过Internet对家居系统、安防谩备[6]的控制方式成为了可能。但是,使用这种控制方式缺点也是显而易见的,那就是只能固定点对家居进行控制,控制终端不能移动造成此控制方式不够方便、便捷。

第三种方案,采用手机作为控制终端,使用手机通过无线网络WIFI[7],蓝牙[8],GSM等,对家居系统进行控制,可以真正做到方便、快捷、触手可及。但目前采用这种方式的智能家居系统还不是很多,而且大部分操作繁琐,没有良好的用户体验[9]。 三、本课题来源、研究内容及创新点

随着智能手机的日益普及,手机成为智能家居的一部分是智能家居系统未来的发展趋势。本研究针对手机控制方式,提出一种更为合理和便捷的方案。 本设计主要特点如下:

1 / 55

1)基于当前广泛流行的开放的Android系统进行控制终端设计,使用支持组件重用和替换的应用框架,具有良好的兼容性和可拓展性。同时采用图形界面交互,界面直观美观,所见即所得,具有良好的用户体验效果。

2)本设计取消智能家居系统专用控制器,使用用户的Android手机或平板就能实现对家居设备的操作和控制,减少硬件设计的复杂度,同时也减少了用户的使用成本。

2 / 55

1 开发环境介绍

1.1 FS_S5PC100开发板简介

图 1 FS_S5PC100开发板原图

FS_S5PC100开发板是性能稳定、功能强大、高性价比的ARM Cortex-A8处理器开发板;专为消费类电子、工业控制、车载导航、行业PDA等电子产品的开发而设计,主要供广大企业用户进行产品前期软硬件性能评估验证、设计参考用,其凭借极高的性价比成为高校、培训机构、嵌入式爱好者学习研究的最佳工具。

FS_S5PC100处理器采用64位内部总线构架,包括强大的硬件加速器,如:动态视频处理,显示控制和缩放。支持多种格式的硬件编解码:MPEF-1/2/4、H263/H264、CV-1、DivX。其硬件加速功能支持实时的视频会议和模拟电视输出,支持NTSC和PAL模式的HDMI。提供了24bit LCD接口、TVout接口、Camera输入接口、4路串口、SD卡接口、SPI、100M网口、USB2.0-OTG接口,USB Host接口、音频输入输出接口、按键接口、I2C接口等硬件资源,具有更高的主频和更丰富外设,能适用于对性能和处理能力有更高要求的嵌入式系统应用场合。

1.2 Cortex-A8处理器

Cortex-A8处理器是第一款基于下一代ARMv7架构的应用处理器,使用了能够带来更高性能、功耗效率和代码密度的Thumb-2技术。它首次采用了强大的NEONTM信号处理扩展集,对H.264和MP3等媒体编解码提供加速。Cortex-A8解决方案还包括Jazelle-RCT Java加

3 / 55

速技术,对实时(JIT)和动态调适编译(DAC)提供最优化,同时减少内存占用空间高达三倍。此外,新处理器还配置了用于安全交易和数字版权管理的TrustZone[10]技术以及实现低功耗管理的IEM功能。

Cortex-A8处理器是ARM的第一款超标量处理器,具有提高代码密度和性能的技术,用于多媒体和信号处理的NEON™技术,以及用于高效地支持预编译和即时编译Java及其他字节码语言的Jazelle®运行时间编译目标(RCT)技术。

Cortex-A8处理器出色的运行速率和功率效率是通过新的支持并实现了高级泄露控制的ARM Artisan® Advantage-CE库实现的。这种处理器得到了各种各样的适用于快速系统设计的ARM技术的支持。

1.3 Android系统及框架

1.3.1 Android 系统介绍

Android是基于Linux内核的操作系统,是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。

2010年末数据显示,仅正式推出两年的操作系统Android已经超越称霸十年的诺基亚(Nokia)Symbian OS系统,采用Android系统主要手机厂商包括宏达电子(HTC)、三星(SAMSUNG)、摩托罗拉(MOTOROLA)、LG、Sony Ericsson、魅族M9等,使之跃居全球最受欢迎的智能手机平台,Android系统不但应用于智能手机,也在平板电脑市场急速扩张。 安卓系统的优势

一、开放性

在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。

开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。

二、挣脱运营商的束缚

在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。

三、丰富的硬件选择

4 / 55

这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。

四、不受任何限制的开发商

Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻挠,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。

五、无缝结合的Google应用

如今叱咤互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。 1.3.2 Android 框架介绍

图 2安卓框架

Android操作系统自顶向下分成4个层次,即Android应用层[11]、应用框架层、组件库层、虚拟机和Linux内核层。

应用层:Android操作系统同一系列核心应用程序包一起发布,其核心应用程序包括E-mail客户端、SMS[12](短信)序、日历、Google地图、网页浏览器、联系薄等,目前所有的应用都是使用Java语言编写的。

应用框架层:开发者通过使用核心应用程序来调用Android框架提供的API,这个应用程序结构被设计成方便复用的组件。任何的应用程序都可以公布它的功能,其他的应用程序可以使用这些功能(涉及到系统安全问题的功能将会被框架禁止)。该应用程序重用机制使用户

5 / 55

可以方便地替换程序组件。隐藏在每个应用后面的是一系列的服务和系统;

组件库层:Android包含了一套C/C++函数库,主要包括libc、Media Framework、WebKit、SGL、OpenGLES、FreeType、SQLite等,它们被应用于Android系统的各种组件中,这些功能通过Android应用框架展现给开发人员。

运行时环境:Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成可以同时高效地运行多个虚拟系统。Dalvik虚拟机执行后缀为dex的可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由Java编译器编译,然后通过SD中的“dx”工具转化成“.dex”格式。Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制;

Linux内核层:Android底层是一个基于Linux2.6.23内核开发的独立操作系统。主要是添加了一个名为Goldfish的虚拟CPU以及Android运行所需的特定驱动代码。该层用来提供系统的底层服务,包括安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块。作为一个虚拟的中间层,该层位于硬件与其他的软件层之间。

1.4 开发环境的搭建

开发环境介绍

开发环境:主机Ubuntu 10.10 ,开发工具eclipse 、android-sdk-windows、 jdk 1.6 目标板:fs_s5pc100

目标板内核:android-2.6.29-samsung Android开发系统版本:Android2.1 1.4.1 U_BOOT镜像的下载与烧写

U-Boot 镜像文件“u-boot.bin”在目录“Linux-Android\\image”下。使用 USB 方式下载。 1、首先安装好串口线,USB 下载线,把硬件拨码开关 SW1 设置为 USB 启动模式,也就是由原来的“0000”设置为“0001”:

图 3 硬件拨码开关 SW1

6 / 55

2、打开电源,DNW 工具会显示“USB:OK”,如图3

图 4 DNW串口连接成功

3、通过 DNW 下载“USB Installer_DDR2.bin”,该文件也在“Linux-Android\\image”目录下:

图 5 DNW下载bin文件

4、下载 u-boot.bin:这时要注意,第一次选择下载 u-boot.bin 后,要先在串口通信终端敲任意键来中断 boot 启动,进入 u-boot 设置模式,然后在串口输入终端输入下载命令“dnw 20008000”,接着第二次再使用 DNW 下载 u-boot.bin

7 / 55

图 6 DNW下载u-boot.bin

图 7 u-boot.bin 成功下载

5、“u-boot.bin”下载成功后还需要烧写到 NAND_Flash 中:

在串口通信终端中输入命令:#nand erase 0 40000;nand write 20008000 0 40000

8 / 55

图 8 u-boot.bin烧录成功

1.4.2 内核镜像的下载与烧写

1、 打开电源,在串口通信终端敲任意键进入 u-boot 设置模式。

图 9进入u-boot设置

2、 下载内核镜像文件:

输入下载命令:#dnw 20008000,然后通过 DNW 下载内核镜像文件

9 / 55

图 10下载内核镜像

3、 烧写内核镜像:

输入烧写命令:#nand erase 900000 300000;nand write 20008000 900000 300000

图 11烧写内核镜像文件

1.4.3 烧写文件系统镜像

烧写完内核镜像后,我们接着烧写文件系统镜像。文件系统镜像在目录“Linux-Android\\image”下, 在普通启动模式下通过 USB 下载。

1、 下载文件系统镜像:

在串口通信终端输入命令:#dnw 20008000,然后通过 DNW 下载文件系统镜像

10 / 55

图 12下载文件系统镜像

2、 下载完成后把文件系统镜像烧写到 NAND_Flash 中,此处耗时较长:输入命令:#nand erase C00000 F400000;nand write.yaffs 20008000 C00000 454b900

图 13烧写到Nandflash

u-boot 启动参数设置

文件系统镜像烧写完成后,还是在 u-boot 设置模式下,在串口通信终端输入以下命令: #setenv bootargs root=/dev/mtdblock3 rootfstype=yaffs2 init=/init console=ttySAC0,115200 #setenv bootcmd nand read 20008000 900000 300000\\;bootm 20008000 #saveenv

11 / 55

重启开发板,然后我们就可以进入Android 文件系统下:

图 14安卓文件系统界面

1.4.4 交叉开发环境的搭建

1、安装交叉工具链

在自己的 linux 中建立交叉开发环境:

a、解压“Linux-Android\oolchain”目录下的“arm-none-eabi-4.2.2.tgz”到根“/usr/local”目录下,在 “/usr/local”目录下会生成“arm”目录:

执行命令:#tar zxvf arm-none-eabi-4.2.2.tgz b、修改环境变量“PATH”: ~$ sudo vim /etc/environment

将路径添加到 PATH 变量的最后面:

PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.2.2-eabi/usr/bin

c、保存退出后执行:source /etc/environment这样修改的环境变量会立即生效,于是我们就得到交叉编译工具:

图 15安装交叉工具链

12 / 55

2、安装JDK

a、安装“Linux-Android\oolchain”目录下的“jdk.bin”,jdk.bin 是 Jdk1.5,Jdk1.5 是编译 Android2.1 必须的工具,而且只能是 1.5,其他版本(比如 1.6)都不行。 把“jdk.bin”拷贝到“/usr”目录下,然后执行,按照提示安装即可。

#sudo ./jdk.bin

b、安装结束后还要配置一下环境变量: ~$ sudo vim /etc/environment

将路径添加到 PATH 变量的最后面:

PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.2.2-eabi/usr/bin:/usr/jdk1.5.0_21/bin

图 16安装JDK

c、保存退出后执行: source /etc/environment

13 / 55

2 u-boot、内核、文件系统编译

2.1 u-boot 的编译

拷贝“Linux-Android\\源码”目录下的“uboot-s5pc100.tar.bz2”到目标目录下,然后执行命令: tar jxvf uboot-s5pc100.tar.bz2 make smdkc100_config make

在源码根目录(uboot-samsung)下会生成“u-boot.bin”。

2.2 内核镜像的编译

1、拷贝“Linux-Android\\源码”目录下的“android-2.6.29-samsung.tar.bz2”到目标目录下,然后解压

tar jxvf android-2.6.29-samsung.tar.bz2 2、执行:make menuconfig 进入配置界面

图 17 linux配置界面

14 / 55

配置内核编译选项,需要注意的是要按照自己的实际情况选择 Framebuffer 显示设备的类型,选项位 于:

-> Device Drivers -> Graphics support

-> Support for frame buffer devices (FB [=y]) -> S3C Framebuffer support (FB_S3C [=y]) -> Select LCD Type ( [=y])

如果开发板接 480*272 的 LCD 屏,应该选择: (X)Innolux 4.3 inch (480x272)

如果开发板接 800*600 的 VGA 显示器,应该选择: (X) VGA 800x600

如果开发板接 1024*768 的 VGA 显示器,应该选择: (X) VGA 1024x768

图 18 配置显示类型

3、执行:make zImage

编译内核,生成的 zImage 位于:arch/arm/boot/下

图 19编译成内核

2.3 Android 文件系统的编译

1、拷贝“Linux-Android\\源码”目录下的“eclair_2.1_farsight.tar.gz”到目标目录下,然后解压

15 / 55

tar zxvf eclair_2.1_farsight.tar.gz

2、Android_2.1 编译

初始化 Android 构建子系统(导出几个命令到环境变量): ~/eclair_2.1_farsight/$ . ./build/envsetup.sh

注意这里两个’.’ 之间有一个空格,第一个’.’指定用当前 shell 解析这个脚本,否则不能执行。

配置板级信息:

~/eclair_2.1_farsight/$ tapas

tapas 就是上一步执行结束之后导出到环境变量里的命令,专门用来配置板级信息的。 具体配置选项如下:

Build for the simulator or the device? 1、Device 2、Simulator

Which would you like? [1] 1 1、Build type choices are: 2、release 3、debug

Which product would you like? [fs100] fs100 1、Variant choices are: 2、user 3、userdebug 4、eng

Which would you like? [eng] eng

PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=fs_s5pc100 TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR=false TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux

HOST_BUILD_TYPE=release BUILD_ID= ERE27

开始编译(如果不能找到 mm,执行”source build/envsetup.sh”): ~/eclair_2.1_farsight/$ mm

16 / 55

系统会自动生成相关的文件系统镜像 “out/target/product/fs100/”, 可以在这里找到各个部分。

图 20文件系统镜像

3、制作 yaffs2 文件系统镜像 执行:

~/eclair_2.1_farsight/$ ./make_fs100_yaffs2_image.sh

就会在 Android 源码根目录下生成目录“fs100_root”,这个目录就是编译生成的 Android 文件系统,调试时可以直接把这个目录作为 NFS-Server 的目录。还会生成“fs100_root.img”文件,这个文件就是 Android 的 yaffs2 格式的镜像,可以使用 dnw 工具将这个镜像烧写到 Nand Flash 上。

图 21 yaffs2文件系统制作

17 / 55

3 Android智能终端LED灯具体设计

设计流程

在安卓智能终端设置四个按键,每个按键分别控制FS_S5PC100开发板上的四盏LED灯。 1、应用层实现安卓智能客户端和提供jni层接口的本地函数,并且调用本地函数库 2、jni层实现应用层提供的本地函数接口,封装成本地库,并且实现hal层的接口函数 3、hal向jni层提供的接口函数,并且调用控制驱动层的read、write、ioctl等函数 4、驱动层实现hal层的的read、write、ioctl等函数,同时控制硬件

18 / 55

开始设计应用终端构建本地方法触摸按键Y获取本地方法YNJNI层本地库获取模块ID号N硬件控制驱动YHAL模块LED灯亮灭

图 22设计流程图

19 / 55

图 23 LED实现调用关系图

3.1 应用层终端控制设计及代码编写

应用层:构建led布局,实现控制led灯的native函数,调用本地库 a、布局分析:创建四个ImageButton控件分别如下实现 android:id=\"@+id/buttonBeepOn\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:layout_x=\"2dp\" android:layout_y=\"131dp\"

android:src=\"@drawable/alert_off\" />

b、逻辑分析:定义四个变量,每个变量用1控制灯亮,0控制灯灭 ,并且用方法setImageResource实现图片的跳转

具体代码如下,以LED1灯为例

buttonled1 = (ImageButton) findViewById(R.id.buttonLed1); buttonled1.setOnClickListener(new OnClickListener()

20 / 55

});

{

//@Override

public void onClick(View v) { }

// TODO Auto-generated method stub j = 1; fsLedOn(j); if (led1 == 1) { } else { }

buttonled1.setImageResource(R.drawable.bulb_off); led1 = 1;

buttonled1.setImageResource(R.drawable.bulb_on); led1= 0;

c、实现本地函数,控制硬件驱动设备和LED灯的开关 fsLedOpen();//控制底层设备

fsLedOn(),fsLedOff();//控制led灯的亮和灭

d、加载一个实现本地函数的方法的native库(必须注意对应的名字是android_jni,表明加载的库是libandroid_jni.so)

static { }

21 / 55

System.loadLibrary(\"android_beep_jni\");

图 24 Eclipse中终端设计调试图

图 25 仿真调试图

3.2 Jni层本地库的实现与代码编写

Jni层:实现应用层的本地接口函数,编译成本地库,创建hal层接口

a、当安卓的VM执行到程序里C的组件System.loadLibrary(\"android_beep_jni\")时,则加载本地文件,在加载本地文件时会调用native库中的JNI_ONLoad函数,JNI_ONLoad函数的实现如下

jint JNI_OnLoad(JavaVM * vm, void * reserved)

22 / 55

{ }

1> jni版本的注册(告诉VM此C组件使用哪个jni版本,如果没有提供JNI_OnLoad函数,VM会默认该.so档是使用最老的JNI1.1版本)

if(vm->GetEnv((void * *) &env, JNI_VERSION_1_4)!=JNI_OK) 2> //各本地函数到VM注册登记,以便能加快后续呼叫本地函数的效率 if(registerNatives(env) != JNI_TRUE) //在registerNative函数中实现以下函数

static const char *classPathName=\"com/farsight/android/Android_project\"; //注意此类一定要与应用程序的类名一致且不能出现中文符号 clazz = env->FindClass(classPathName); //找到本地函数所在的类

if(env->RegisterNatives(clazz, gMethods,sizeof(gMethods)/sizeof(gMethods[0]))<0) //注册本地函数方法

3> 在函数中透过VM之指标取得JNIEnv的指标值,并存入env指针变量中。由于VM通常是多执行绪的执行环境,每一个执行绪在执行JNI_OnLoad()时,所传递进来的JNIEnv的指标值不同,为了确保每个执行绪能够避免冲突,在Android的VM中安全有序的运行,当呼叫C组件的函数时,都会把JNIEnv中的指标值传递给VM

23 / 55

jint result = -1; JNIEnv*env=NULL;

LOGI(\">>>>>>JIN Onlaod sucess<<<<<<\");

if(vm->GetEnv((void * *) &env, JNI_VERSION_1_4)!=JNI_OK) { } { }

LOGI(\">>>>>registerNatives success<<<<<<\"); result = JNI_VERSION_1_4; bail:

return result;

LOGE(\">>>>registerNatives<<<<<<\"); goto bail;

LOGI(\">>>>>>>>Getenv success<<<<<<<\"); if(registerNatives(env) != JNI_TRUE)

LOGE(\">>>>>>Getenv fialed<<<<<<<\"); goto bail;

b、实现应用层提供的本地函数接口

1> 本地方法接口的映射关系(前面的表示应用层的提供的函数接口,后面的表示jni层实现本地方法的函数,本地函数的名字一定要对应相同)

static JNINativeMethod gMethods[]={ };

2> 实现应用层接口,实现hal层提供的接口(在头文件中hal_led.h实现,hal层也拥有这个头文件)

static hnafeng_led_module_t*hnLedModule=NULL;

static hnafeng_led_device_t*hnLedDevice=NULL;//定义两个结构体标量,这两个结构体在头文件hal_led.h中有定义

static jint led_on(JNIEnv*env,jobject thiz,int i)//实现应用层点亮led灯的接口函数 hnLedDevice->led_set_on(i); //给hal层提供接口,接口定义在头文件中,并且传递一个参数给hal层

static jint led_open(JNIEnv*env,jobject thiz) //实现本地打开设备函数 if(hw_get_module(LED_HNAFENG_MODULE_ID, 义时必须与hal层的编译后的库名一致

hnLedModule = (struct hnafeng_led_module_t*)module;//把获取的模块保存在hnLedModule中

hnafeng_led_control_open(&hnLedModule->common,&hnLedDevice);//调用实现打开设备的函数

在hnafeng_led_control_open函数中的实现如下:调用open()函数得到一个hal层回传的设备

static inline int hnafeng_led_control_open(const struct hw_module_t*module,struct hnafeng_led_device_t**device)

{ }

c、编译成libandroid_jni.so库文件(把Android.mk和jni文件放入相同的文件夹,选择好工程fs100,输入mmm .)

24 / 55

{\"fsSayHello\{\"fsLedOpen\{\"fsLedOn\{\"fsLedOff\

(const struct hw_module_t *

* )&module) == 0)//根据ID号获取hal层的模块(stub),注意此ID号在头文件中定义,且定

LOGI(\">>>>hnafeng_led_device_open<<<\"); return

module->methods->open(module,LED_HNAFENG_MODULE_ID,(struct

hw_device_t **)device);

在编写Android.mk文件时注意两个地方: LOCAL_SRC_ \\ //“\\”后面不能空格,只能回车 com_farsight_led.cpp //jni层的文件名

LOCAL_MODULE:= libandroid_led_jni //生成文件名称,必须和应用层的本地库一致

3.3 Hal层模块的设计与代码编写

头文件:hal_led.h定义两个结构体和模块的ID号

#define LED_HNAFENG_MODULE_ID \"hnafeng_android_led\" struct hnafeng_led_module_t{ };

struct hnafeng_led_device_t{ };

hal层:实现jni层提供的接口函数,给驱动层提供接口,通过宏来控制驱动层 a、创建一个模块

const struct hnafeng_led_module_t HAL_MODULE_INFO_SYM={ };

其中HAL_MODULE_INFO_SYM 、tag:HARDWARE_MODULE_TAG是系统提供不能更改名字

id:LED_HNAFENG_MODULE_ID这个ID号就是头文件中定义的ID号,也是模块独一无二的名字,jni层通过它可以找到hal层的动态库文件

methods:&hnafeng_led_module_methods声明模块实现方法

25 / 55

struct hw_module_t common;

struct hw_device_t common; int (*led_set_on)(int i); int (*led_set_off)(int i);

common:{ }

tag:HARDWARE_MODULE_TAG, version_major:1, version_minor:0,

id:LED_HNAFENG_MODULE_ID, name:\"hnafeng Hal module\author:\"hnafeng\

methods:&hnafeng_led_module_methods,

b、构建模块方法

static struct hw_module_methods_t hnafeng_led_module_methods={ };

c、实现模块方法(实现jni层提供的接口函数,初始化模块,打开设备) static int hnafeng_led_device_open(const 给jni层

struct hnafeng_led_device_t*hndevice; //实例一个hndevice结构体变量

hndevice = (struct hnafeng_led_device_t*)malloc(sizeof(*hndevice)); //给hndevice结构申请空间

memset(hndevice,0,sizeof(*hndevice)); //清空结构体 hndevice->common.tag=HARDWARE_DEVICE_TAG; hndevice->common.version=0; //给hndevice结构体成员赋值 hndevice->common.module=module;

hndevice->common.close=hnafeng_led_device_close; //关闭设备

hndevice->led_set_on=hnafeng_led_set_on; //实现jni层的接口函数 led_set_on在头文件中实现

*device =(struct hnafeng_led_device_t*)hndevice; //把实例化的hndevice回传给device if((fd = open(HNAFENGLED,O_RDWR)) == -1) //打开设备

d、实现jni层提供的接口函数(通过四位二进制的每一位来控制四盏灯:0表示灯亮,1表示灯灭)

static int hnafeng_led_set_on(int n){ 盏灯亮

} else {

26 / 55

open:hnafeng_led_device_open,

struct hw_module_t*module,const char

*name,struct hw_device_t**device) //传入一个hw_device_t指针,是为了得到一个设备,回传

static int i = 0;

if((i & (0x01 <<(n-1))) == 0)//当传入的是第n盏灯的第一次按键,则把1向左移n-1位,{

ioctl(fd,GPG3DAT2_ON,n);//给驱动层传入命令GPG3DAT2_ON给驱动,驱使第nprintf(\">>>>>>>>led %d on<<<<<<<<<\\n\

i = i | (0x01 << (n-1));//把传来的第n盏灯所表示的位置1,当第二次按下第n盏灯

并且把所表示的位置0,灯亮

则运行下面代码

}

}

ioctl(fd,GPG3DAT2_OFF,n);//当第n盏灯所表示的位是1,则表示第二次按下第nprintf(\">>>>>>>led %d off<<<<<<<<\\n\

i = i & (~(0x01 << (n-1)));//把第n盏灯所表示的位置0

盏灯,传递GPG3DAT2_OFF给驱动,灯灭

return 0;

定义两个宏来给驱动发命令(驱动层定义同样的宏) #define GPG3DAT2_ON 0x4800 //表示灯亮 #define GPG3DAT2_OFF 0x4801 //表示灯灭

e、实现设备关闭

3.4 LED驱动层硬件控制设计与代码修改

驱动层:完成hal层的接口函数,实现硬件操作

a、led原理图:(高电平有效,GPG3_0控制led4,GPG3_1-GPG3_3分别控制led1、led2、led3)

图 26 LED灯原理图

定义两个宏来控制led灯: #define LED_ON 0x4800 灯亮 #define LED_OFF 0x4801 灯灭

b、主要实现函数 1>入口函数

static int __init hnafeng_led_init(void) 注册设备号

dev =MKDEV(hnafeng_led_major, 0);

if(hnafeng_led_major)

27 / 55

{ //静态方法注册设备号

result=register_chrdev_region(dev, 1, \"myled\");

} else { //动态申请注册设备号

result=alloc_chrdev_region(&dev, 0, 1, \"myled\"); hnafeng_led_major=MAJOR(dev); }

创建设备结构体

hnafeng_setup_cdev(&hnafeng_led_cdev,0,&hnafeng_fops);

创建设备文件

hnafeng_class=class_create(THIS_MODULE, \"myled\"); device_create(hnafeng_class, NULL, MKDEV(hnafeng_led_major, NULL,\"hnafengled\");

映射管脚

vGPG3CON =ioremap(pGPG3CON, 0x10); vGPG3DAT = vGPG3CON + 0x04; 2>创建 结构体

static struct hnafeng_fops ={ .owner =THIS_MODULE, .open = hnafeng_led_open, .write = hnafeng_led_write, .release =hnafeng_led_release, .ioctl = hnafeng_led_ioctl,

};

3>初始化设备

static int hnafeng_led_open(struct inode * inode, struct file * file) { GPG3CON =0x1111;//初始化管脚 return 0;

}

4>实现hal层读操作,通过宏定义命令控制灯的亮灭

static int hnafeng_led_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

28 / 55

0),

{ }

灯亮操作函数: void led_on(int arg) { 平有效

}

灯灭操作函数: void led_off(int arg) {

29 / 55

switch(cmd){ case LED_ON: } return 0;

{ } { } { }

break; led_off(arg); break;

led_on(arg);//上层传下来的参数,代表第几盏灯亮 break;

case LED_OFF:

default:

if(arg == 4) { } else

{ }

GPG3DAT |= (1<<(arg));//GPG3_1~GPG3_3分别控制led1、led2、led3,高电

GPG3DAT |=(1<<(0));//GPG3_0控制led4灯亮,高电平有效

printk(\"led on\\n\");

}

if(arg == 4)

{ }

GPG3DAT &=~(1<<(0));

else {

}

GPG3DAT &=~(1<<(arg));

printk(\"led off\\n\");

5>出口函数

static void hnafeng_led_cleanup(void) { }

unregister_chrdev(hnafeng_led_major, \"myled\");//注销设备

device_destroy(hnafeng_class, MKDEV(hnafeng_led_major,0));//注销设备文件 cdev_del(&hnafeng_led_cdev);//删除cdev结构体 iounmap(vGPG3CON);//解除映射

3.5 安卓智能终端

图 27智能控制终端

30 / 55

结论

通过阅读参考大量的关于智能家居技术的参考文献以及研读许多的关于单片机的文献,我对家居设计有了大致的学习和掌握。进行了相关的理论知识的学习,阅读了大量国内外相关领域的文献资料,从安卓框架搭建的学习与研究,到最后整体组合,前后经历的大量思考和修改,基本确定了模块的设计并且在老师的指导下我完成了大体的智能家居照明灯控制的设计方案。

本文实现Android手机作为智能家居的一个控制终端,对家电控制照明灯的实现方法和安卓框架程序代码研究做了详细的介绍,并在Android系统的不同版本下终端运行正常。由于我是首次涉及这个研究领域,并且首次学习相关技术,我的知识的累积还有待于提高和增加,时间和经验的限制,我的论文中的设计方案会有很多不够成熟和完善的地方,许多功能尚不能很好很理想很人性化的实现。

31 / 55

参考文献

[1] 侯俊.吴成东.基于zigbee的智能家居安全控制系统研究[J].机电工程学报,2009,26(1):69-70. [2] 彭建盛.基于symbian平台智能家居控制系统的设计与实现[J].天津师范大学学报,2011,31(2):56-58 [3] 满莎,杨恢先.基于ARM9的嵌入式无线智能网关家居设计[J].计算机应用,2010,30(9):2541-2544. [4] 李兰英,杨晨.基于S3C44BOX的智能家居终端控制系统的设计与实现[J].哈尔滨理工大学学报, 2007,12(3),85-86

[5] 莫满春.射频路由算法的研究与智能家居无线控制系统 的设计与实现[D],广州:中山大学,2008 [6] 臧大进,刘曾良.基于物联网的智能家居设计与实现[J].2010,31(11):38-39

[7] Yu M C,Shin D,Shin D K,et al.Fundamentals and design of smart home middleware[C]//CSO 2009:International Joint Conference on Computational Sciences sad Optimization.Washington.DC:IEEE.2009:647-650.

[8] Bluetooth SIG.Specification of the Bluetooth System,Volume .Core.Version 1.1[2005-07-15].

[9] Yeo L K, Weon C J.Remote--controlled Home Automation System Via Bluetooth Home Network[C]//Proc of SICE 2003 Annum Conference.Tokyo:Soc of Instrum and Control Eng 2008;2824-2829

[10] 陈桥云,贾金玲.基于智能手机与PC机的智能家居系统设计[J].电子设计工程,2009.17(9):25-27 [1l] 郭宏志.Android应用开发详解[M].北京:电子工业出版社,2010.

[12] 殷华英,杨红梅.使用Java编写基于C/S模式的阿络通信程序[J] .计算机信息与技术2006(6):23-24

32 / 55

致谢

首先我要感谢我的指导老师廖朝阳,在他的鼓励引导下我一步一步的学习和查阅网上和书籍的资料使我能够尽快的了解原来不熟悉的领域,掌握原来不知道的知识,我才会顺利的将我的论文完成。其次我要感谢我的父母,是他们在这段时间一直鼓励我,信任我,才给了我巨大的动力去学习,在我烦躁没有耐性继续学习的情况下他们帮助我排解了这种消极情绪。我感谢所有帮过我的老师们,经过你们的悉心指导和帮助我才能够顺利完成的论文。最后我还要谢谢我的同学们,因为通过平时和他们的交流和讨论才使我对知识的掌握和消化有了显著的提高。谢谢你们!

33 / 55

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务