河北工业大学硕士学位论文利用公用通信网络实现智能家居系统的远程监控姓名:谭涛申请学位级别:硕士专业:电路与系统指导教师:徐晓辉2010-12
河北工业大学硕士学位论文 利用公用通信网络实现智能家居系统的远程监控 摘 要 随着经济的发展与人民生活水平的提高,人们越来越关注居住环境的舒适和家庭的安全防范。信息技术的飞速发展和网络的快速普及,为智能家居降低了门槛。由于具有广阔 的应用价值和市场需求,目前智能家居远程监控系统的研究已经成为一个热点。 论文首先分析了国内外智能家居远程监控系统的发展现状,在此基础上设计了电话远程通信模块和智能家居主控制器来完成智能家居系统的远程监控。其中电话远程通信模块基于电话双音多频原理,利用PH8810芯片设计了电话远程通信电路,使用ISD2560芯片完成了语音电路的设计,实现了电话语音报警和接收电话远程控制信息的功能。通过串口与智能家居主控制器通信。设计了在ARM9平台嵌入式Linux系统下运行的智能家居主控制器。构建了基于ARM的嵌入式系统,完成了系统引导程序u-boot的移植,移植嵌入式Linux操作系统到开发平台,修改系统内核及驱动程序,构建了yaffs2根文件系统。构建了嵌入式图形系统,完成了智能家居主控制器图形菜单和嵌入式数据库的设计,实现了智能家居系统数据在数据库中快捷高效的管理。 测试结果表明利用公用电话网络作为通信手段,基于嵌入式技术实现的智能家居远程监控系统具有体积小、功耗低、可扩展性强的特点。智能家居主控制器能可视化操作,界面友好简单实用。 关键词:嵌入式Linux,QT/Embedded,SQlite,PH8810,ARM i
利用公用通信网络实现智能家居系统的远程监控 REMOTE MONITORING OF SMART HOME SYSTEM BASED ON PUBLIC COMMUNICATION NETWORK ABSTRACT With the development of economic and improving of people's living standards, people are More eoneerned about the eomfortof the living environment and these eurity of ,the rapid development of the information teehnology and the popularization of the network make inielligent home teehnology easie rand more popular;the study of intelligent home remote monitoring system has become a hot spot. Paper first analyzes the smart home and abroad Development of Remote Monitoring System, designed on this basis, telecommunications master controller module and the smart home smart home system to complete the remote control. Which telecommunications modules are based on telephone dual tone multi-frequency principle, the use of PH8810 chip design of the telecommunications circuit, complete with ISD2560 voice chip circuit design, implementation and receive telephone calls voice alarm function remote control home via the serial port with the host controller. Embedded in the ARM9 platform designed to run under Linux smart home system master controller. Construction of ARM-based embedded systems, completed a u-boot bootloader transplant, transplant to the development of embedded Linux operating system platform, modify the system kernel and drivers, built yaffs2 root file system. Construction of the embedded graphics systems, intelligent home completed graphic menu and the main controller embedded database design, implementation of the smart home system data in the database fast and efficient management. The results show that using the public telephone network as a means of communication, based on embedded technology in the smart home remote monitoring system has a small size, low power consumption, scalability, and strong features. Smart Home main controller can visually operate, user-friendly simple and practical. KEY WORDS:Embedded Linux,QT/Embedded,SQlite,PH8810,ARMii
河北工业大学硕士学位论文 第一章 绪论 §1-1 课题的背景和意义 近年来,智能化生活逐步走入人们的生活,完全颠覆了传统的生活理念,并带来了全新的生活方式。所谓的智能家居,就是以住宅为平台,通过一个以计算机为依托的集中的家居智能管理系统,将家中的照明、环境控制、网络和家电等各种设备,通过家庭网络连接到一起,从而实现家居安全舒适、信息交互与通信的功能,构筑未来自动化、人性化的理想生活。同普通的家居对比,智能家居不仅具有传统的居住功能,提供安全舒适的生活空间,智能家居使得原来的被动静止结构转变为具有能动智能的,保证家庭与外部保持通畅信息交流,优化人们的生活方式,甚至为各种能源支出节约资金[1]。 智能家居基本目标是将家庭中各种与家居相关的通信设备、电器和家庭安防设备,通过各种通信方式连接到一个智能家居系统上进行集中的或者异地的监视与控制管理[2]。随着城市的发展与人们生活节奏的加快,人们迫切需要一种智能的家庭监控系统,能可靠地进行日常安全防范工作,及时发现各种险 情并发出报警信息,以便将险情消灭在萌芽状态,再者,人们在消除了安全隐患的同时,需要一个舒适便捷的生活环境,这就对智能家居系统提出了更高的要求,人们希望在单位,在旅途中等,可以对自己的居家进行远程的监控。随着计算机技术、通信技术、互操作能力和布线标准的实现而不断改进,这一愿望将变为现实,只需通过电话,便能远程监控家庭安全、家电控制等问题。智能家居系统能够运用强大的通信网络直接管理家中的家电设备以及安防系统,先进的科技为消费者带来了最具前瞻性的舒适家居体验。例如安防系统可以自定义布防:如外出、在家、就寝以及自动报警灯光、电器、窗帘控制控制方式:本地控制、远程控制、网络控制;灯光情景控制模式:如全开全关模式、家庭影院模式、会客模式、聚餐模式、夜间模式、起早模式等;电器控制系统:如空调、电视机、影碟机、功放等;窗帘控制系统:如回家开门后,灯光打开、窗帘开启、空调开启等联动工作。温度控制:通过网关的温度检测实现对室内温度的控制。家庭娱乐:智能网关可直接登陆网络,浏览网页、支持SD卡、MMC卡实时浏览图片,实现电子像册功能;远程监控:用户使用远程监控的各种手段实现对家庭环境的实时监控。在第一时间得到家庭的情况,例如家庭出现的非法入侵,主人通过远程监控系统可以立即得到报警信息并及时做出应对措施。同样如果发生火灾煤气泄漏等同样会立即得到报警信息。主人可以随时远程查看家居内部的实时信息,并可以做出远程控制,在回家的路途中就可以远程打开家里的空调、热水器等设备,使生活变得更加的方便快捷。 随着电子信息技术的发展,智能家居远程监控系统成本的降低以及人们迫切需求,其必将得到快速的发展并进入千家万户,智能家居远程监控系统能在现实生活中具有十分重要的应用价值与研究价值。 §1-2 国内外研究现状 在国际上,智能家居系统是上个世纪80年代才发展起来的新技术。自1984年世界上第一幢智能建筑在美国哈特福德市出现后,“智能家居”逐步进入人们的视野,美国、加拿大和东南亚等经济发达的国家先后提出了各种智能家居方案,并在美国、德国、日本等国得到应用。随着家庭自动化技术的不断更新,智能技术已经逐渐地渗透到我们生活的各个方面。智能化技术为我们带来了便捷[3]。在国外比较著名的公司或技术有 AMX、Crestron、Life|ware、HAI、HomeLogic及mControl等。AMX技术结合了商业的可靠性和有品味的审美观,足以满足任何家庭的需要。在业内有着25年经验的AMX,公司的1
利用公用通信网络实现智能家居系统的远程监控 核心控制技术已经在世界上许多恶劣的环境下进行了测试,没有系统失败的案例。同样的技术为美国白宫、国家安全和美国航空暨太空总署所用。Crestron是世界领先的控制技术和自动化系统的制造厂商,改革技术并且改变了人们生活和工作的方式,提供了控制音频、视频、电脑、IP和环境的综合解决方案,Crestron的流线型技术,提高了人们在公共场所、会议室、教室、礼堂,还有家中的生活品质[4]。 在我国,随着计算机和信息家电的日益普及,人们对智能家居的了解和需求越来越多。国内很多知名公司也积极投身到智能家居行业,例如海尔U-home是全球智能化产品的研发制造基地,海尔U-home牵头主导的家庭多媒体网关标准2010年4月成为我国在该领域的第一个国际标准。推出了 “Casarte”品牌的多网融合智能化解决方案、单户型家庭智能化(智慧屋)等解决方案。深圳波创智能家居主要推出了波创智能社区系统、波创智能家居系统、波创智能照明系统、波创网络家电控制系统及波创远程监控系统等。在智能家居行业还有安居宝、索博、瑞讯科技及慧居智能等,纷纷推出了有各自技术特点的智能家居产品。由此可见,智能家居正日益进入人们的日常生活。如何建立一个效率高、成本低的智能家居系统,己经成为当今社会的热点问题。作为智能家居系统的最主要组成部分,对家居环境进行监控也获得了人们越来越多的重视。本课题就是要建立一个安全可靠的智能家居远程监控系统。既然是远程监控就得有通信媒介,远程监控系统有如下几种通信方式: 1.光纤通信 光纤通信是以光波作为信息载体,以光纤作为传输介质的先进的通信手段,可以传输数字信号,也可以传输模拟信号。具有通信容量大、传输距离远、保密性能好及抗电磁干扰等优点。 2.微波通信 微波通信工作在300MHz--300GHz频段,是利用分米波、厘米波和毫米波作为载波传输信号的通信方式。发信端需把所传信息转换成无线电信号,依靠无线电波在空间传播;收信端需把无线电信号还原出发信端所传信息。微波通信由于其频带宽、容量大、广泛用于各种电信业务的传送,如电话、电报、数据、传真等。 3.电力线载波通信 电力线载波通信(PLC-Power Line Carrier)是利用高压输电线作为传输通路的载波通信方式,用于电力系统的调度通信、远动、保护、生产指挥及各种信号传输。 4.GSM GSM(Global System for Mobile communication,全球移动通信系统)号称“全球通”, GSM网络的通信方式是时分多址,即每个话音信道分为8个时间片,能够同时通8路话音,提高了频率利用率。短消息则是在控制信道里传输的[5]。 5.GPRS GPRS(General Packet Radio Service)是通用无线分组业务的简称,是规范实现的内容之一,能提供比现有的GSM网更高的数据传输速率,是GSM网络向第三代移动通信演进的第一步。 6.公用电话网络 随着我国电话网络的飞速地发展,高速、可靠的公用电话网已经覆盖了绝大多数地区,为利用公用电话网远程监控技术的发展提供了很好硬件环境[6]。公话网远程监控与常规的远程监控方式相比,既不需要进行专门的布线,又不占用微波频率资源,同时可以充分利用现成的电话网络,可以实现省内或跨省远程监控,它是一种非常经济有效的通信方式,具有非常广阔的应用前景。 由于智能家居远程监控系统在没有视频传输的情况下需要传输的数据量不是很大,主要是智能家居内部环境参数与安防信息,没有涉及到视频等大量数据传输,同时有线与无线电话已经非常普及,基于这些考虑,本课题提出利用公用电话网络为媒介实现智能家居系统的远程监控。要实现对家庭中与家居相关的通信设备,家用电器以及安防设备连接到智能家居总控制器或者叫智能家居网关,它起到对内集中监测控制智能家居各部分设备对外通过电话网络实现对外数据传输的功能。综合考虑智能家居主控制2
河北工业大学硕士学位论文 器在其性能、功耗、体积及成本等方面的要求,我们选用了嵌入式平台来实现智能家居主控制器系统。嵌入式技术是当今较为热门的技术之一,基于ARM技术知识产权IP核的ARM处理器的嵌入式应用已经遍布人们的日常生活,被广泛应用在消费电子、工业生产、信息通信、网络传输等方面。ARM处理器以其高性能、低功耗、成本低等特点正在逐步融入到生活的诸多领域。基于当前智能家居远程监控的需求及ARM处理器的特点构建了基于ARM处理器的智能家居远程监控系统,具有很大的实用意义。 §1-3 研究内容及章节安排 本课题运用嵌入式技术设计一个基于ARM处理器的智能家居主控制器,利用公用电话网络实现远程通信。主要研究内容包括如下几方面: 1.设计电话远程通信模块:基于电话双音多频原理实现电话网络的远程通信,完成电话远程通信模块的软硬件设计,在实现电话语音报警的同时实现智能家居系统的远程控制。 2.构建基于ARM的嵌入式系统:要发挥ARM处理器的强大功能需要选用合适的嵌入式操作系统,本文选用嵌入式Linux平台,完成嵌入式交叉编译环境的搭建、系统引导程序u-boot的配置和移植、Linux操作系统内核的移植、根文件系统的配置移植,嵌入式数据库的设计、图形界面系统的设计以及最终的用户端测试等。 3.设计用户应用程序:在嵌入式操作系统中,最终的功能是通过编写上层应用程序来实现的。编写电话监控和智能家居主控制器应用程序的设计。 具体章节安排如下: 第一章 绪论:介绍了智能家居课题研究背景和意义、发展过程、现状以及发展趋势。 第二章 嵌入式系统与电话双音多频技术介绍:对电话双音多频原理作了介绍,对嵌入式系统的概念、特征和发展趋势,系统组成,应用领域做了介绍。又分别介绍了嵌入式处理器和嵌入式软件,以及嵌入式Linux操作系统。 第三章 系统总体设计:论述了嵌入式智能家居远程监控系统的总体设计方案,分别介绍了系统的需求分析,系统的硬件实现。 第四章 嵌入式系统构建:完成开发环境的建立、系统引导、操作系统、根文件系统及设备驱动的配置移植。 第五章 系统应用实现:主要包括电话远程监控的实现、串口通信的实现、图形界面系统的应用以及嵌入式数据库在系统中的应用。 第六章 结论:对课题作出总结及展望。 3
利用公用通信网络实现智能家居系统的远程监控 第二章 系统主要技术介绍 §2-1 电话双音多频技术 由于公用电话网络的大面积覆盖和高度的可靠性,利用公用电话网络来进行远程控制的技术和产品也大量的涌现出来,如远程智能家居遥控器,通过它可以在任何地方使用固定电话或移动电话对家庭电器进行远程控制。在家庭防盗产品方面,它可以使得用户在远离家庭的时候密切关注家里的安全情况,如果出现安全问题就能够及时地做出反应。同时,电话的远程测控也可广泛地应用于工业现场,如运输、公安、消防、电话服务监控等诸多领域,这些产品作为终端连接到PSTN上,终端之间的所有控制信号和通讯数据均通过PSTN来进行传输,以此来实现远程控制的功能。 电话远程控制系统(ITRCS),是以CCITT及我国标准共同制定。采用程控交换信令(DTMF双音多频信号)作为系统的控制命令。以PLMN与PSTN通信网作为传输介质,使用户可以在远程通过固定电话或移动电话发送DTMF双音多频信号,实现对电器设备的远程控制[7]。随着我国信息事业的持续快速发展,通信基础设施日臻完善。固定电话、移动电话用总量已经非常的庞大。利用电话远程监控系统,既可以节约投资,又便于推广而且经济实用、容易实现。电话采取双工通信,操作者可以通过各种提示音即时了解受控对象的有关信息,并通过电话随时随地进行控制。目前基于公用电话网络远程监控技术普遍采用的是基于DTMF信号来进行终端之间的通讯[8]。双音多频(DTMF)是指用两个特定的单音信号的组合来代表数字或功能。两个单音频的频率不同,所代表的数字和功能也不同。如双音多频编码表所示: 表 双音多频编码表 Table DTMF encoding table 高频群 低频群1209Hz 1336Hz 1477Hz 1633Hz 697Hz123A 770Hz 4 5 6 B 852Hz789C 947Hz * 0 # D 双音多频拨号方式中有16个按键,对应有8种不同的单音信号,因其采用的频率有8种,所以称为多频,如表 DTMF编码表所示从中任意抽出2种进行组合,又称为8中取2的编码方法,就是两个正弦波信号的叠加,我们选定两个频率f1和f2得到DTMF信号的数学公式如式2-1: y=Asin(2pf1t)+Asin(2pf2t) (2-1) 把这8种频率分成两个组,即高频组和低频组,其中低频组有4种频率:679MHz,770MHz,852MHz,947MHz,高频组也有4种频率:1209MHz,1336MHz,1477MHz,1633MHz。分别从高频组和低频组中任意各抽出一种频率进行组合,共有16种不同的组合,每一个键值对应一种低音频和高音频的正弦波之和,代表16种不同的数字或功能[9]。用双音多频拨号方式传递音频信号,传播速度快,抗干扰能力强。双音多频信号解码是控制系统的主要组成部分,正确的解码出交换机通过电话线发送过来的双音4
河北工业大学硕士学位论文 多频信号是控制系统的关键。DTMF远程通信系统主要由处理器,DTMF信号编码器、DTMF解码器、发射电路和接收电路构成。当要发送数据时,处理器先将要发送的数据转换为DTMF编码信号,然后送给DTMF信号发生器,当DTMF信号发生器接收到符合工作要求的编码信号后就由内部电路将其转换为DTMF信号并将其送入发送电路,发送电路则将系统要远程传送的数据以DTMF信号的形式传送给接收电路,当接收电路接到DTMF信号后就将其传送给DTMF解码器,由解码器将DTMF信号转换为相应的数字信号并送入处理器并由其转换为系统需要的原始数据。使用电话专用的双音频编解码芯片进行输入双音频信号的编解码,是比较常用的一种方法。目前市场上DTMF编解码芯片主要有MT8880、PH8809、PH8810等。基于芯片的性能、集成度以及易用性等方面考虑我们选用成都宝嘉公司的PH8810模块。 图 PH8810 模块结构图 Fig PH8810 Block diagram 电话远程监控部分采用PH8810模块实现DTMF信号编解码与收发的功能。如图 所示PH8810 模拟电话接口模块是在PH8809的基础上增加了DTMF 接收(HT9170)和发射(HT9200)功能。更方便地与控制器相连接,使得控制操作更灵活;CPU只需对HT9170和HT9200 的操作就可以实现对DTMF 收发。模块中还包括自动增益调节电路、掉线检测电路、振铃检测电路等,集成度更高,对系统的稳定性有很大的帮助。另外模块可以直接连接语音电路,语音信号直接送入PH8810模块,实现播放语音报警信息、语音提示等功能。独特的低功耗电路设计,免除器件发热、负荷过重,延长了器件的使用寿命。 §2-2 嵌入式系统介绍 2-2-1 嵌入式系统的定义和特点 嵌入式系统的定义为:以应用为中心,以计算机技术为基础,软硬件可裁减、适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它主要的特点是嵌入和专用。嵌入式系统的特点为: 1.软件、硬件可裁减。嵌入式设备选材多样化,软件、硬件可裁剪,当不需要某项功能时可以裁剪相关的软硬件。 2.对功能、体积、功耗、成本等有严格要求。当硬件选定以后,处理器的性能已经被限定,需要通过驱动程序和应用程序配合,以最大化发挥硬件的性能。 本课题需要实现可视化操作,需要运行一个图形系统实现人机交互,同时智能家居主控制器要对家5
利用公用通信网络实现智能家居系统的远程监控 居内设备集中控制,为了更好的管理系统数据设计了数据库系统,需要一个功能比较强大的处理器,基于以上需求,选择了ARM9平台的嵌入式系统来构建智能家居主控制器。 2-2-2 嵌入式处理器选型及介绍 目前嵌入式系统的硬件平台有很多种,包括单片机、ARM、MIPS、PPC等,但是ARM处理器已经占据了近70%的市场份额[10]。ARM处理器的文档非常丰富,各类嵌入式软件往往首选支持ARM处理器。基于ARM处理器以其高速度、低功耗、价格低等优点在下列领域得到广泛的应用: 1.在海量存储、汽车电子、工业控制和网络应用等领域提供实时嵌入式应用。 2.安全系统,比如信用卡、SIM卡等。 3.为无线通信、消费电子、成像设备等产品提供可运行于复杂操作系统的开放应用平台[11]。 本课题选用的是基于ARMv4T体系结构的S3C2440处理器,该处理器增加了16位Thumb指令集,可以产生更紧凑的代码,同时具备32位代码的优点,ARM9与ARM7相比增加了MMU和带有独立的16kB数据Cache和16kB指令Cache,执行效率有了很大的提高[12]。 图 S3C2440 硬件资源框图 Fig S3C2440A Block Diagram 6
河北工业大学硕士学位论文 S3C2440片内资源如图所示:其中主要包括外部存储器控制单元、LCD控制器、4通道的DMA、3通道UART、2通道SPI、1通道2IC总线接口、1通道2IS总线音频编解码器接口、AC97解码器接口,兼容SD主接口协议、2端口USB主机和1端口USB设备、4通道PWM定时器和1通道内部定时器、看门狗定时器、8通道10比特的ADC和触摸屏接口、130个通用I/O口和24通道外部中断源。HCLK是为AHB总线提供的时钟信号,主要用于高速外设,比如内存控制器、中断控制器及LCD控制器、DMA以及USB host等。低速外设通过APB BUS连接,比如UART、2IC、2IS、ADC、看门狗以及音频等[13]。其中本课题用到的主要是外部存储控制单元、UART端口、主机USB端口等,S3C2440提供的端口完全能满足系统的设计要求。 2-2-3 嵌入式系统外围硬件 嵌入式系统中除了微处理器以外还需要各种与真实环境交互的设备,如图所示系统中包括输出设备、输入设备及存储设备等[14]。目前嵌入式外围设备一般包括用来运行系统的SDRAM,用来存储操作系统内核与应用程序等的Nand Flash,用来进行人机交互的LCD触摸屏,实现上网功能的网卡芯片以及声卡芯片USDA1341等。还包括扩展出来的各种功能接口,比如USB、SD、JTAG.、2IC等以及电源变换电路与时钟电路等。嵌入式系统的外围硬件可以根据应用的具体情况进行适当的修改,比如不需要LCD显示图像,那么就可以把LCD模块及其相关的电路去掉,以达到简单适用的目的。 图 系统外围硬件 Fig System peripheral hardware 2-2-4 嵌入式系统软件 嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及应用程序四个部分组成。嵌入式软件层次结构如图 所示,系统硬件层作为嵌入式系统的基础,它与系统软件的连接与沟通是通过系统引导层实现的,系统引导层是系统硬件与系统软件的桥梁起到一个纽带的作用,常作为系统引导程序的有VIVI,u-boot等,其中u-boot支持的处理器体系最为广泛,本课题就是选用的u-boot做为系统引导程序。有了系统引导层就可以引导启动嵌入式操作系统,嵌入式操作系统主要承担着整个系统对硬件的管理、进程的调度、并发控制各执行任务,可灵活通过模块来添加和删除系统功能[15]。随着互联网技术的发展,嵌入式操作系统的功能也不断的丰富。嵌入式操作系统在实时性,硬件相互依赖性,软件固化和应用专用性方面具有突出特点。与普通操作系统相比嵌入式操作系统具有硬件具有良好可移7
利用公用通信网络实现智能家居系统的远程监控 植性、体系结构具有模块化、开放、可伸缩等特性,实时性很强,可用在设备控制中,接口统一,包含 图 软件层次结构图 Fig Software hierarchy diagram 各种驱动所需的接口,网络功能强大,支持网络协议丰富等特点[16]。在嵌入式系统中一些常用的操作系统有Linux,WINCE、VxWorks、uC/OS-Ⅱ等,其中Linux源码开放,软件和驱动程序支持丰富,驱动程序协议栈完善,应用广泛,它与一般商业嵌入式实时操作系统比较具有没有版权费及购买费用、源代码开放容易定制、稳定性强、产品开发周期短等特点[17]。 在嵌入式操作系统层之上是嵌入式支撑软件层,其中本课题涉及的主要是嵌入式QT/Embedded图形系统、嵌入式SQlite数据库、通信协议等。这些支撑层的软件主要为嵌入式应用层软层提供服务,应用软件层一般为用户的应用程序,一般为根据用户需要自行开发的应用程序。 8
河北工业大学硕士学位论文 第三章 系统功能与硬件设计 一般智能家居系统的设计原则有如下几点: 1.实用性、使用的智能化和方便性,要保证系统有用、容易上手操作。 2.可靠安全性,系统要安全可靠杜绝因为系统缺陷造成安全隐患。 3.同时各部分都要考虑系统可扩展性与兼容性,甚至是设备的替换性,当某种设备无法满足扩展功能时候,能有其他设备替换实现[18]。 §3-1 系统功能设计 总体功能设计:根据课题的要求,总体设计如图所示,包括电话远程监控模块,安防监测设备模块,家电控制模块等。 本课题主要研究内容门,窗磁设备局域网人体热释电传感器系电话接口统安通防智能家居主控制器信设玻璃破碎传感器总备公用电话网络线煤气泄露传感器家电控制灯光控制烟雾传感器电空视热不智调功水可可能放器调调开等灯光关具灯插具座等 图 智能家居系统总体结构图 Fig Smart home overall structure 本文的主要研究内容为智能家居主控制器的设计和电话远程通信两大部分。智能家居主控制器是基9
利用公用通信网络实现智能家居系统的远程监控 于ARM平台设计,是整个智能家居系统的神经中枢。电话远程通信模块在安防设备返回报警信息、事故信息之后拨打预先存储的电话号码,用户可根据需求自行设定报警号码。同时可以接收远程的控制信息,实现远程控制。系统总线选用RS485总线,其优点是使用简便、传输距离远、抗干扰能力比较强。安防部分主要选用人体热释电、门窗磁及一些气体传感器[19]。如果发生入侵或者有毒气体泄漏那么会在第一时间发出报警信息。家电控制模块主要选取的是空调和热水器等电器。可以根据系统的设定开启和关闭,既方便了生活又节约了能源。 因为主控制器是运行于Arm-Linux平台的,所以在实现各部分功能之前必须在ARM平台移植嵌入式Linux系统。在系统搭建完之后还需要各种应用软件的移植工作。比如要实现主控制器的可视化操作必须移植一个图形界面系统,要实现系统数据高效的管理就需要一个嵌入式数据库系统。 §3-2 系统硬件实现 在系统总体功能设计完成之后就要根据需要对软硬件进行选型,既要考虑到系统功能又要考虑到成本以及实现难易程度与系统的兼容性与可扩展性。 3-2-1 系统硬件选型及硬件平台介绍 智能家居主控制器是基于ARM9平台的嵌入式Linux操作系统实现的。下面是主控制器硬资源介绍。硬件系统总体结构图如图所示,SDRAM内存由两片HY57V561620存储器搭建成32位数据总线宽度的32MB×2的可用空间[20]。FLASH存储器是由K9F1G08芯片构成的128MB的Nand Flash。网卡控制器采用的是DM9000芯片。平台接口部分主要包括连接1个100M以太网的RJ-45接口,一个USB主口,一个USB从口及3个串行口等,下边介绍各部分的硬件电路图。 图 硬件系统框图 Fig Block diagram of hardware system 3-2-2 SDRAM存储系统 开发平台使用了两片HY57V561620FTPS的SDRAM芯片。该SDRAM芯片内部由4块BANK组成,每块BANK的大小为4M×16bit,总的存储空间为32MB,适合需要大内存和高带宽的内存应用。该芯片提供了与时钟上升沿完全同步的操作。所有的输入输出都与时钟输入的上升沿同步。该芯片最高支持16位数据宽度,但可以通过与S3C2440的WBE[3:0]位控制使用两片芯片来组成32位数据宽度、64MB存储空间的SDRAM存储器,其中WBE是写字节允许位[21]。nGCS6为片选信号,物理起始地址10
河北工业大学硕士学位论文 为0x30000000,原理图如图所示。 LADDR223A0DQ02LDATA0LADDR223LDATA16LADDR3U6LDATA1LADDR3A0DQ0224LDATA17LADDR4A1DQ1424LDATA2LADDR4A1U7DQ1425A2DQ2525LDATA18LADDR5LDATA3LADDR5A2DQ2526LDATA19LADDR6A3DQ3726LDATA4A3DQ3729A4DQ48LADDR629LADDR7A4DQ48LDATA2030A5DQ510LDATA5LADDR730LDATA21LADDR8LDATA6A5DQ51031A6DQ611LADDR831LADDR9A6DQ611LDATA2232A7DQ713LDATA7LADDR932LDATA23LADDRLDATA8A7DQ7131033A8DQ842LADDR1033LADDRA8DQ842LDATA241134A9DQ944LDATA9LADDR1134LDATA25LADDRLDATAA9DQ9441222ADQ4510LADDR1222LDATA26LADDR1010LDATAA10DQ45101335ADQ4711LADDR1335LDATA27LADDR1111LDATAA11DQ47111436A12LADDR1412DQ483612A12DQ48LDATA28LDATA1213LDATA29LADDRDQ5013DQ50132420BA0DQ51LDATA14LADDR2420LDATA30LADDR14LDATABA0DQ51142521BA1DQ5315LADDR2521LDATA3115BA1DQ5315LnWBE015LDQMnSCS19LnSCS0LnWBE215LDQMnSCS19LnSCS0LnWBE139UDQM18nSRASLnSRASLnWBE339UDQM18nSRASLnSRASLnSCASLnSCASLSCKEnSCAS17LnSCAS1737SCKE16nWEnWELSCKE37SCKE16nWELnWELSCLK038SCLKVDD33VLSCLK138SCLKVDD33VVDD01VDD0128VSS0VDD11428VSS0VDD11441VSS1VDD22741VSS1VDD22754VSS254VSS2VDDQ03VDDQ036VSSQ0VDDQ196VSSQ0VDDQ1912VSSQ1VDDQ24312VSSQ1VDDQ24346VSSQ2VDDQ34946VSSQ2VDDQ34952VSSQ352VSSQ3 图 SDRAM存储系统 Fig Storage system of SDRAM 3-2-3 NAND FLASH存储器 目前Flash主要有两种形式Nor Flash和Nand Flash。Nand Flash由于没有采取内存的随机读取技术,不能随机读取而是以一次读取一块的形式来进行。本平台选用了三星公司存储容量为128M的K9F1G08芯片。每页大小为(2k+64)Byte,S3C2440与Nand Flash的连线比较少,8个I/O引脚(I/O0~I/O7)、5个使能信号(nWE、ALE、CLE、nCE、nRE)、1个状态引脚(R/B)、1个写保护引脚(nWP)[22]。地址、数据和命令都是在这些信号的配合下,通过8个I/O引脚传输。写数据、地址、命令时nCE、nWE信号为低电平,在nWE上升沿被锁存。命令锁存使能信号CLE和地址锁存信号ALE用来区分I/O引脚上传输的是地址还是命令。Nand Flash存储器的连接图如图所示。 VDD33VU2K9F1G08LDATA7R6I/O744I/O643LDATA610KLDATA5/O542RInB7R/BI/O441LDATA4nFCE9CCELDATA3I/O332LE16CLEI/O231LDATA2ALE17ALELDATA1nFWEI/O13018WE9I/ 图 Nand Flash存储器电路简图 Fig Circuit diagram of Nand Flash 11
利用公用通信网络实现智能家居系统的远程监控 3-2-4 USB主口 USB是英文Universal Serial BUS的缩写,中文含义是“通用串行总线[23]”。是一种应用在PC领域的接口技术。S3C2440处理器集成了USB模块,根据系统设计要求需要将系统数据通过USB接口导出,所以需要使用一个USB主口。USB接口原理图如图所示。 VDD5VR2715KUSB-HOST12R23221DN0USB_D-VBUS212DP0USB_D+D-213D+4RGND2422R2815K12USB Port A type 图 USB主口电路简图 Fig Circuit diagram of USB host 3-2-5 LCD 接口 S3C2440中LCD控制器被用来向LCD传输图像数据,并提供必要的控制信号,比如VFRAME、VLINE、VCLK、VM等[24]。如图所示,信号线包括垂直同步信号、水平同步信号、像素时钟信号、数据信号、电源开关信号等。本课题要实现可视化操作,所以需要连接显示屏,我们选取的是TFT液晶屏,连接到ARM处理器的LCD控制器接口,从而实现了图形系统的显示。 3VDD5V21VDD33VCON3LCDVDDLCD1VD02VDDLCD3VD24VD15VD46VD37VD68VD59GND10VD711VD912VD813VD14VD101115VD16VD121317VD18VD141519VD20GND1621VD22VD171823VD24VD192025VD26VD212227GND28VD2329G30LCD_PWRPB131VM32nRESET33V34VFRAMELINE35TSXM36VCLK37TSYM38TSXP39GND40TSYP41 图 LCD接口电路图 Fig LCD interface circuit diagram 3-2-6 电话通信电路图 电话远程通信部分包含以下组成部分: 1.电话通信控制芯片:用于电话通信系统部分的总体控制。采用ATMEL公司的AT89S52做主控芯片,既可以完成预定设计功能又可以节约成本。 2.电话接口芯片:用于系统与电话线间的数据交换。采用宝嘉公司的PH8810芯片。该芯片具有12
河北工业大学硕士学位论文 集成度高,使用简单,功耗低等特点。 3.语音录放芯片:存储用于人工提示的语音信息。采用ISD公司的ISD2560芯片。该芯片便于处理器操作,而且录制音频时间长,品质高。 R110KVCCC3VCCR210KR310K104RP1U2ISD256091A0/M0VCCD2882A0/M1P/R2773VCCA0/M2XCLK2664A0/M3EOM25155A0/M4PD24+C246A0/M5CE2337A0/M6OVF2216V OUT9A8ANA + INMIC REF1812VSSDMIC17C613R710KVSSAVCCA161415C5104SP+SP-VCCU1D0139D1P10P00238D2P11P01337D3P12P02436U3PH8810P13P035351P14P04GNDVCC406342P15P05PhoneANC397333P16P06PhoneBDXC388324P17P07SWNC375NCNC3613216INT1P20NCTEST3512227INT0L2P21JCTEST34238L1P22VCCTEST3315T1249P23RINGGND3214T02510P24OUT4IN4312611P25OUT3IN330RW231EA/VP2712P26OUT2IN2292813P27OUT1IN12819X114NCNC27DINDUCTOR18X215CENC2616DATANC259RESETRXD1017CLKD224D2TXD1118VCCD123D117RDALE30D319D0/ 250VROVCC8J430V30VJP12REB7R111K113DEA6224DIGND52323R121K4DIANHUA 图 电话通信模块电路 Fig Telephone communication module circuit 如图所示电话通信模块的控制器为AT89S52,它通过RS-232总线连接到智能家居主控制器,它做为系统的一个组成部分,负责控制PH8810模块的摘机、挂机、振铃检测、以及与智能家居主控制器的通信。其中AT24C64A芯片负责存储智能家居主控制器设定的密码、报警电话号码等信息。语音报警与语音提示是通过ISD2560芯片实现,AT89S52控制语音芯片的播放,音频信号直接连接到PH8810模块的音频输入接口,实现语音功能。其中PH8810的PhoneA与PhoneB连接电话线接口JP1;自动摘挂机控制端SW接,高电平摘机低电平挂机;振铃输出RING接高电平表无振铃低电平表有振铃;接HT9200片选端,接数据端DATA;~接HT9170数据端D0~D3,HT9170解码DTMF所得到的数据通过D0~D3发送给控制器;28引脚IN1接外部语音信号,语音信息就通过IN1传入PH8810,经过内部自动增益调节发送出去。语音信息由ISD2560提供,其中R/B为高电平时为放音状态,其中放音段的起始地址由A0~A9控制,放音遇到EOM标志则自动停止。 13
利用公用通信网络实现智能家居系统的远程监控 第四章 软件系统的搭建 §4-1 系统软件选型 软件部分采取交叉编译方式:开发环境选取的是VM虚拟机+fedora9Linux系统+编译器+qtopia图形界面开发软件。构建主控制器系统所需移植开发的一些主要软件如表所示。 表 系统及应用支撑层软件 Tab System and application software support layer 项目名称 选用的软件及其版本 bootloader 选用的是u-boot-2009-11版本 Linux内核 选用内核,经修改配置裁剪 文件系统 选用YAFFS2可更好的支持大页nandflash 根文件系统 选用了 版本,配置后可生成根文件系统所需文件 图形界面系统 采用的是版本,包含丰富的应用程序集,可以选取应用 嵌入式数据库 选用的是嵌入式SQlite数据库,版本为. u-boot是专门针对嵌入式Linux系统设计的开源bootloader,其任务是初始化处理器及外设硬件资源并引导操作系统。内核为,这版提供了更多的驱动程序以及API,调用起来更加的方便。在内核中要添加对帧缓存frambuffer的支持,图形系统需要它的支持。文件系统使用Yaffs2,以配合2K每页的大页存储器。根文件系统选用,配置编译完之后会生成bin和sbin目录以及linuxrc文件,从而系统就具备了系统以及文件管理的相关命令。SQLite是面向嵌入式系统的数据库,编译完成后非常小只有几百k,支持2T的数据记录。在嵌入式系统中可以有力的减小应用程序管理数据的开销。Qtopia是专门针对嵌入式linux系统消费电子设备所研发的一套应用程序包和开发库。Qtopia的信号与插槽机制提供了对象间的通信机制。窗口在事件发生后会激发信号,程序员通过建立一个函数(称作插槽),然后调用connect()函数把这个插槽和一个信号连接起来,这样就完成了一个事件和响应代码的连接。可以一个信号对应多个插槽函数,也可以一个槽函数对应多个信号。 §4-2 开发环境的建立 一般嵌入式系统资源有限,不具备本地开发并执行的工具和调试设备,所以通常对嵌入式开发采取交叉编译模式。最初的嵌入式设备是一个空白的系统,需要主机为它构建基本的软件系统,并烧写到设备中。在主机上编辑、编译软件,然后在目标板上运行验证。主机指PC目标机指嵌入式设备。一般在主机上编译bootloader,然后用JTAG烧入单板。在主机上配置编译嵌入式Linux内核,通过bootloader烧入单板。在主机上编译各种应用程序经过验证后再烧写。主机与目标机的连接方式如图所示。 14
河北工业大学硕士学位论文 图 主机与目标机连接方式 Host connection with the target 软件开发环境是虚拟机下安装fedora9版本的Linux系统,编译器选用编译器。虚拟机与Linux的安装很简单,安装Linux时要把必要的安装包选上,虚拟机工具的安装比较繁琐,在客户机是Linux的情况下安装VMware Tools具体步骤如下: 首先我们需要安装与系统内核配套的开发包,你可以用如下命令来确保相关的开发包真的没有安装,执行如下命令: rpm -q kernel-devel,如果没有安装,将会提示:package kernel-devel is not installed。下载,然后运行如下语句进行安装: rpm -ivh 内核安装完毕后重启会出现鼠标定位不准的问题,经检查最后查到是在装载xorg-x11-drv-vmmouse驱动时的一个bug,在客户虚拟机的显示中,鼠标位置可能不正确。直到被更新前,在客户机中添加Option NoAutoAddDevices到/etc/X11/文件的ServerFlags节中。创建这个节: Section "ServerFlags" Option "NoAutoAddDevices" EndSection 保存一下,然后重启,鼠标定位不准的问题就解决了。接下来进行编译器的安装,由于开发平台提供的工具中包含了交叉编译工具,所以直接采用了arm-linux-gcc交叉编译工具。将压缩包放入工作目录work下,使用解压缩命令解压并安装: tar xzvf arm-linux-gcc-C 命令后边“-C”选项是重新指定安装目录,这样就会使交叉编译工具安装到根目录下的默认安装路径下。当安装全部结束时,可以修改/etc/profile文件,在里边添加新的PATH路径使命令解析器可以找到安装交叉编译工具所在路径。添加PATH路径使用如下方式: PATH = $(PATH):/usr/local/arm/ 重新启动系统,测试命令arm-linux-gcc --help,会打印出arm-linux-gcc的相关版本信息,这样表明命令解析器已经支持了该交叉编译工具,命令是可用的,至此开发环境建立完毕。 15
利用公用通信网络实现智能家居系统的远程监控 §4-3 引导程序部分 对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫作bootloader。bootloader的主要任务是初始化处理器及外设的硬件资源,sdram控制器,为主程序提供运行环境,配置串口提供交互终端,配置网络接口传输镜像文件,执行系统自检报告检测结果[25]。最主要的是引导操作系统。u-boot一个开源的专门针对嵌入式Linux 系统设计的最流行bootloader。u-boot具有强大的网络功能,能利用tftp工具将内核下载到内存通过网络启动。还可以通过nandwrite命令将内核写入NandFlash,并从NandFlash启动系统。下图是u-boot中各目录间的层次结构。u-boot根目录下共有26个子目录,可以划分为四类。 1.平台相关的和开发板相关的,如与开发板相关的board目录,cpu目录对应不同的cpu比如arm920t等, lib_xxx为某一构架下的通用文件。 2.通用的设备驱动程序,如derivers为各类具体设备的驱动程序,net文件夹为各种网络协议,rtc为实时时钟的驱动。 3.通用的函数,lib_generic为通用的库函数,common为通用的函数对下一层驱动函数进一步封装。 4.doc ,examples,tools 为一些开发文档,测试程序以及工具。 嵌入式系统硬件多种多样,硬件资源差异很大,制作一个统一的引导程序是不可能实现的,要根据硬件配置移植相应的引导程序。bootloader不仅依赖于CPU的体系结构还依赖于嵌入式系统板级设备硬件资源。对于两块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的bootloader程序也能运行在另一块板子上,一般也都需要修改bootloader的源程序。下面说明一下移植u-boot到本系统平台的的主要步骤与方法: 本文选用的是目前版本比较新的u-boot-2009-11。u-boot主要采用GCC和Makefile组织编译的。顶层目录下的Makefile首先设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成u-boot映像。 移植u-boot工作就是添加与开发板相关的文件、配置选项,然后配置编译。开发移植u-boot前,要熟悉硬件电路板和处理器。确认u-boot是否已经支持新开发板的处理器和I/O设备,比较出硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次是处理器体系结构相同,然后是以太网等外围接口。 首先打开u-boot主目录下的Makefile,找到smdk2410_config,在其下,仿照它的格式加入如下语句 tt2440_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t tt2440 samsung s3c24x0 其中: Arm:CPU的架构(ARCH)为ARM; arm920t::CPU的类型(CPU),其对应于cpu/arm920t子目录; tt2440:开发板的型号(BOARD),对应于board/tt2440目录; Samsng:开发者/或经销商; s3c24x0:片上系统(SOC); 此步是为了加入自已的开发板,也可以在现有开发板基础上修改。下面一步就是要指定编译器,我们把编译器指定为arm-Linux-gcc,修改主Makefile第160行,CROSS_COMPILE = arm-Linux- 。在/board子目录中建立自己的开发板tt2440目录,结构为/board/Samsung/tt2440。如果开发者/经销商(vender)不为NULL,则目录结构为/board/verder_name/tt2440,否则编译会出错。然后,将smdk2410目录下的文件考入此目录中,并将其中的改名为。同时还得修改16
河北工业大学硕士学位论文 board/Samsung/tt2440/Makefile文件。将 和 添加到文件依赖关系之中: COBJS := SOBJS := 在include/configs/中建立配置头文件。将 复制一份在相同目录下,并改名为。版本 依然没有提供对S3C2440的支持,需要加入S3C2440相关的代码,使得u-boot可以在s3c2440上正常工作,注意涉及以下几个关键文件的修改,为了方便叙述,对于其他功能支持的修改在这样一起描述。 对/cpu/arm920t/的修改,以达到如下目的: 1:CPU进入管理模式; 2:关看门狗和中断; 3:CPU的初始化; 4:堆栈设置; 5:时钟的初始化; board/samsung/tt2440/加入S3C2440内存控制寄存器的定义 board/samsung/tt2440/修改GPIO,PLL的设置 include/configs/(设定环境变量) 以下文件主要加入CONFIG_S3C2440宏定义,使得u-boot支持s3c2440芯片。 /inlcude/ cpu/arm920t/s3c24x0/ /cpu/arm920t/s3c24x0/ cpu/arm920t/s3c24x0/ cpu/arm920t/s3c24x0/ /cpu/arm920t/s3c24x0/ cpu/arm920t/s3c24x0/ drivers/usb/ drivers/rtc/ /lib_arm/ 6.给u-boot移植dm9000的网卡驱动。u-boot自带网卡驱动,所以只要做些设置即可。修改/include/configs/ 主要是加入dm9000定义,加入ping命令定义。 7.修改u-boot的启动方式改写为从NandFlash启动。在/cpu/arm920t/加入S3C2440 nand boot相关代码。同时,在/board/samsung/ tt2440 /中,根据开发板电路,对内存相关的几个寄存器定义进行调整。 以上是移植u-boot到我们的tt2440平台的主要步骤,在做完上述修改之后在u-boot的主文件夹目录下执行make tt2440_menuconfig来更改相应的配置文件,然后执行make命令生成最终的二进制文件。 u-boot的启动过程首先是硬件设备的初始化设置cpu工作模式,mmu,cache,设置时钟频率,关闭看门狗。为加载bootloader的C语言阶段准备RAM空间,空间准备完毕把第二阶段的代码复制到准备好的RAM空间之中,设置好栈然后跳转到C代码入口点,执行C代码部分。在C代码部分主要是初始化本阶段需要的硬件设备设置串口等。 检测系统内存映像由dram_init函数指定内存的大小与起始地址,设置内核启动参数。 17
利用公用通信网络实现智能家居系统的远程监控 §4-4 嵌入式Linux操作系统的移植 Linux操作系统是运行在硬件系统上的软件系统,它具有进程调度管理,内存管理,虚拟文件系统,网络接口和进程间通信5大功能。在此选取 版本的内核,经过移植工作后做为我们的嵌入式操作系统。解压完毕后可以看到如下的目录,具体的目录名称与功能如表所示: 表 内核核心目录与功能 Table Kernel and function of the core directory 目录名称 目录功能 arch 和体系结构相关的所有核心代码,每一个子目录代表一种体系结构 include 包括编译内核所需要的大部分头文件 init 包含内核的初始化代码,有和两个文件 mm 包含所有内存管理代码 drivers 包含系统中所有的设备驱动程序 ipc 包含核心进程间的通信代码 fs 存放Linux支持的文件系统代码,不同的文件系统有不同的子目录。 kernel 包含内核管理的核心代码 net 内核的网络部分代码,每个子目录对应于网络的一个方面 lib 包含核心的库代码 scripts 包含用于配置核心的脚本文件 Documents 一些文档,是对应于每个目录作用的具体说明 4-4-1 Linux系统移植 通常这些目录里还包括多层子目录,里面包含源代码、Makefile以及配置文件,Linux内核源码树种包含两大部分。第一部分是arch子目录,它包含了不同类型处理器体系结构及支持文件。第二大部分是drivers 子目录,这里边包含了USB控制器、以太网卡以及Linux内核所支持的硬件设备的驱动程序的源代码[26]。在进行系统配置之前先需要指定系统平台、分区以及时钟频率等,具体修改步骤如下: 首先进入的主Makefile,指定为arm平台,指定arm-Linux-gcc为交叉编译工具。 ARCH ?= arm CROSS_COMPILE ?= arm-Linux- 修改机器码,保证u-boot 的机器ID与Linux内核的ID一致才可以引导内核。进入如下文件并修改。 # gedit arch/arm/tools/mach-types 将379行修改为: s3c2440 ARCH_S3C2440 S3C2440 1999 修改时钟频率修改如下文件,因为我们板子的晶振频率是12M的,所以把时钟频率改为12000000。 # gedit arch/arm/mach-s3c2440/ static void __init smdk2440_map_io(void) { s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc)); s3c24xx_init_clocks(12000000); s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs)); 18
河北工业大学硕士学位论文 } 修改Nand Flash分区,修改为3个分区分别为引导程序u-boot、内核分区kernel及文件系统root。3-7分区注释掉,不再使用。 # gedit arch/arm/plat-s3c24xx/ static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "uboot", .size = 0x00040000, .offset = 0, }, [1] = { .name = "kernel", .offset = 0x00050000, .size = 0x00200000, }, [2] = { .name = "root", .offset = 0x00250000, .size = 0x03dac000, } }; # make menuconfig 进入系统配置界面,配置内核: 机器类型只选三项:选择机器类型为SMDK2440,因为我们的硬件跟SMDK2440非常相似,所以选择SMDK2440。内核特性加上以下两项:使用带浮点功能的EABI编译器编译内核。 图 配置菜单主目录 图 选择CPU类型 19
利用公用通信网络实现智能家居系统的远程监控 图选择编译器 图 内核配置选项图 Fig Kernel configuration options map 编译内核 # make zImage 生成内核此时大部分硬件驱动还没加,并且也没有文件系统,因此还无法实现相应功能。通过mkimage这个工具(在u-boot代码的tools目录中)可以给zImage添加一个header,也就是使得通常编译的内核zImage添加一个数据头,把添加头后的image通常叫uImage,uImage是可以被U-boot直接引导的内核镜像。编译U-Boot成功后,在U-boot代码的tools目录中生成一些工具,比如mkimage。将它们复制到/usr/local/bin 目录下,就可以直接使用了[27]。现在我们编译内核需要用到mkimage来生成u-boot格式的内核映像文件uImage。复制完成后在终端输入命令"mkimage"并回车,显示关于mkimage的提示信息,表示你现在已经可以使用此命令了: Usage: mkimage -l image 在目录 mkimage -n '' -A arm -O Linux -T kernel -C none -a 0x31000000 -e 0x31000000 -d zImage 生成 U-Boot可以引导的内核,生成的文件名为 (也可以使用默认设置,在内核根目录下执行make uImage,生成默认的文件名为uImage)。生成的内核文件都在目录 0x31000000 命令下载到内存中,然后通过Bootm 0x31000000 命令执行内存中的文件,关于内核文件在NandFlash中的固化,等系统移植完调试完再继续完成,目前先在内存中运行。 4-4-2添加LCD触摸屏支持 编辑# gedit arch/arm/mach-s3c2440/以实现系统对LCD液晶屏的支持来显示图像。 把相应的替换成以下的: /* LCD driver info */ static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = { .lcdcon5 = S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP, .type = S3C2410_LCDCON1_TFT,/*屏幕的类型*/ .width = 240, /*液晶屏宽度*/ .height = 320, /*液晶屏高度*/ 20
河北工业大学硕士学位论文 .pixclock = 170000, /* HCLK 60 MHz, divisor 10 */ .xres = 240, .yres = 320, .bpp = 16, .left_margin = 2, .right_margin = 26, .hsync_len = 6, .upper_margin = 2, .lower_margin = 6, .vsync_len = 2, }; 加入LCD背光:# gedit arch/arm/mach-s3c2440/ 因为硬件平台的英寸液晶显示屏的背光是由S3C2440的GPG4引脚来控制的,故下面的改动将开启背光,在结构体中加入以下语句: static void __init smdk2440_machine_init(void) { s3c2410_gpio_cfgpin(S3C2410_GPG4,S3C2410_GPG4_OUTP); /*加入以下两句*/ s3c2410_gpio_setpin(S3C2410_GPG4,1); } 图 帧缓存与背光菜单 图 添加帧缓存 图 添加帧缓存控制台 图 LCD显示屏配置 LCD display configuration 21
利用公用通信网络实现智能家居系统的远程监控 4-4-3 YAFFS2文件系统配置移植 YAFFS(yet another flash file system)类似于JFSS2专门为NAND Flash设计的嵌入式文件系统,它提供掉电保护可以有效保护意外掉电对文件系统一致性和完整性的影响,速度更快占用内存更少。因为NAND Flash是以页面为单位进行存取的所以将文件组织成固定大小的数据段。利用NAND Flash 提供的每页16字节的OBB空间来存取校验码和文件系统的组织信息。YAFFS2是YAFFS的第二个版本性能有很大的提高,读写分别可以达到 1.解压并进入yaffs2源码目录: # tar zxvf # cd cvs/yaffs2 2.打补丁: # ./ c ../../ Updating ../../ Updating ../../ 3.回到内核目录 # cd ../../ 4.重新配置 # make menuconfig 按如下目录进入相应的配置界面:添加对Yaffs2文件系统的支持。我们的硬件平台选用的是128M的大页Nand Flash,每页大小为2K,所以要添加2048 byte /page devices这个选项。 File systems ---> [*] Miscellaneous filesystems 图 YAFFS2文件系统选项图 Fig Options of YAFFS2 filesyatem §4-5 构造根文件系统 4-5-1 根文件系统组成及功能 类似于Windows下的C、D、E等各个盘,Linux也是将Nand Flash等存储设备划分为若干分区的,在不同分区存放不同类型的文件。比如内核、内核启动后的第一个程序、应用程序依赖的库等,这些必须的基本的文件合成为根文件系统。为了方便找到不同类型的文件,在构造文件系统时遵循FHS标准(Filesystem Hierarchy Standard,文件系统层次标准)。根文件系统要包含这些必须有的目录:/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys等。Linux根文件系统目录如表所示。 22
河北工业大学硕士学位论文 表 Linux根文件系统目录 Directory of Linux root filesystem 目录名称 目录存放的内容 /bin目录存放一般用户和系统管理员的基本操作命令,/bin目录下常用的命令有cat、 chgrp、cp、ls、mkdir、kill等,必须和根文件系统在同一分区里。 /sbin目录 存放系统管理员可使用的基本的系统管理命令。用于启动、修复系统等。 /etc目录 存放系统的启动配置文件,这些目录、文件都是可选的。 放设备文件,设备文件是linux系统对设备的抽象,应用程序通过读写某/dev目录存 个设备文件操作某个具体的硬件。 享库和可加载模块(/lib目录存放共及驱动程序),共享库用于启动系统,运行根文 件系统中的可执行程序,比如/bin、/sbin目录下的程序。 /root目录 root用户(根用户)的目录 /home目录 用户目录,存放以用户名命名的子目录,里面存放用户相关的配置文件。 可/usr目录应用程序存放的目录,包括共享的、只读的程序和数据。此目录内容是 以在多个主机之间共享的。 /var目录 存放可变的数据,例如日志文件和临时文件。 这是一个空目录,常作为proc文件系统的挂接点。proc文件系统是个虚拟/proc目录 的文件系统没有实际的存储设备,里边的目录和文件都是内核临时生成的,用来表示系统的运行状态。 /mnt目录 用于临时挂接某个文件系统的挂接点,通常为空目录。也可创建空子目录。 ,通常也是空目录。一些需要生成临时/tmp目录用于存放临时文件文件的程序用到 /tmp目录,所以必须存在并可访问。 4-5-2 BusyBox的移植 BusyBox不仅小巧而且高效,可以作为构建资源受限的嵌入式平台的基础。BusyBox具有模块化和高度可配置的特点,可以进行裁剪以满足系统的特定要求,BusyBox提供的配置实用程序与配置Linux的类似,接下来进行配置与编译[29]。我们选取的是版本。 1.打开BusyBox主目录下的Makefile 修改平台为ARM ,编译器为arm-linux-gcc。 ARCH ?= arm CROSS_COMPILE ?=arm-linux- 2.执行配置程序并选取所需要的特性 # make menuconfig 分别进入build option、installation option、Busybox Library Tuning 三个子目录中进行相关选项的配置,其余的选项可以保留默认配置。 23
利用公用通信网络实现智能家居系统的远程监控 图 编译选项 图 安装选型 图 配置选项 图 配置选项 Fig Options of 3.运行make dep命令构建依赖关系树。 4.运行make命令编译BusyBox。 5.运行make install 命令,在_install文件夹生成bin、sbin、user文件夹以及链接文件Linuxrc。将这些安装到目标系统上就完成了BusyBox的移植工作。 完成移植工作之后开始构建根文件系统,复制刚刚编译出来的busybox 的bin目录、sbin目录、usr目录和linuxrc到root目录下,然后新建dev、etc、home、lib、mnt、opt、proc、root、sys、tmp、var和web目录,并在原有的“usr”目录下面新建一个lib目录。各个目录存放的内容已经在表中讲解过了不再重复。建立这些目录既可以手动建立也可以编辑以个shell文件来建立。目录建立完成之后需要向目录添加内容。 在使用mdev 构建“dev”目录前,init 进程需要用到“/dev/console”和“/dev/null”这两个设备文件,所以,我们需要在制作文件系统时静态创建这两个设备文件,命令如下: 24
河北工业大学硕士学位论文 #mknod console c 5 1 #mknod null c 1 3 目录:启动文件目录,该目录下面有个“rcS”的文件,里面存放了系统启动时设置以及自启动加载的进程等。 §4-6 嵌入式数据库SQlite移植 嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要比较少的内存。使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想[30]。嵌入式数据库是嵌入式系统的重要组成部分,也成为对越来越多的个性化应用开发和管理而采用的一种必不可少的有效手段。目前常用的嵌入式数据库包括如下几种:Berkeley DB(开源,商用收费)、SQLite(开源,商用免费)、Empress(商业数据库)、eXtremeDB、mSQL等几种。基于SQlite代码精简、内存占用少大概250Kb源代码开放、代码95%有较好的注释及具有简单易用的API等优点,本设计采用版本做为系统嵌入式数据库[31~35]。系统中的所有数据信息都存储到这个数据库系统中,下面介绍具体的移植过程。 1.在SQlite官网下载Linux版本的。 2.解压文件tar -zxvf 。 3.mkdir build在目录内建立编译文件夹,SQlite的编译就在这个文件夹内进行。 4.cd build 进入build目录。 5.../configure --host=arm-Linux --prefix=/usr/local/SQlite3 选定编译器为arm-Linux-gcc,并指定安装目录为/usr/local/SQlite3,这个路径是自己指定的,可根据自己的需要进行修改。 6.make 编译 7.make install 安装完成后在sqlie3目录下生成bin,include,lib,三个文件夹,分别为可执行文件,头文件与库文件由于采用的是动态编译所以生成的库是动态库,在复制到硬件板时需要添加-arf选项,如果不复制连接文件也可以在板子上用ln命令创建链接文件,这样才能保证运行文件时找到库文件才不会出现错误,ln命令的格式为l目标 连接文件名[32]。 在完成SQlite的移植与安装之后讲述如何在C/C++语言中调用 SQlite 的函数接口来实现创建数据库、创建表格、插入数据、查询数据、删除数据等工作。 1 创建并打开数据库 #include <> #include <> /*包含SQlite的头文件,若无编译时会提示找不到头文件*/ int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; rc = sqlite3_open("", &db); /*打开指定的数据库文件,如果不存在将创建一个同名文件*/ if( rc ) { fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db)); sqlite3_close(db); /*若无法打开则给出提示并关闭数据库*/ exit(1); } 25
利用公用通信网络实现智能家居系统的远程监控 else printf("You have opened a sqlite3 database);/*给出成功打开提示*/ sqlite3_close(db); } 2 插入数据:INSERT sql = "INSERT INTO "SensorData" VALUES( NULL , 1 , 1 , '200605011206', );" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); sql = "INSERT INTO "SensorData" VALUES( NULL , 1 , 1 , '200605011306', );" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); 3 查询数据:SELETE int sqlite3_get_table(sqlite3*, const char *sql,char***result , int *nrow , int *ncolumn ,char **errmsg ); result中是以数组的形式存放你所查询的数据,首先是表名,再是数据。 nrow ,ncolumn分别为查询语句返回的结果集的行数,列数,没有查到结果时返回0 sql = "SELECT * FROM SensorData "; sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg ); int i = 0 ; printf( "row:%d column=%d n" , nrow , ncolumn ); printf( "nThe result of querying is : n" ); for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ) printf( "azResult[%d] = %sn", i , azResult[i] ); sqlite3_free_table( azResult );/*释放掉 azResult 的内存空间*/ 我们这里用到了一个查询的语句是 "SELECT * FROM SensorData " , 在C语言中对应的函数接口是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg ); 4 删除数据:DELETE 下面我们看看怎么在C语言中删除数据库中的特定的数据。 sql = "DELETE FROM SensorData WHERE SensorID = 1 ;" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s n", zErrMsg); #endif 至此系统的软件开发平台建立成功,系统应用程序运行所需的系统引导层、操作系统层、应用软件支撑层构建完毕,应用程序在这个嵌入式系统中运行,可以运行嵌入式Linux系统下的图形界面程序、嵌入式数据库等。 26
河北工业大学硕士学位论文 第五章 系统功能的实现 §5-1 在Linux系统下UART的调试 在嵌入式系统的开发和应用中经常需要用到串口进行现场数据的采集和控制,本文就是选用的UART口实现的嵌入式智能家居主控制器与各个功能模块之间的通信功能。在嵌入式Linux环境下的所有设备都有相应的设备文件供用户访问,设备文件都位于dev目录下。通过读写文件来对串口进行操作,通过UART可以把智能家居各功能模块连接起来,实现主控制器与设备的通信。部分代码如下: int uart_init(int arg, int baud) { int fd; /*定义设备号*/ char port[20]; struct termios Opt; int uartbiit[50]={B115200,B9600,B19200,B4800,B2400,B1200};/*波特率数组*/ sprintf(port,"/dev/ttySAC%d",arg); printf("port %s \n", port); fd = open(port, O_RDWR); /*打开串口*/ if (fd<0) { return -1; /*打开设备失败返回*/ } tcgetattr(fd,&Opt); /*初始化*/ tcflush(fd,TCIFLUSH); cfsetispeed(&Opt,uartbiit[baud]); /*设置波特率*/ cfsetospeed(&Opt,uartbiit[baud]); _cflag |= CS8; /*设置数据位,8位数据*/ _cflag &= ~PARENB; _oflag &= ~(OPOST); _cflag &= ~CSTOPB; _lflag &= ~(ICANON|ISIG|ECHO|IEXTEN); _iflag &= ~(INPCK|BRKINT|ICRNL|ISTRIP|IXON); _cc[VMIN] = 0; _cc[VTIME] = 0; if (tcsetattr(fd,TCSANOW,&Opt) != 0) { perror("SetupSerial!\n"); ::close(fd);/*因为要放到图形系统里编译所以要加上::,后续详细解释。 return -1; } return(fd); 对串口进行设置是必须的操作,一般包括波特率设置、校验位和停止位设置。可通过POSIX的标准接口termios进行设置[36~39]。Termios的结构如下: 27
利用公用通信网络实现智能家居系统的远程监控 Struct termios{ Tcflag_t c_iflag; /*输入模式*/ Tcflag_t c_oiflag; /*输出模式*/ Tcflag_t c_cflag; /*控制模式*/ Tcflag_t c_lflag; /*局部模式*/ Cc_t cc_[NCCS]; /*特殊控制字符*/ } 在上面的结构体成员中c_cflag是最常用的,它用于控制串口的波特率、奇偶校验、停止位等。经过上面语句的设置串口的基本设置就完成了。通过下列语句打开串口并进行读写操作: if((fd = uart_init(2, 1)) <0) /*打开串口3,波特率为9600;*/ { printf("Open uart err \n"); /*提示打开失败*/ } write(fd, buffer ,Length); /*写串口*/ read(fd, buffer ,Length); /*读串口*/ §5-2 电话远程通信模块的实现 5-2-1 电话远程控制程序设计 如图所示系统的初始化包括各个模块初始化、开中断等,当系统检测到有振铃信号,并且延时一段时间振铃无人接听,就置摘机控制引脚SW为高电平,从而实现模拟摘机,而后播放语音提示,提示用户输入密码。密码检测是采用储存用户输入的密码然后与预存用户密码逐次各位做比较。若密码正确则进入控制流程,由于电话线噪声的存在,语音识别的识别比较困难,所以远程控制可采用按键的方法。通过检测用户话机按键,取得控制信号。处理器根据控制信号采取相应的操作。 图 远程控制流程图 Fig Remote control flow 28
河北工业大学硕士学位论文 5-2-2 电话自动报程序设计 自动报警模块程序设计可以分为报警信号的采集与判断、报警电话的查询、自动拨号、播放报警语音等几部分。在报警终端拨打用户设定的电话时,首先与被呼叫用户或报警中心建立握手信号,然后播放报警语音。报警终端每隔30秒拨打一次电话直到打通为止。用户可以设置多个电话号码,以免长时间占线,而导致报警失败。电话报警模块的程序流程图如图所示: 检测串口N有无数据YN报警命令信息根据设定操作Y电话摘机电话报警N电话接通Y语音报警挂机 图 电话报警流程图 Fig Flowchart phone alarm 上位机通过串口向本系统输入控制信息,进行通信。若系统正确设置则返回完成信息,若未能正确设置则返回错误信息。电话远程监控部分整体软件流程图如图所示: 29
利用公用通信网络实现智能家居系统的远程监控 开始上电初始化Y检测振铃信号返回错误信息完成设置NN检测串口10S无人接听YN有无数据自动摘机提示输入密码YN报警命令信息处理设置NY密码正确Y电话摘机语音提示电话报警N判断按键控制信息电话接通Y语音报警传输控制信息挂机 图 远程监控流程图 Fig The flow chart of remote monitoring §5-3 图形界面系统的设计 本节通过应用程序为例说明如何把嵌入式Linux图形用户界面(Graphic User Interface ,GUI)、嵌入式数据库SQLite应用及linux下的串口通信程序结合到一起完成应用程序的设计。QT/Embedded是在嵌入式环境下使用的QT,具有QT在桌面系统的所有功能,是Trolltech为嵌入式设备上的图形界面和应用开发而定制的工具开发包,它具有面向对象、构件支持、具有丰富的API函数及可用户化外观等特点,并具有一套完整的组件工具[35]。在QT程序中事件采用了事件与插槽机制,好处在于不需要调用翻30
河北工业大学硕士学位论文 译表而节省资源,利用信号与插槽进行对象间的通信是QT最主要的特征。当对象状态发生改变时发出信号通知插槽接收,一个信号可以连接多个插槽,多个信号也可以连接到同一个插槽之中。QT/Embedded的移植不再具体的讲解,在编译完成之后生成一个在X86下运行的版本,主要用于程序的开发仿真,另一个ARM下的版本用于在ARM平台下应用程序的开发。总体的应用程序开发流程如图所示,这是QT嵌入式图形应用开发的基本步骤。 图 应用程序设计流程图 Fig Application flow chart 5-3-1 图形界面设计 首先用Qt Desinger根据系统要求设计图形界面,建立槽函数开槽并且通过语句connect(PushButton1,SIGNAL(clicked()),this,SLOT( set_userandphone() ) );建立信号与槽函数的连接[36]。槽函数需要根据设计的功能需要编写。用UIC与MOC工具生成文件、及完成信号与插槽功能的程序,由PROGEN与TMAKE生成工程文件与Makefile。首先介绍与电话远程监控相关的主控制器图形界面程序的设计: 1.在x86_qtopia/pro目录下建立名为user的目录,用于存储相关的工程文件。运行qt2/bin/designer启动图形设计界面。点击File-New选择Widget进入设计界面,用鼠标拖放调整设计界面尺寸为240*320。如图所示名字命名为user,在palette项这选择界面颜色,caption为界面标命名为user and phone set 。选择工具栏里的Tabwidget工具新建两个栏目分别命名为user和phone。 2.如图所示,在工具栏选择Text Lable工具建立字符框分别命名为username、password、TEL1等,在相应的位置分别用Line Edit工具放置对话框,用于输入相应的用户信息。如图所示放置四个PushButton分别命名为set与close,用于确认设定信息与关闭对话框。 31
利用公用通信网络实现智能家居系统的远程监控 图 图形设计界面 Fig Interface Graphic Design 图 用户信息设置界面 Fig Set the user interface information 3.在完成界面设计以后需要建立信号与插槽机制,如图所示选择菜单Edit中的Slots项建立响应函数分别命名为close与set_userandphone,选择Connect signel/slots工具建立信号与插槽之间的连接,选择触发模式为Clicked。至此图形界面的设计完成,接下来编写其他工程文件。 图 信号插槽建立连接 Fig signal to establish a connection slot 4.用uic工具分别生成、、文件,moc工具生成文件命令如下: uic –o uic –o –impl moc –o 添加文件内容如下: 32
河北工业大学硕士学位论文 #include "" /*调用刚刚得到的头文件*/ #include <> #include <qtopia/> QTOPIA_ADD_APPLICATION("user", user) /*第一个user为要得到的可执行文件的名称,第二个为主界面名称*/ QTOPIA_MAIN 5.生成文件与Makefile,其中需要把文件中的qt改为qtopia,并且因为开发软件的BUG在Makefile文件中包含很多重复的部分需要我们手动删掉,否则编译时系统会提示错误而不能完成编译工作。 progen –o tmake –o Makefile 完成上述工作后需要制作一个启动器并且选择一个png格式的图片做为图标。在图形系统就可以看到应用程序的图标和名字了。 [Desktop Entry] Version= Name=用户信息设定 comment=user and phone set Exec=user Icon=user Type=Application 6.完成X86环境下的编译之后需要修改Makefile文件把PC环境编译器gcc和g++修改为嵌入式环境下的arm-linux-gcc和arm-linux-g++,编译完成下载到文件系统的相应目录下并运行测试。中有SQLite数据库代码,要把库路径加到Makefile库文件的搜索路径中否则会因为找不到SQLite的库文件而编译失败。 LIBS=$(SUBLIBS)-L$(QPEDIR)/lib-L$(QTDIR)/lib -lqpe -lqtopia -lqte -lSQLite3 /*把-lSQLite3加入到库文件搜索路径中*/ 其中在文件中包含SQlite数据库和串口通信的相关代码,以实现嵌入式数据库存储用户名密码与电话远程监控电话号码的设定。下面进行相关代码分析: QString str,str1,str2,str3,str4; str = LineEdit1->text(); str1 = LineEdit2->text(); str2 = LineEdit11->text(); str3 = LineEdit12->text(); str4 = LineEdit13->text(); 这几行代码实现把用户输入的信息放到str等Qstring类型字符串内。 connect( PushButton1, SIGNAL( clicked() ), this, SLOT( set_userandphone() ) ); connect( PushButton2, SIGNAL( clicked() ), this, SLOT( close() ) ); 这两行代码实现的就是信号与插槽的连接,PushButton1按下之后执行函数set_userandphone(),这个函数实现把输入的信息保存到我们建立的数据库里,当然这个槽函数是需要我们自己编写的。第二行的作用跟第一行相同,只不过槽函数变成了close(),用来关闭程序界面。 sqlite3 *db=NULL; char *zErrMsg = 0; int rc; rc = sqlite3_open("", &db); /*打开指定的数据库文件,若不存在将创建一个同名的数据库*/ 33
利用公用通信网络实现智能家居系统的远程监控 { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } /*打开数据库失败,返回错误信息*/ else printf("you have opened it ");/*打开数据库成功*/ char *sql = " CREATE TABLE namekey(ID INTEGER PRIMARY KEY,name BLOB,KEY BLOB);"; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); /*新建数据表namekey*/ char *sql1 = " CREATE TABLE tel(ID INTEGER PRIMARY KEY,tel1 BLOB,tel2 BLOB,tel3 BLOB);" ; sqlite3_exec( db , sql1 , 0 , 0 , &zErrMsg ); /*新建数据表tel,用于存储三组电话号码*/ #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif sql = "DELETE FROM namekey WHERE ID = 1 ;" ; /*删除ID=1的历史数据*/ sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif sql = "DELETE FROM tel WHERE ID = 1 ;" ;/*删除ID=1的历史数据*/ sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif char sqll[1024]=""; char sqlll[1024]=""; sprintf(sqll,"INSERT INTO \"namekey\" VALUES(1, '%s', '%s' );",name,key) ; sqlite3_exec( db , sqll , 0 , 0 , &zErrMsg );/*存储数据*/ sprintf(sqlll,"INSERT INTO \"tel\" VALUES(1,'%s','%s','%s');",tel1,tel2,tel3) ; sqlite3_exec( db , sqlll , 0 , 0 , &zErrMsg ); /*存储数据*/ #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif sqlite3_close(db); /*关闭数据库*/ } 以上代码完成了数据库的建立,数据表的建立以及数据的存储。完成数据库部分的操作之后需要通过系统总线把设定的信息发送给电话监控模块,UART已经在节中调试完毕可以直接应用。至此文件修改完毕,需要说明的是以上代码都是在槽函数中完成的。void user::set_userandphone()中的内容正是以上介绍的,应用程序的功能就是我们编写的这些代码来实现的。应用程序的界面如图和所示,在输入相应的信息后点击set按钮,用户名密码以及报警电话分别保存到了namekey与tel表中并发送给电话通信模块。达到了设定用户信息的设计目标。 34
河北工业大学硕士学位论文 图 用户名及密码设定 图 报警电话号码设定 图 查看SQlite中存储的数据 图 应用程序测试 Fig Application tests 5-3-2 应用程序设计要点 系统中除了以上的用户信息设置应用程序,还包括安防模式设定、系统数据导出、设备状态查询、设备工作状态设置以及网络浏览时钟等应用程序,虽然完成的功能不同但是基本的开发流程是一样的,基本遵循以上步骤,不再一一详细介绍,只把其中一些关键点详细说明。 设备工作状态设置这个应用程序的编写同样遵循如上步骤,首先使用运行qt2/bin/designer启动图形设计界面,如图所示,其中使用了两级Tabwidget,一级分为out、sleep、home三种工作状态,在每种工作状态下分别都有C1、C2、C3、C4四个子菜单,其中每个编号对应一个系统设备,这里每个选项没有具体命名可以根据需要对应不同的家居设备。其中可以勾选的项目是由Check Box 工具实现的,其他步骤基本相同,完成头文件工程文件之后我们需要修改它的文件以实现系统功能。 图 设备状态设定 Fig Device status setting 35
利用公用通信网络实现智能家居系统的远程监控 connect( PushButton2, SIGNAL( clicked() ), this, SLOT( close() ) ); connect( PushButton1, SIGNAL( clicked() ), this, SLOT( set_bbf() ) ); connect( PushButton1, SIGNAL( clicked() ), this, SLOT( set_cf() ) ); connect( PushButton1, SIGNAL( clicked() ), this, SLOT( set_bf() ) ); connect( CheckBox1, SIGNAL( pressed() ), this, SLOT( bfc11() ) ); connect( CheckBox2, SIGNAL( pressed() ), this, SLOT( bfc12() ) ); 这部分代码建立信号与槽函数之间的连接,其中set_bf()、bfc11()等需要我们自己去编写完成相应的功能。 void set::bbfc11() { strbbfca[0]='1'; /*当对应的选项被勾选,就把相应的数组的位置1,其它同理*/ } void set::set_bbf() /*槽曹函数的实现*/ { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; rc = sqlite3_open("", &db); /*打开指定的数据库文件*/ if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("\n"); char *sql = " CREATE TABLE setbbf(ID INTEGER PRIMARY KEY,c1 BLOB,c2 BLOB,c3 BLOB,c4 BLOB);" ; /*创建一个名为setbbf的数据表*/ sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif sql = "DELETE FROM setbbf WHERE ID = 1 ;" ; sqlite3_exec( db , sql , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif char sqll[1024]=""; sprintf(sqll,"INSERTINTO\"setbbf\"VALUES(1,'%s','%s','%s','%s' );",strbbfca,strbbfcb,strbbfcc,strbbfcd); sqlite3_exec( db , sqll , 0 , 0 , &zErrMsg ); #ifdef _DEBUG_ printf("zErrMsg = %s \n", zErrMsg); #endif sqlite3_close(db); } 完成编译之后生成可执行文件放到文件系统之中,完成了设备运行状态的设置程序的开发 36
河北工业大学硕士学位论文 5-3-3 系统数据导出 智能家居系统之中有很多数据需要保存与管理,比如设备运行状态数据,报警信息数据等,我们虽然为其设计了一个数据库系统,但是数据需要能够导出分析等,所以我们设计了一个数据导出应用程序,把系统中的数据库文件整体导出。图形界面的设计不再具体描述。 图 系统数据导出 Fig System data export from_fd= open("/", O_RDWR); to_fd = open("/udisk/", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR); /*U 盘创建数据库文件 while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)) { if((bytes_read==-1)&&(errno!=EINTR)) break; /* 读取文件内容*/ else if(bytes_read>0) { ptr=buffer; while(bytes_write=write(to_fd,ptr,bytes_read)) /* 把读取的内容写入目标文件*/ { if ((bytes_write==-1)&&(errno!=EINTR))break; else if (bytes_write==bytes_read) break; else if (bytes_write>0) { ptr+=bytes_write; bytes_read-=bytes_write; } } if(bytes_write==-1)break; ::close(from_fd); ::close(to_fd); exit(0); } 到这里数据导出这个应用程序设计完成,其它的图形界面里的应用程序基本也遵循这个过程,主要涉及图形界面的设计、数据库的设计与读写以及串口通讯等,这里不再详述。另外这里调用::close()函数,它是Linux系统函数,而不是图形系统里那个close()函数,否则编译会出错。 37
利用公用通信网络实现智能家居系统的远程监控 5-3-4 系统后台监控 电话远程监控部分不仅要实现电话报警的功能,同时要实现远程控制,电话模块如何识别按键,如何获取控制信息前面的节已经详细讲解了其工作原理与程序流程,其获得了远程控制信息需要传递给智能家居的主控置器,由主控器按要求把控制信息下发给各个模块,比如电话获得了灯光控制信息通过系统总线传递给主控制器。我们的系统总线选择的是RS485总线,主控制器由UART2口通过RS485电平转换接到系统总线上。在后台运行一个读取UART2信息的程序,或者叫做后台监控串口,我们命名为,这个程序负责接收各个模块发给主控制器的信息并且自动执行相应操作。比如收到安防模块的报警信息,那么它就把报警信息发送给电话远程监控模块,如果收到的是远程操作信息就把操作命令发送给相应的执行模块。 程序流程图: 上电后台运行BACK读取串口信息并判断信息类别智能家居内部电话远程控制设备运行状态报警信息信息信息发送给电话报发送控制信息存储设备状态警模块并存储并存储信息返回继续监控串口信息 图 系统后台监控流程图 Fig Background monitoring system flow chart 38
河北工业大学硕士学位论文 图 总控制界面图 图 系统设定界面 图 系统工作状态界面 39
利用公用通信网络实现智能家居系统的远程监控 图 报警信息读取界面 图 布防快速设定 图 半布防快速设定 图 撤防快速设定 图 系统运行界面图 The interface of system operation 至此系统的开发设计工作已基本完成,如图所示为系统运行时的总体界面,每个图标代表了一个系统的应用程序。图为设备工作状态设定,在对话框勾选代表启用该设备,图为设备工作状态查询界面,当设备正常工作为绿灯,出现故障为红灯。图为报警信息查询界面图,报警信息以文字形式显示在对话框。图、图及图为安防工作模式快速设定等,分别为外出模式、就寝模式及在家模式的快速设定界面,只需点击OK即可完成快速设置。用户信息设置、数据导出等应用的开发与作用已经详细说明不再重复。 40
河北工业大学硕士学位论文 第六章 结论 本文分析了当前智能家居远程监控的现状,完成了基于电话网络的远程监控,通过构建基于ARM的嵌入式系统实现了智能家居主控制器的设计,主要工作如下: 1.研制了电话远程通信模块,使用电话芯片PH8810设计了电话远程通信电路,完成了电话远程通信程序的编写,实现了电话语音报警功能并能接收电话远程控制信息。完成解码后把远程控制信息发送给智能家居主控制器,实现远程控制。 2.通过对嵌入式智能家居远程监控系统的需求分析,从软件、硬件两个方面进行了设计实现。选取S3C2440A作为微处理器构建主控制器系统,主要包括嵌入式操作系统引导程序的移植,嵌入式Linux操作系统的移植,驱动程序的修改,嵌入式图形系统与数据库的构建及其在系统应用程序设计中的应用。 3.完成了智能家居主控制器应用程序的设计,主控制器界面主菜单包括:就寝模式(半布防)、外出模式(布防)、在家模式(撤防)、安防设定、数据导出、设备工作状态查询及用户信息设置等。其中安防设定下又包括就寝模式(半布防)设置、外出模式(布防)设置、在家模式(撤防)设置三个二级菜单。设备状态查询的模式与设定相同,同样分为四个分组查询。用户信息设置程序完成用户名密码设置与报警电话号码的设置。 本系统仍有许多地方需改进和完善,是我们今后研究的方向。 1.本系统实现了利用公用电话网络实现了智能家居远程监控,但是监控方式不够多样,下一步的研究方向就是要实现在以太网中实现通过网页和视频进行监控,并且进一步提高系统的可靠行。 2.本系统实现了嵌入式数据库在系统中的应用,数据库的设计需要进一步完善,嵌入式数据库在系统中的更多应用需要进一步研究。 3.在系统中使用了嵌入式图形系统,实现了操作界面可视化,需要进一步完善美化图形系统,达到操作简洁美观大方的目的。 41
利用公用通信网络实现智能家居系统的远程监控 参考文献 [1] 刘晓彤.嵌入式智能家居远程系统系统的设计与实现[硕士学位论文].北京:北京交通大学,2009 [2] 陈辉.基于公话网的城市热网的远程测控系统的实现[硕士学位论文].吉林:吉林大学,2009 [3] 代新鹏.智能型住宅安防报警系统的研究[硕士学位论文].北京:中国农业大学,2005 [4] 陈岩.基于ARM的公用电话网络远程控制终端的设计[硕士学位论文].浙江:浙江大学,2006 [5] 李界家.智能建筑办公网络与通信技术.北京.清华大学出版社.2000 [6] 师文庆,张智勇,陈 用.基于DTMF与单片机的电话远程和红外近程测控系统 [J].电子技术应用 2007,(07) [7] 张俊武. 基于DTMF技术的单片机远程通信系统研究[硕士学位论文]. 重庆: 重庆大学,2007 [8] 张爽.基于PSTN的智能家居控制系统的实现[硕士学位论文].北京:北京邮电大学, 2009. [9] 汪思敏 胡湘江.电话远程控制系统的设计与实现[J].电子技术应用2007,(04): 143 [10] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008. [11] 姜立东,王寿武,陆晓鹏,等.嵌入式系统原理与应用[M].机械工业出版社,2006,5:203~206 [12] 李驹光.ARM应用系统开发详解.清华大学出版社.2003:1~20 [13] S3C2440A-32BIT cmos microcontroller user’s manual revision 1[S].,1993 [14] 方尔正,王燕.嵌入式技术及其应用.哈尔滨工业大学出版社,2008.7:1~13 [15] 周立功等编著.ARM嵌入式系统基础教程.北京:北京航空航天大学出版社,2005 [16] 孙明野,孙凯,冯健.ARM嵌入式系统开发典型模块.人民邮电出版社,2007.1:77~95 [17] 李传鸿.浅谈嵌入式系统及其发展.计算机与信息技术.2008年10月. [18] 方策. 基于网络的SQLite 的家电管理系统[J].微计算机信息,2009(25):73. [19] 陶莉.基于RS485总线的智能家居系统的实现[硕士学位论文].上海:上海交通大学, 2008 [20] 赵光辉. 基于LPC2138和蓝牙技术的智能家居系统设计[硕士学位论文].曲阜市:曲阜师范大学, 2008 [21] HY57v561620(L)T datasheet.pdf.Hyundai electronics [22] K9F1G08U0B datasheet.pdf.Samsung electronics [23] 刘淼.嵌入式系统接口设计与linux驱动程序开发.北京航空航天大学出版社,2006.5:382~383 [24] 王成春,袁晓丽,邹逢兴.53C2510A的网络通信接口的设计.微计算机信息,2007年第23卷第6-2 [25] Advances Power Management BIOS Interface ,Microsoft,~180 [26] 孙纪坤,张小全.嵌入式linux系统开发技术详解.人民邮电出版社,2006.8:28~70 [27] 滕秋琴.ARM嵌入式系统网络接口设计.电讯技术,2008年10月:84~87 [28] 杜华.Linux编程技术详解[M].人民邮电出版社,2007.11:345~353 [29] 毛德操,胡希明.Linux内核源代码情景分析.第一版.杭州:浙江大学出版,~290 [30] 李永,何旭莉,刘小洋,李振宁.嵌入式Linux程序设计案例与实验教程[M].机械工业出版社,42
河北工业大学硕士学位论文 2009 [31] 祝伟恩,吕强.ARM Linux内核中实现电源管理的方法[J].单片机与嵌入式系统应用,2004,12:65~67 [32] 杨宗德,邓玉春,曾庆华.LINUX高级程序设计[M].北京:人民邮电出版社,2008 [33] Hallinan Christopher .Embedded Linux Primer: A Practical Real-World Approach.prentice hall,2006:421~443 [34] 张峰,石现峰.嵌入式数据库在振动监测系统中的应用[J].自动化与仪表,2009(8) [35] 贺翔,孟小华. 嵌入式智能家居终端人机界面设计与实现[J].计算机工程与设计,2010,31 (10). [36] 徐广毅,张晓林.Qt/Embedded在嵌入式Linux系统中的应用.单片机与嵌入式系统应用,2004,12:14~17 [37] 张娟,张雪兰.基于嵌入式Linux的GUI应用程序的实现[J].计算机应用,2003,4:115~117 [38] 林晓飞,刘斌,张辉.基于ARM嵌入式Linux应用开发与实例教程.清华大学出版社,2007.7:163~169 [39] W.wolf,B.Ozer,T.Lv.Smart cameras as embedded systems IEEE computer,September,2002,35(9):48~53 43
利用公用通信网络实现智能家居系统的远程监控 致谢 两年多研究生生活接近了尾声,我硕士期间的研究工作及毕业论文也如期完成。在这两年半的时间里取得很大的进步,不仅学会了更多的文化知识,更树立了正确的人生观价值观。 首先感谢我的研究生导师徐晓辉老师,两年多来,徐老师不但在学术研究方面给予我专业、细心地指导,为我提供良好的软硬件环境,从课题的选择,资料收集,实验过程,到最后论文撰写,都倾注了大量的心血,而且在为人处事方面也教会了我要“严于律己,宽以待人”,要以一颗真诚而感恩的心对待生活。徐老师平易近人的性格、科学严谨的治学态度将在我以后成长道路中产生深远的影响。在此向徐老师表达我最真诚的谢意。 感谢武一老师,伍萍辉老师,杨帆,高振斌老师等多位老师在我课题研究及撰写论文期间给予的大力帮助和中肯的建议。 感谢我的同学闫伟、王晓颖、宋军华、石勇、王博超等在我学习和生活中给予的关心和帮助。 感谢父母和家人,感谢他们二十多年来的养育之恩和在我身上倾注的精力和心血,他们是我不断学习,不断向前的动力。 最后感谢审阅本论文的所有专家和参加答辩的专家。 44
河北工业大学硕士学位论文 攻读硕士学位期间所取得的相关科研成果 [1] 谭涛,徐晓辉,黄晓亮,王盟,温阳.基于Arm-Linux的嵌入式智能家居控制系统的设计.电子设计工程,2011年第3期.(已录用) [2] 宋军华,徐晓辉,谭涛,刘剑,温阳.嵌入式Web技术在智能温室监控系统中的应用.电子设计工程,2011年第3期.(已录用) 45