智能家居设计与开发Word文档格式.docx

上传人:b****6 文档编号:21319479 上传时间:2023-01-29 格式:DOCX 页数:21 大小:208.81KB
下载 相关 举报
智能家居设计与开发Word文档格式.docx_第1页
第1页 / 共21页
智能家居设计与开发Word文档格式.docx_第2页
第2页 / 共21页
智能家居设计与开发Word文档格式.docx_第3页
第3页 / 共21页
智能家居设计与开发Word文档格式.docx_第4页
第4页 / 共21页
智能家居设计与开发Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

智能家居设计与开发Word文档格式.docx

《智能家居设计与开发Word文档格式.docx》由会员分享,可在线阅读,更多相关《智能家居设计与开发Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

智能家居设计与开发Word文档格式.docx

ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。

putty是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。

较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至MacOSX上。

除了官方版本外,有许多第三方的团体或个人将putty移植到其他平台上,像是以Symbian为基础的移动电话。

putty为一开放源代码软件,主要由SimonTatham维护,使用MITlicence授权。

随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。

在各种远程登录工具中,Putty是出色的工具之一。

putty是一个免费的、Windows32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。

使用Eclipse添加AndroidSDK和ADT后可进行Android项目的编写。

2.2智能家居系统的技术路线

智能家居系统采用C-S模式,客户端基于Android开发,服务端基于C开发,服务端与客户端采用Socket网络编程来进行通讯。

服务端主要对开发板上各传感器的数据进行处理、响应客户端的各种请求,服务端主要对从服务器获取的信息进行处理展示,同时给服务器发送控制信息,进行从而实现对开发板上某些功能部件的的控制。

主要用到的技术是:

JavaSocket编程、CSocket编程、Ubuntu下Vim编辑器的使用、Linux网络编程、相关驱动的开发、putty串口连接开发板、TFTP(简单文件传输协议)进行文件下载。

2.3设备连接

开发板的串口与计算机串口使用串口线进行连接,将开发板使用网线接入局域网,再将当前计算机接入当前开发板的所在的局域网,接通开发板电源,同时将开发板、计算机中Windows系统和Ubuntu系统下三者的IP设置在同一网段,设置开发板、Windows和Ubuntu的网关为同一网关,此时开发板的服务端是Ubuntu。

第3章系统总体设计

3.1智能家居系统需求分析

本系统设计的目的是向用户提供一个通过网络控制智能家居设备的系统。

通过Socket编程进行客户端和服务端的通讯,实现对智能家居设备的控制。

随着电子技术和网络技术的飞速发展,人们的生活方式日益发生着变化,人们对于生活有了更高层次的追求。

大家不再因拥有一个可以居住的空间而感到满足,更希望自己的家庭生活是便利的、舒适的、安全的,并且还兼具人性化、智能化,从而产生了智能家居系统[1]。

与普通的家居相比,智能家居不仅具有一般的居住功能,也能提供舒适安全、高品位且宜人的家庭生活空间,还能提供全方位的信息交换功能,帮助家庭与外部保持信息交流畅通,优化人们的生活方式,帮助人们有效安排时间,增强家居生活的安全感,节约能源。

因此,智能家居必然成为今后日常生活的一种趋势。

而对智能家居系统的需求也将随着人们对生活品质的追求而发生着变化,因此,智能家居系统也拥有着良好的发展前景。

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(LED3)要置为高电平;

3.控制寄存器:

GPG3CON设置为输出引脚(GPG3CON|=0x1111<

<

0);

4.数据寄存器:

GPG3DAT设置为高电平(GPG3DAT|=0xf<

2)运行裸奔代码

1.使用C语言编译点亮LED灯的逻辑代码;

2.设置好开发板上的参数

--serveripsetserverip+服务器ip地址

--ipaddrsetipaddr+开发板ip

--gatewayipsetgatewayip+网关

测试开发板与服务器的连通性

ping+服务器ip地址

3.设置启动方式

setbootcmdtftp0x20008000zImage\;

bootm0x20008000

(这里的0x20008000是寄存器的地址,我们需要把在Ubuntu下编译好的文件下载到这个寄存器)

go0x20008000回车(LED灯亮)

3.3.2Linux内核编译及配置

3.3.3内核模块编程

1)先进入Linux内核所在目录,并调用topMakefile生成test.o,运行MODPOST生成临时文件test.mod.c,然后根据test.mod.c生成test.mod.o(产生了Linux所采用的可执行/可链接的ELF文件格式)最后,将test.o和test.mod.o链接生成test.ko

2)模块的安装

1.makemodules_install

命令把所有的.ko文件拷出来放到文件系统的

/lib/modules/2.6.30.4-liy/kernel/下的相应目录(自动创建目录)

2.指定安装系统的路径放到我们开发板的根文件系统

makemodules_installINSTALL_MOD_PATH=/nfs/rootfs

3)注册字符设备驱动

linux/fs.h

staticinlineintregister_chrdev(unsignedintmajor,constchar*name,

conststructfile_operations*fops)

1、major主设备号

a)内核主设备号文档.

Documentation/device.txt

240-254charLOCAL/EXPERIMENTALUSE

b)cat/proc/devices

c)建立设备文件:

mknod/dev/testc2410

crw-r--r--100241,0Nov172013/dev/test

2、name名字

name:

设备驱动名,一看到char*这种类型,很大可能用cat/proc/devices可以看到.

3、fops驱动接口集合

fops:

指针类型,一般情况下如果形参是指针,那么很大可能它会在调用函数中被初始化

4)编译驱动

a.把程序拷贝到虚拟机

b.编译make

make之后生成一个可执行文件led_driver.ko

c.arm-none-linux-gnueabi-gcc-oappapp.c

程序执行:

a.插入和拔出驱动模块

#insmodled_driver.ko

#mknod/dev/ledc2490

#./apponled灯亮

#./appoffled灯灭

 

第4章界面设计

4.1智能家居系统界面设计

此页面为系统首页,已注册过的用户输入自己的用户名和密码登录智能家居系统。

登录后即可将以设置的命令自动发送至服务器,服务器接受命令后执行相关代码,即可完成对开发板的控制。

第5章系统实现

本系统设计的目的是向用户提供一个使用AndroidAPP客户端并通过网络控制智能家居设备的系统。

原理是基于Socket编程进行客户端和服务端的通讯,实现对智能家居设备的控制。

5.1Android客户端

Android客户端用Eclipse进行编程,使用Java语言,负责用户登录和命令发送,具体实现代码如下:

(已省略源码中的导包代码)

publicclassMainActivityextendsActivity{

privateEditTexteditText_name;

privateEditTexteditText_pwd;

privateButtonbutton_login;

//

privateSocketclientSocket;

//用来处理子线程发送过来的消息的

privateHandlermHandler=newHandler(){

//处理消息

publicvoidhandleMessage(android.os.Messagemsg){

switch(msg.what){

case0x11:

//获取消息中的内容

Stringbuffer=(String)msg.obj;

//展示在UI界面上

Toast.makeText(MainActivity.this,buffer,Toast.LENGTH_SHORT).show();

break;

default:

}

};

};

@Override

//当我们运行应用程序的时候,就会自动的调用这个方法

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

//指定这个Activity所使用的布局

setContentView(R.layout.activity_main);

//1.获取布局中的控件,根据控件id来获取

editText_name=(EditText)findViewById(R.id.editText1);

editText_pwd=(EditText)findViewById(R.id.editText2);

button_login=(Button)findViewById(R.id.button1);

//2.为按钮设置监听器,用来监听用户的点击事件

button_login.setOnClickListener(newOnClickListener(){

//当用户点击按钮的时候,会自动的调用这个方法

publicvoidonClick(Viewv){

//1.获取用户名,密码

Stringname=editText_name.getText().toString();

Stringpwd=editText_pwd.getText().toString();

//2.与服务端建立连接,就需要创建子线程,并启动子线程

newThread(newConnectionThread(name,pwd)).start();

}

});

//创建子线程

publicclassConnectionThreadimplementsRunnable{

privateStringname;

privateStringpwd;

//构造方法

publicConnectionThread(Stringname,Stringpwd){

this.name=name;

this.pwd=pwd;

}

@Override

//线程的执行体

publicvoidrun(){

try{

//1.与服务器建立连接

System.out.println("

---與服務器建立連接-->

>

"

);

clientSocket=newSocket();

clientSocket.connect(newInetSocketAddress("

172.20.135.6"

7775));

//2.获取网络的输入,输出流

OutputStreamoutputStream=clientSocket.getOutputStream();

InputStreaminputStream=clientSocket.getInputStream();

//将这个输入流转换为缓冲流

BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(inputStream));

//3.接受服务端的信息

readMsgServer(bufferedReader);

//4.发送用戶名和密碼

writeMsgServer(outputStream,name,pwd);

//5.接收服务端发送过来的验证信息

//writeMsgServer(outputStream,"

on"

outputStream.write("

.getBytes(),0,"

.length());

outputStream.flush();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

//接收服务端的信息

publicvoidreadMsgServer(BufferedReaderbufferedReader){

Stringline="

;

Stringbuffer="

try{

//获取服务端的数据

while((line=bufferedReader.readLine())!

=null){

if(line.equals("

start"

)){

continue;

}elseif(line.equals("

end"

break;

}else{

//真正的数据

buffer=line+buffer;

//System.out.println("

---->

+buffer.toString());

}

//发送消息给UI主线程,并展示在UI界面上

Messagemessage=Message.obtain();

message.what=0x11;

//消息的类型

message.obj=buffer.toString();

//消息的內容

//发送消息

mHandler.sendMessage(message);

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

//发送消息給服务端

publicvoidwriteMsgServer(OutputStreamoutputStream,Stringname,Stringpwd){

//发送用戶名

outputStream.write(name.getBytes(),0,name.length());

outputStream.flush();

//发送密码

outputStream.write(pwd.getBytes(),0,pwd.length());

}

5.2Ubuntu服务端

Ubuntu服务端用与接受客户端发送的命令,并执行相应代码,完成客户端对开发板的控制,使用C语言进行编写,具体实现代码如下:

(已省略源码中头文件代码)

void*do_client(void*arg);

intmain(void)

{intret;

intservfd;

/*1.建立socket套接字*/

servfd=socket(AF_INET,SOCK_STREAM,0);

if(-1==servfd)

{perror("

socket"

return-1;

/*填充服务器地址和端口*/

structsockaddr_inservaddr;

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_tslen=sizeof(servaddr);

/*2.bind绑定服务器的ip地址,端口号*/

ret=bind(servfd,(structsockaddr*)&

servaddr,slen);

if(-1==ret)

bind"

/*3.listen主动监听客户端,客户端连接最多为100*/

ret=listen(servfd,100);

listen"

intnewfd;

pthread_ttid;

while

(1)

{/*4.accept接受客户端,并且为新连接的客户端

分配一个新的文件描述符去操作它*/

newfd=accept(servfd,NULL,NULL);

if(newfd<

0)

{continue;

printf("

==>

%dconnectsuccess...\n"

newfd);

/*为每个客户创建一个线程去维护它*/

ret=pthread_create(&

tid,NULL,do_client,&

newfd);

if(0!

=ret)

{perror("

pthread_create"

return-1;

pthread_detach(tid);

close(servfd);

return0;

void*do_client(void*arg)

{intnewfd=*(int*)arg;

charbuf[BUFSZ]={0};

intret;

char*str="

haveatryandyouwillgofar"

{/*5.通信*/

memset(buf,0,sizeof(buf));

ret=read(newfd,buf,sizeof(buf)-1);

if(ret>

{printf("

readdata:

%s\n"

buf);

/*发送数据给客户端*/

write(newfd,str,strlen(str));

pthread_exit(NULL);

5.3Ubuntu客户端

Ubuntu客户端用与项目初期,Android客户端尚未开发时,测试服务端接所编写的基于C语言的Ubuntu客户端,具体实现代码如下:

{

intclifd;

charbuf[BUFSZ];

/*1.建立sock

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

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

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