版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、成績(jī): 電子與信息工程學(xué)院嵌入式體系結(jié)構(gòu)與編程項(xiàng) 目 設(shè) 計(jì) 報(bào) 告 書(shū) 題 目 智能家居系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā) 姓 名 學(xué)號(hào) 同組成員 專(zhuān)業(yè)、年級(jí) 2013級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè) 指導(dǎo)教師 2015 年 12 月自我總結(jié): 評(píng)語(yǔ): 老師簽名:目錄目錄1第1章 引言3第2章 工具軟件與技術(shù)基礎(chǔ)42.1 智能家居系統(tǒng)的開(kāi)發(fā)環(huán)境和工具42.2智能家居系統(tǒng)的技術(shù)路線42.3 設(shè)備連接5第3章 系統(tǒng)總體設(shè)計(jì)63.1 智能家居系統(tǒng)需求分析63.2 開(kāi)發(fā)框架63.3 具體實(shí)現(xiàn)設(shè)計(jì)73.3.1如何點(diǎn)亮LED燈73.3.2 Linux內(nèi)核編譯及配置83.3.3內(nèi)核模塊編程9第4章 界面設(shè)計(jì)114.1 智能家居系統(tǒng)
2、界面設(shè)計(jì)11第5章 系統(tǒng)實(shí)現(xiàn)125.1 Android客戶端125.2 Ubuntu服務(wù)端165.3 Ubuntu客戶端185.4 Linux內(nèi)核驅(qū)動(dòng)205.5 LED裸奔代碼21第6章 結(jié)束語(yǔ)23第1章 引言當(dāng)今社會(huì),隨著生活質(zhì)量的日益改善和生活節(jié)奏的不斷加快,人們的工作、生活日益信息化。信息化社會(huì)改變了人們的生活方式與工作習(xí)慣,使得家居系統(tǒng)的智能化成為一種消費(fèi)需求,智能家居系統(tǒng)越來(lái)越被重視。因此,將家庭中各種通信設(shè)備、家用電器和家庭安保裝置通過(guò)家居控制系統(tǒng)進(jìn)行整合,并進(jìn)行遠(yuǎn)程控制和管理,已經(jīng)成為近年來(lái)一個(gè)熱門(mén)研究課題。 迄今為止,智能家居還沒(méi)有一個(gè)普遍認(rèn)同的統(tǒng)一的定義。通常智能家居系統(tǒng)利用
3、先進(jìn)的計(jì)算機(jī)和網(wǎng)絡(luò)通訊技術(shù)將與家居生活有關(guān)的各種各樣的子系統(tǒng),通過(guò)特定的網(wǎng)絡(luò)有機(jī)地結(jié)合在一起,通過(guò)科學(xué)管理,讓家居生活更加舒適、有效、安全和節(jié)能。以住宅為平臺(tái),兼?zhèn)浣ㄖ⒕W(wǎng)絡(luò)通信、信息家電、設(shè)備自動(dòng)化,集系統(tǒng)、結(jié)構(gòu)、服務(wù)、管理、控制為一體的高效、舒適、安全、便利、環(huán)保的居住環(huán)境。智能家居包含智能照明、電動(dòng)窗簾、背景音樂(lè)、安防報(bào)警、樓宇對(duì)講、遠(yuǎn)程控制等方面。傳統(tǒng)的家居智能控制系統(tǒng)一般采用有線方式來(lái)組建,如同軸電纜、USB、CAN總線等。但有線網(wǎng)絡(luò)具有布線麻煩,可擴(kuò)展性差等固有的缺點(diǎn),限制了有線網(wǎng)絡(luò)技術(shù)在智能家居系統(tǒng)中的發(fā)展。因此,基于物聯(lián)網(wǎng),將無(wú)線網(wǎng)絡(luò)技術(shù)應(yīng)用于家庭網(wǎng)絡(luò)己成為大勢(shì)所趨。這不僅僅因
4、為無(wú)線網(wǎng)絡(luò)具有更大的靈活性、流動(dòng)性,省去了布線的麻煩,更重要的是它符合家居控制網(wǎng)絡(luò)的通訊特點(diǎn)。無(wú)線家居網(wǎng)絡(luò)將人們生活與工作的廣袤空間濃縮于人類(lèi)的雙手可以掌控的距離。此次我們圍繞基于網(wǎng)絡(luò)的智能家居系統(tǒng)開(kāi)發(fā),簡(jiǎn)單的實(shí)現(xiàn)了使用網(wǎng)絡(luò)對(duì)嵌入式設(shè)備的控制。第2章 工具軟件與技術(shù)基礎(chǔ)2.1 智能家居系統(tǒng)的開(kāi)發(fā)環(huán)境和工具智能家居系統(tǒng)的開(kāi)發(fā)工具主要是:Ubuntu系統(tǒng)、putty、Eclipse。Ubuntu(烏班圖)是一個(gè)以桌面應(yīng)用為主的基于Linux內(nèi)核開(kāi)發(fā)的操作系統(tǒng),其名稱(chēng)來(lái)自非洲南部祖魯語(yǔ)或豪薩語(yǔ)的“ubuntu”一詞,意思是“人性”、“我的存在是因?yàn)榇蠹业拇嬖凇?,是非洲傳統(tǒng)的一種價(jià)值觀,類(lèi)似華人社會(huì)的
5、“仁愛(ài)”思想。Ubuntu基于Debian發(fā)行版和GNOME桌面環(huán)境,而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity,與Debian的不同在于它每6個(gè)月會(huì)發(fā)布一個(gè)新版本。Ubuntu的目標(biāo)在于為一般用戶提供一個(gè)最新的、同時(shí)又相當(dāng)穩(wěn)定的主要由自由軟件構(gòu)建而成的操作系統(tǒng)。Ubuntu具有龐大的社區(qū)力量,用戶可以方便地從社區(qū)獲得幫助。2013年1月3日,Ubuntu正式發(fā)布面向智能手機(jī)的移動(dòng)操作系統(tǒng)。ubuntu基于linux的免費(fèi)開(kāi)源桌面PC操作系統(tǒng),十分契合英特爾的超極本定位,支持x86、64位和ppc架構(gòu)。putty是一個(gè)Telnet、SSH、rlogin、純T
6、CP以及串行接口連接軟件。較早的版本僅支持Windows平臺(tái),在最近的版本中開(kāi)始支持各類(lèi)Unix平臺(tái),并打算移植至Mac OS X上。除了官方版本外,有許多第三方的團(tuán)體或個(gè)人將putty移植到其他平臺(tái)上,像是以Symbian為基礎(chǔ)的移動(dòng)電話。putty為一開(kāi)放源代碼軟件,主要由Simon Tatham維護(hù),使用MIT licence授權(quán)。隨著Linux在服務(wù)器端應(yīng)用的普及,Linux系統(tǒng)管理越來(lái)越依賴(lài)于遠(yuǎn)程。在各種遠(yuǎn)程登錄工具中,Putty是出色的工具之一。putty是一個(gè)免費(fèi)的、Windows 32平臺(tái)下的telnet、rlogin和ssh客戶端,但是功能絲毫不遜色于商業(yè)的telnet類(lèi)工具
7、。Eclipse 是一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開(kāi)發(fā)工具(Java Development Kit,JDK)。使用Eclipse添加Android SDK和ADT后可進(jìn)行Android項(xiàng)目的編寫(xiě)。2.2智能家居系統(tǒng)的技術(shù)路線智能家居系統(tǒng)采用C-S模式,客戶端基于Android開(kāi)發(fā),服務(wù)端基于C開(kāi)發(fā),服務(wù)端與客戶端采用Socket網(wǎng)絡(luò)編程來(lái)進(jìn)行通訊。服務(wù)端主要對(duì)開(kāi)發(fā)板上各傳感器的數(shù)據(jù)進(jìn)行處理、響應(yīng)客戶端的各種請(qǐng)求,服務(wù)端主要對(duì)從服務(wù)器獲取的信息進(jìn)
8、行處理展示,同時(shí)給服務(wù)器發(fā)送控制信息,進(jìn)行從而實(shí)現(xiàn)對(duì)開(kāi)發(fā)板上某些功能部件的的控制。主要用到的技術(shù)是:Java Socket編程、C Socket編程、Ubuntu下Vim編輯器的使用、Linux網(wǎng)絡(luò)編程、相關(guān)驅(qū)動(dòng)的開(kāi)發(fā)、putty串口連接開(kāi)發(fā)板、TFTP(簡(jiǎn)單文件傳輸協(xié)議)進(jìn)行文件下載。2.3 設(shè)備連接開(kāi)發(fā)板的串口與計(jì)算機(jī)串口使用串口線進(jìn)行連接,將開(kāi)發(fā)板使用網(wǎng)線接入局域網(wǎng),再將當(dāng)前計(jì)算機(jī)接入當(dāng)前開(kāi)發(fā)板的所在的局域網(wǎng),接通開(kāi)發(fā)板電源,同時(shí)將開(kāi)發(fā)板、計(jì)算機(jī)中Windows系統(tǒng)和Ubuntu系統(tǒng)下三者的IP設(shè)置在同一網(wǎng)段,設(shè)置開(kāi)發(fā)板、Windows和Ubuntu的網(wǎng)關(guān)為同一網(wǎng)關(guān),此時(shí)開(kāi)發(fā)板的服務(wù)端是
9、Ubuntu。第3章 系統(tǒng)總體設(shè)計(jì)3.1 智能家居系統(tǒng)需求分析本系統(tǒng)設(shè)計(jì)的目的是向用戶提供一個(gè)通過(guò)網(wǎng)絡(luò)控制智能家居設(shè)備的系統(tǒng)。通過(guò)Socket編程進(jìn)行客戶端和服務(wù)端的通訊,實(shí)現(xiàn)對(duì)智能家居設(shè)備的控制。隨著電子技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,人們的生活方式日益發(fā)生著變化,人們對(duì)于生活有了更高層次的追求。大家不再因擁有一個(gè)可以居住的空間而感到滿足,更希望自己的家庭生活是便利的、舒適的、安全的,并且還兼具人性化、智能化,從而產(chǎn)生了智能家居系統(tǒng)1。與普通的家居相比,智能家居不僅具有一般的居住功能,也能提供舒適安全、高品位且宜人的家庭生活空間,還能提供全方位的信息交換功能,幫助家庭與外部保持信息交流暢通,優(yōu)化人
10、們的生活方式,幫助人們有效安排時(shí)間,增強(qiáng)家居生活的安全感,節(jié)約能源。因此,智能家居必然成為今后日常生活的一種趨勢(shì)。而對(duì)智能家居系統(tǒng)的需求也將隨著人們對(duì)生活品質(zhì)的追求而發(fā)生著變化,因此,智能家居系統(tǒng)也擁有著良好的發(fā)展前景。3.2 開(kāi)發(fā)框架基本的嵌入式產(chǎn)品框架:開(kāi)發(fā)模式:實(shí)現(xiàn)過(guò)程:3.3 具體實(shí)現(xiàn)設(shè)計(jì)3.3.1如何點(diǎn)亮LED燈1)原理1.查看S5PC100開(kāi)發(fā)手冊(cè),找到4個(gè)LED燈的對(duì)應(yīng)引腳GPG3_0/3;2.要點(diǎn)亮LED燈,必須在LED兩端有正向壓降,即GPG3_0(LED4),GPG3_1(LED1),GPG3_2 (LED2),GPG3_3(LED3)要置為高電平;3.控制寄存器:GPG3
11、CON設(shè)置為輸出引腳(GPG3CON |= 0x1111 0);4.數(shù)據(jù)寄存器:GPG3DAT設(shè)置為高電平(GPG3DAT |= 0xf );clientSocket =new Socket();clientSocket.connect(new InetSocketAddress(, 7775);/ 2. 獲取網(wǎng)絡(luò)的輸入,輸出流OutputStream outputStream =clientSocket.getOutputStream();InputStream inputStream =clientSocket.getInputStream();/將這個(gè)輸入流轉(zhuǎn)換為
12、緩沖流BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream);/ 3. 接受服務(wù)端的信息readMsgServer(bufferedReader);/ 4. 發(fā)送用戶名和密碼writeMsgServer(outputStream,name,pwd);/ 5. 接收服務(wù)端發(fā)送過(guò)來(lái)的驗(yàn)證信息readMsgServer(bufferedReader);/writeMsgServer(outputStream,on);outputStream.write(on.getBytes(),0,o
13、n.length();outputStream.flush(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/ 接收服務(wù)端的信息public void readMsgServer(BufferedReader bufferedReader) String line=;String buffer=;try /獲取服務(wù)端的數(shù)據(jù)while(line=bufferedReader.readLine()!=null)if(line.equals(start)continue;else if(lin
14、e.equals(end)break;else/真正的數(shù)據(jù)buffer =line+buffer;/System.out.println(-+buffer.toString();/ 發(fā)送消息給UI主線程,并展示在UI界面上Message message =Message.obtain();message.what =0x11;/消息的類(lèi)型message.obj=buffer.toString();/消息的內(nèi)容/發(fā)送消息mHandler.sendMessage(message); catch (IOException e) / TODO Auto-generated catch blocke.p
15、rintStackTrace();/ 發(fā)送消息給服務(wù)端public void writeMsgServer(OutputStream outputStream,String name,String pwd) try /發(fā)送用戶名outputStream.write(name.getBytes(), 0, name.length();outputStream.flush();/發(fā)送密碼outputStream.write(pwd.getBytes(),0,pwd.length();outputStream.flush(); catch (IOException e) / TODO Auto-ge
16、nerated catch blocke.printStackTrace();5.2 Ubuntu服務(wù)端Ubuntu服務(wù)端用與接受客戶端發(fā)送的命令,并執(zhí)行相應(yīng)代碼,完成客戶端對(duì)開(kāi)發(fā)板的控制,使用C語(yǔ)言進(jìn)行編寫(xiě),具體實(shí)現(xiàn)代碼如下:(已省略源碼中頭文件代碼)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; /*填充服務(wù)器地址和端口*
17、/struct sockaddr_in servaddr;memset(&servaddr,0,sizeof(servaddr);servaddr.sin_family = AF_INET;/ipv4servaddr.sin_port = htons(PORT); /端口號(hào)servaddr.sin_addr.s_addr = inet_addr(SERVIP);/服務(wù)器地址socklen_t slen = sizeof(servaddr);/*2.bind 綁定服務(wù)器的ip地址,端口號(hào)*/ret = bind(servfd,(struct sockaddr *)&servaddr,slen);
18、if(-1 = ret) perror(bind);return -1;/*3.listen 主動(dòng)監(jiān)聽(tīng)客戶端,客戶端連接最多為100*/ret = listen(servfd,100);if(-1 = ret) perror(listen);return -1; int newfd;pthread_t tid;while(1) /*4.accept 接受客戶端,并且為新連接的客戶端 分配一個(gè)新的文件描述符去操作它*/newfd = accept(servfd,NULL,NULL);if(newfd %d connect success.n,newfd);/*為每個(gè)客戶創(chuàng)建一個(gè)線程去維護(hù)它*/r
19、et = 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
20、);ret = read(newfd,buf,sizeof(buf)-1);if(ret 0) printf(readdata: %sn,buf); /*發(fā)送數(shù)據(jù)給客戶端*/write(newfd,str,strlen(str); pthread_exit(NULL);5.3 Ubuntu客戶端Ubuntu客戶端用與項(xiàng)目初期, Android客戶端尚未開(kāi)發(fā)時(shí),測(cè)試服務(wù)端接所編寫(xiě)的基于C語(yǔ)言的Ubuntu客戶端,具體實(shí)現(xiàn)代碼如下:(已省略源碼中頭文件代碼)int main(void)int clifd;int ret;char bufBUFSZ; /*1.建立socket套接字*/clifd =
21、 socket(AF_INET,SOCK_STREAM,0);if(-1 = clifd) perror(socket);return -1; /*填充服務(wù)器地址和端口*/struct sockaddr_in servaddr;memset(&servaddr,0,sizeof(servaddr);servaddr.sin_family = AF_INET;/ipv4servaddr.sin_port = htons(PORT); /端口號(hào)servaddr.sin_addr.s_addr = inet_addr(SERVIP);/服務(wù)器地址socklen_t slen = sizeof(ser
22、vaddr);/*2.conenct服務(wù)器*/ret = connect(clifd,(struct sockaddr *)&servaddr,slen);if(-1 = ret) perror(connect);return -1;struct pollfd pfd2;pfd0.fd = 0;pfd0.events = POLLIN; /不阻塞的讀 pfd1.fd = clifd;pfd1.events = POLLIN; /不阻塞的讀 /*3.通信*/while(1) ret = poll(pfd,2,-1);if(ret 0)/至少有一個(gè)文件描述符返回 if(pfd0.revents =
23、 POLLIN) /*從終端讀取數(shù)據(jù)*/memset(buf,0,sizeof(buf);ret = read(0,buf,sizeof(buf)-1);if(ret 0)write(clifd,buf,ret);if(pfd1.revents = POLLIN) /*服務(wù)器接收數(shù)據(jù)*/memset(buf,0,sizeof(buf);ret = read(clifd,buf,sizeof(buf)-1);if(ret 0)printf(serversay : %sn,buf);else /*錯(cuò)誤或者超時(shí)*/break;close(clifd); return 0;5.4 Linux內(nèi)核驅(qū)動(dòng)i
24、nt main(int argc,char *argv)int fd;if(argc 2)printf(Usage: on/offn);return -1;fd = open(/dev/led,O_RDWR);if(fd 0)perror(open);return -1;if(!strncasecmp(on,argv1,2)ioctl(fd,LED_ON);else if(!strncasecmp(off,argv1,3)ioctl(fd,LED_OFF);return 0;5.5 LED裸奔代碼LED裸奔代碼用于控制CPU引腳電壓,從而間接控制LED的點(diǎn)亮與熄滅,具體實(shí)現(xiàn)代碼如下:(已省略源
25、碼中的頭文件)#define GPG3CON (*(volatile unsigned long *)0xE03001C0)#define GPG3DAT (*(volatile unsigned long *)0xE03001C4)int main(int argc,char *argv) led_init();led_flow_water();return 0;void led_init(void) /*設(shè)置寄存器,把15-0位清零*/GPG3CON &= (0xffff 0); /*把led1,led2 GPJ2CON引腳設(shè)置為輸出*/GPG3CON |= (0x1111 0);/*點(diǎn)亮所有l(wèi)ed燈*/void led_on(void) /*把相應(yīng)的數(shù)據(jù)寄存器GPJ2DAT位設(shè)置為高電平*/GPG3DAT |= 0xf 0; return 0;/*關(guān)閉所有l(wèi)ed燈*/void led_off(void)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度店長(zhǎng)聘用合同特殊條款適用性分析
- 二零二五年度牛羊草料進(jìn)口代理服務(wù)合同樣本2篇
- 二零二五年度出國(guó)留學(xué)學(xué)費(fèi)支付及管理合同4篇
- 二零二五年度城市綠化打井工程監(jiān)理合同8篇
- 2025年度個(gè)人小型挖機(jī)租賃服務(wù)規(guī)范合同4篇
- 二零二五版嬰幼兒奶粉品牌授權(quán)及產(chǎn)品供應(yīng)鏈管理合同4篇
- 2025年度個(gè)人二手車(chē)轉(zhuǎn)讓及二手車(chē)增值服務(wù)合同
- 二零二五年度木工材料供應(yīng)鏈管理合同4篇
- 2025年度個(gè)人工程車(chē)租賃及道路救援服務(wù)合同2篇
- 2025年度個(gè)人車(chē)輛購(gòu)置貸款延期還款合同4篇
- 回收二手機(jī)免責(zé)協(xié)議書(shū)模板
- (正式版)JC∕T 60023-2024 石膏條板應(yīng)用技術(shù)規(guī)程
- 人教版高中生物學(xué)新舊教材知識(shí)差異盤(pán)點(diǎn)
- (權(quán)變)領(lǐng)導(dǎo)行為理論
- 2024屆上海市浦東新區(qū)高三二模英語(yǔ)卷
- 2024年智慧工地相關(guān)知識(shí)考試試題及答案
- YY/T 0681.2-2010無(wú)菌醫(yī)療器械包裝試驗(yàn)方法第2部分:軟性屏障材料的密封強(qiáng)度
- GB/T 8005.2-2011鋁及鋁合金術(shù)語(yǔ)第2部分:化學(xué)分析
- 不動(dòng)產(chǎn)登記實(shí)務(wù)培訓(xùn)教程課件
- 不銹鋼制作合同范本(3篇)
- 2023年系統(tǒng)性硬化病診斷及診療指南
評(píng)論
0/150
提交評(píng)論