ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:208.21KB ,
资源ID:22907338      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22907338.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新智能家居设计与开发Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新智能家居设计与开发Word格式.docx

1、2013年1月3日,Ubuntu正式发布面向智能手机的移动操作系统。ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。putty是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。除了官方版本外,有许多第三方的团体或个人将putty移植到其他平台上,像是以Symbian为基础的移动电话。putty为一开放源代码软件,主要由Simon Tatham维护,使用MIT licence授权。随着Linux在服务器

2、端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,Putty是出色的工具之一。putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。使用Eclipse添加Android SDK和ADT后可进行Android项目的编写。2.2智能家居

3、系统的技术路线智能家居系统采用C-S模式,客户端基于Android开发,服务端基于C开发,服务端与客户端采用Socket网络编程来进行通讯。服务端主要对开发板上各传感器的数据进行处理、响应客户端的各种请求,服务端主要对从服务器获取的信息进行处理展示,同时给服务器发送控制信息,进行从而实现对开发板上某些功能部件的的控制。主要用到的技术是:Java Socket编程、C Socket编程、Ubuntu下Vim编辑器的使用、Linux网络编程、相关驱动的开发、putty串口连接开发板、TFTP(简单文件传输协议)进行文件下载。2.3 设备连接开发板的串口与计算机串口使用串口线进行连接,将开发板使用网

4、线接入局域网,再将当前计算机接入当前开发板的所在的局域网,接通开发板电源,同时将开发板、计算机中Windows系统和Ubuntu系统下三者的IP设置在同一网段,设置开发板、Windows和Ubuntu的网关为同一网关,此时开发板的服务端是Ubuntu。第3章 系统总体设计3.1 智能家居系统需求分析本系统设计的目的是向用户提供一个通过网络控制智能家居设备的系统。通过Socket编程进行客户端和服务端的通讯,实现对智能家居设备的控制。随着电子技术和网络技术的飞速发展,人们的生活方式日益发生着变化,人们对于生活有了更高层次的追求。大家不再因拥有一个可以居住的空间而感到满足,更希望自己的家庭生活是便

5、利的、舒适的、安全的,并且还兼具人性化、智能化,从而产生了智能家居系统1。与普通的家居相比,智能家居不仅具有一般的居住功能,也能提供舒适安全、高品位且宜人的家庭生活空间,还能提供全方位的信息交换功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全感,节约能源。因此,智能家居必然成为今后日常生活的一种趋势。而对智能家居系统的需求也将随着人们对生活品质的追求而发生着变化,因此,智能家居系统也拥有着良好的发展前景。3.2 开发框架基本的嵌入式产品框架:开发模式:实现过程:3.3 具体实现设计如何点亮LED灯1)原理 1.查看S5PC100开发手册,找到4

6、个LED灯的对应引脚GPG3_0/3; 2.要点亮LED灯,必须在LED两端有正向压降,即GPG3_0(LED4),GPG3_1(LED1),GPG3_2 (LED2),GPG3_3(LED3)要置为高电平; 3.控制寄存器:GPG3CON设置为输出引脚(GPG3CON |= 0x1111 0); 4.数据寄存器:GPG3DAT设置为高电平(GPG3DAT |= 0xf 2)运行裸奔代码 1.使用C语言编译点亮LED灯的逻辑代码; 2.设置好开发板上的参数 -serverip set serverip +服务器ip地址 -ipaddr set ipaddr +开发板ip -gatewayip

7、set gatewayip +网关测试开发板与服务器的连通性 ping + 服务器ip地址 3.设置启动方式set bootcmd tftp 0x20008000 zImage; bootm 0x20008000(这里的0x20008000是寄存器的地址,我们需要把在Ubuntu下编译好的文件下载到这个寄 存器)go 0x20008000 回车 (LED灯亮)3.3.2 Linux内核编译及配置内核模块编程1)2)模块的安装1. make modules_install 命令把所有的.ko 文件拷出来放到文件系统的2. 指定安装系统的路径放到我们开发板的根文件系统 make modules_i

8、nstall INSTALL_MOD_PATH=/nfs/rootfs 3)注册字符设备驱动 linux/fs.h static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) 1、major 主设备号 a) 内核主设备号文档. Documentation/device.txt 240-254 char LOCAL/EXPERIMENTAL USE b) cat /proc/devices c) 建立设备文件: mknod /dev/test

9、 c 241 0 crw-r-r- 1 0 0 241, 0 Nov 17 2013 /dev/test 2、name 名字 name:设备驱动名,一看到char*这种类型,很大可能用cat /proc/devices可以看到.3、fops 驱动接口集合 fops:指针类型,一般情况下如果形参是指针,那么很大可能它会在调用函数中被初始化 4)编译驱动a.把程序拷贝到虚拟机b.编译 makemake之后生成一个可执行文件led_driver.koc. arm-none-linux-gnueabi-gcc -o app app.c程序执行:a.插入和拔出驱动模块# insmod led_drive

10、r.ko # mknod /dev/led c 249 0# ./app on led灯亮# ./app off led灯灭第4章 界面设计4.1 智能家居系统界面设计此页面为系统首页,已注册过的用户输入自己的用户名和密码登录智能家居系统。登录后即可将以设置的命令自动发送至服务器,服务器接受命令后执行相关代码,即可完成对开发板的控制。第5章 系统实现本系统设计的目的是向用户提供一个使用Android APP客户端并通过网络控制智能家居设备的系统。原理是基于Socket编程进行客户端和服务端的通讯,实现对智能家居设备的控制。5.1 Android客户端Android客户端用Eclipse进行编程

11、,使用Java语言,负责用户登录和命令发送,具体实现代码如下:(已省略源码中的导包代码)public class MainActivity extends Activity private EditText editText_name; private EditText editText_pwd; private Button button_login; / private Socket clientSocket; / 用来处理子线程发送过来的消息的 private Handler mHandler = new Handler() /处理消息 switch (msg.what) case 0x

12、11: /获取消息中的内容 String buffer =(String) msg.obj; /展示在UI界面上 Toast.makeText(MainActivity.this, buffer, Toast.LENGTH_SHORT).show(); break; default: ; ; Override /当我们运行应用程序的时候,就会自动的调用这个方法 protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); / 指定这个Activity所使用的布局 / 1. 获取布局中

13、的控件,根据控件id来获取 / 2. 为按钮设置监听器,用来监听用户的点击事件 button_login.setOnClickListener(new OnClickListener() / 当用户点击按钮的时候,会自动的调用这个方法 public void onClick(View v) / 1. 获取用户名,密码 String name = editText_name.getText().toString(); String pwd = editText_pwd.getText().toString(); / 2. 与服务端建立连接,就需要创建子线程,并启动子线程 new Thread(n

14、ew ConnectionThread(name,pwd).start(); ); /创建子线程 public class ConnectionThread implements Runnable private String name; private String pwd; /构造方法 public ConnectionThread(String name,String pwd) this.name =name; this.pwd =pwd; Override / 线程的执行体 public void run() try / 1. 与服务器建立连接 clientSocket =new So

15、cket(); / 2. 获取网络的输入,输出流 OutputStream outputStream =clientSocket.getOutputStream(); InputStream inputStream =clientSocket.getInputStream(); /将这个输入流转换为缓冲流 BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream); / 3. 接受服务端的信息 readMsgServer(bufferedReader); / 4. 发送用戶名和密碼 w

16、riteMsgServer(outputStream,name,pwd); / 5. 接收服务端发送过来的验证信息 /writeMsgServer(outputStream,on); outputStream.write(.getBytes(),0,.length(); outputStream.flush(); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); / 接收服务端的信息 public void readMsgServer(BufferedReader bufferedReade

17、r) String line=; String buffer= try /获取服务端的数据 while(line=bufferedReader.readLine()!=null) if(line.equals(start) continue; else if(line.equals(end break; else /真正的数据 buffer =line+buffer; / 发送消息给UI主线程,并展示在UI界面上 Message message =Message.obtain(); message.what =0x11; /消息的类型 message.obj=buffer.toString()

18、; /消息的內容 /发送消息 mHandler.sendMessage(message); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); / 发送消息給服务端 public void writeMsgServer(OutputStream outputStream,String name,String pwd) /发送用戶名 outputStream.write(name.getBytes(), 0, name.length(); outputStream.flush(); /发送密码

19、outputStream.write(pwd.getBytes(),0,pwd.length();5.2 Ubuntu服务端Ubuntu服务端用与接受客户端发送的命令,并执行相应代码,完成客户端对开发板的控制,使用C语言进行编写,具体实现代码如下:(已省略源码中头文件代码)void *do_client(void *arg);int main(void) int ret; int servfd; /*1.建立socket套接字*/ servfd = socket(AF_INET,SOCK_STREAM,0); if(-1 = servfd) perror(socket return -1; /

20、*填充服务器地址和端口*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr); servaddr.sin_family = AF_INET; /ipv4 servaddr.sin_port = htons(PORT); /端口号 socklen_t slen = sizeof(servaddr); /*2.bind 绑定服务器的ip地址,端口号*/ ret = bind(servfd,(struct sockaddr *)&servaddr,slen); if(-1 = ret)bind /*3.listen 主动

21、监听客户端,客户端连接最多为100*/ ret = listen(servfd,100);listen int newfd; pthread_t tid; while(1) /*4.accept 接受客户端,并且为新连接的客户端 分配一个新的文件描述符去操作它*/ newfd = accept(servfd,NULL,NULL); if(newfd %d connect success.n,newfd); /*为每个客户创建一个线程去维护它*/ ret = pthread_create(&tid,NULL,do_client,&newfd); if(0 != ret) perror(pthre

22、ad_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 /*5.通信*/ memset(buf,0,sizeof(buf); ret = read(newfd,buf,sizeof(buf)-1); if(ret printf(readdata: %sn,buf); /*发送数

23、据给客户端*/ write(newfd,str,strlen(str); pthread_exit(NULL);5.3 Ubuntu客户端Ubuntu客户端用与项目初期, Android客户端尚未开发时,测试服务端接所编写的基于C语言的Ubuntu客户端,具体实现代码如下: int clifd; char bufBUFSZ; clifd = socket(AF_INET,SOCK_STREAM,0); if(-1 = clifd) /*2.conenct服务器*/ ret = connect(clifd,(struct sockaddr *)&connect struct pollfd pfd2; pfd0.fd = 0; pfd0.events = POLLIN; /不阻塞的读 pfd1.fd = clifd; pfd1.events = POLLIN; /*3.通信*/ ret = poll(pfd,2,-1); /至少有一个文件描述符返回 if(pfd0.revents = POLLIN) /*从终端读取数据*/

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1