1、智能家居设计与开发 电子与信息工程学院嵌入式体系结构与编程项 目 设 计 报 告 书 题 目 智能家居系统的设计与开发 姓 名 学号 同组成员 专业、年级 2013级 计算机科学与技术专业 指导教师 2015 年 12 月自我总结: 目录目录 1第1章 引言 3第2章 工具软件与技术基础 42.1 智能家居系统的开发环境和工具 42.2智能家居系统的技术路线 42.3 设备连接 5第3章 系统总体设计 63.1 智能家居系统需求分析 63.2 开发框架 63.3 具体实现设计 73.3.1如何点亮LED灯 73.3.2 Linux内核编译及配置 83.3.3内核模块编程 9第4章 界面设计 1
2、14.1 智能家居系统界面设计 11第5章 系统实现 125.1 Android客户端 125.2 Ubuntu服务端 165.3 Ubuntu客户端 185.4 Linux内核驱动 205.5 LED裸奔代码 21第6章 结束语 23第1章 引言当今社会,随着生活质量的日益改善和生活节奏的不断加快,人们的工作、生活日益信息化。信息化社会改变了人们的生活方式与工作习惯,使得家居系统的智能化成为一种消费需求,智能家居系统越来越被重视。因此,将家庭中各种通信设备、家用电器和家庭安保装置通过家居控制系统进行整合,并进行远程控制和管理,已经成为近年来一个热门研究课题。 迄今为止,智能家居还没有一个普遍
3、认同的统一的定义。通常智能家居系统利用先进的计算机和网络通讯技术将与家居生活有关的各种各样的子系统,通过特定的网络有机地结合在一起,通过科学管理,让家居生活更加舒适、有效、安全和节能。以住宅为平台,兼备建筑、网络通信、信息家电、设备自动化,集系统、结构、服务、管理、控制为一体的高效、舒适、安全、便利、环保的居住环境。智能家居包含智能照明、电动窗帘、背景音乐、安防报警、楼宇对讲、远程控制等方面。传统的家居智能控制系统一般采用有线方式来组建,如同轴电缆、USB、CAN总线等。但有线网络具有布线麻烦,可扩展性差等固有的缺点,限制了有线网络技术在智能家居系统中的发展。因此,基于物联网,将无线网络技术应
4、用于家庭网络己成为大势所趋。这不仅仅因为无线网络具有更大的灵活性、流动性,省去了布线的麻烦,更重要的是它符合家居控制网络的通讯特点。无线家居网络将人们生活与工作的广袤空间浓缩于人类的双手可以掌控的距离。此次我们围绕基于网络的智能家居系统开发,简单的实现了使用网络对嵌入式设备的控制。第2章 工具软件与技术基础2.1 智能家居系统的开发环境和工具智能家居系统的开发工具主要是:Ubuntu系统、putty、Eclipse。Ubuntu(乌班图)是一个以桌面应用为主的基于Linux内核开发的操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,
5、是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。putty是一个T
6、elnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将putty移植到其他平台上,像是以Symbian为基础的移动电话。putty为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,Putty是出色的工具之一。putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功
7、能丝毫不逊色于商业的telnet类工具。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。使用Eclipse添加Android SDK和ADT后可进行Android项目的编写。2.2智能家居系统的技术路线智能家居系统采用C-S模式,客户端基于Android开发,服务端基于C开发,服务端与客户端采用Socket网络编程来进行通讯。服务端主要对开发板上各传感器的数据进行处理、响应客户端的各种
8、请求,服务端主要对从服务器获取的信息进行处理展示,同时给服务器发送控制信息,进行从而实现对开发板上某些功能部件的的控制。主要用到的技术是:Java Socket编程、C Socket编程、Ubuntu下Vim编辑器的使用、Linux网络编程、相关驱动的开发、putty串口连接开发板、TFTP(简单文件传输协议)进行文件下载。2.3 设备连接开发板的串口与计算机串口使用串口线进行连接,将开发板使用网线接入局域网,再将当前计算机接入当前开发板的所在的局域网,接通开发板电源,同时将开发板、计算机中Windows系统和Ubuntu系统下三者的IP设置在同一网段,设置开发板、Windows和Ubuntu
9、的网关为同一网关,此时开发板的服务端是Ubuntu。第3章 系统总体设计3.1 智能家居系统需求分析本系统设计的目的是向用户提供一个通过网络控制智能家居设备的系统。通过Socket编程进行客户端和服务端的通讯,实现对智能家居设备的控制。随着电子技术和网络技术的飞速发展,人们的生活方式日益发生着变化,人们对于生活有了更高层次的追求。大家不再因拥有一个可以居住的空间而感到满足,更希望自己的家庭生活是便利的、舒适的、安全的,并且还兼具人性化、智能化,从而产生了智能家居系统1。与普通的家居相比,智能家居不仅具有一般的居住功能,也能提供舒适安全、高品位且宜人的家庭生活空间,还能提供全方位的信息交换功能,
10、帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全感,节约能源。因此,智能家居必然成为今后日常生活的一种趋势。而对智能家居系统的需求也将随着人们对生活品质的追求而发生着变化,因此,智能家居系统也拥有着良好的发展前景。3.2 开发框架基本的嵌入式产品框架:开发模式:实现过程:3.3 具体实现设计3.3.1如何点亮LED灯1)原理 1.查看S5PC100开发手册,找到4个LED灯的对应引脚GPG3_0/3; 2.要点亮LED灯,必须在LED两端有正向压降,即GPG3_0(LED4),GPG3_1(LED1),GPG3_2 (LED2),GPG3_3(LED
11、3)要置为高电平; 3.控制寄存器:GPG3CON设置为输出引脚(GPG3CON |= 0x1111 0); 4.数据寄存器:GPG3DAT设置为高电平(GPG3DAT |= 0xf ); clientSocket =new Socket(); clientSocket.connect(new InetSocketAddress(172.20.135.6, 7775); / 2. 获取网络的输入,输出流 OutputStream outputStream =clientSocket.getOutputStream(); InputStream inputStream =clientSocket
12、.getInputStream(); /将这个输入流转换为缓冲流 BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream); / 3. 接受服务端的信息 readMsgServer(bufferedReader); / 4. 发送用戶名和密碼 writeMsgServer(outputStream,name,pwd); / 5. 接收服务端发送过来的验证信息 readMsgServer(bufferedReader); /writeMsgServer(outputStream,on)
13、; outputStream.write(on.getBytes(),0,on.length(); outputStream.flush(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); / 接收服务端的信息 public void readMsgServer(BufferedReader bufferedReader) String line=; String buffer=; try /获取服务端的数据 while(line=bufferedReader.readLine()!=n
14、ull) if(line.equals(start) continue; else if(line.equals(end) break; else /真正的数据 buffer =line+buffer; /System.out.println(-+buffer.toString(); / 发送消息给UI主线程,并展示在UI界面上 Message message =Message.obtain(); message.what =0x11; /消息的类型 message.obj=buffer.toString(); /消息的內容 /发送消息 mHandler.sendMessage(message
15、); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); / 发送消息給服务端 public void writeMsgServer(OutputStream outputStream,String name,String pwd) try /发送用戶名 outputStream.write(name.getBytes(), 0, name.length(); outputStream.flush(); /发送密码 outputStream.write(pwd.getBytes(),0,pwd
16、.length(); outputStream.flush(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); 5.2 Ubuntu服务端Ubuntu服务端用与接受客户端发送的命令,并执行相应代码,完成客户端对开发板的控制,使用C语言进行编写,具体实现代码如下:(已省略源码中头文件代码)void *do_client(void *arg);int main(void) int ret; int servfd; /*1.建立socket套接字*/ servfd = socket(AF_IN
17、ET,SOCK_STREAM,0); if(-1 = servfd) perror(socket); return -1; /*填充服务器地址和端口*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr); servaddr.sin_family = AF_INET; /ipv4 servaddr.sin_port = htons(PORT); /端口号 servaddr.sin_addr.s_addr = inet_addr(SERVIP); /服务器地址 socklen_t slen = sizeof(serva
18、ddr); /*2.bind 绑定服务器的ip地址,端口号*/ ret = bind(servfd,(struct sockaddr *)&servaddr,slen); if(-1 = ret) perror(bind); return -1; /*3.listen 主动监听客户端,客户端连接最多为100*/ ret = listen(servfd,100); if(-1 = ret) perror(listen); return -1; int newfd; pthread_t tid; while(1) /*4.accept 接受客户端,并且为新连接的客户端 分配一个新的文件描述符去操作
19、它*/ newfd = accept(servfd,NULL,NULL); if(newfd %d connect success.n,newfd); /*为每个客户创建一个线程去维护它*/ ret = pthread_create(&tid,NULL,do_client,&newfd); if(0 != ret) perror(pthread_create); return -1; pthread_detach(tid); close(servfd); return 0;void *do_client(void *arg) int newfd = *(int *)arg; char bufBUFSZ = 0; int ret; char *str = have a try and you will go far; while(1) /*5.通信*/ memset(buf,0,sizeof(buf); ret
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1