




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、新型單片機(jī)講座課程設(shè)計(jì)報(bào)告 設(shè)計(jì)課題:嵌入式智能家居控制系統(tǒng) 專業(yè)班級(jí): 09電氣(1)班 學(xué) 號(hào): 學(xué)生姓名: 設(shè)計(jì)時(shí)間: 2012學(xué)年第一學(xué)期 物理與電子工程學(xué)院目 錄1智能家居控制系統(tǒng)總體方案設(shè)計(jì)11.1系統(tǒng)總體架構(gòu)設(shè)計(jì)12.嵌入式WEB服務(wù)器BOA的建立13界面設(shè)計(jì)、CGI程序和驅(qū)動(dòng)程序編寫33.2CGI簡(jiǎn)介43.3網(wǎng)頁(yè)提交數(shù)據(jù)的兩種方式:GET/POST53.4CGI程序的編寫63.5驅(qū)動(dòng)程序的編寫83.5.1傳感器信息采集驅(qū)動(dòng)83.5.2模擬開關(guān)控制驅(qū)動(dòng)104WEB嵌入式只能家居控制系統(tǒng)測(cè)試和應(yīng)用124.1軟件系統(tǒng)測(cè)試125總結(jié)與展望15參考文獻(xiàn)16附件17II1智能家居控制系統(tǒng)總
2、體方案設(shè)計(jì)1.1系統(tǒng)總體架構(gòu)設(shè)計(jì) 本文中整個(gè)控制系統(tǒng)那個(gè)分為3個(gè)模塊:中央處理器(ARM11),室內(nèi)信號(hào)監(jiān)測(cè)模塊,控制執(zhí)行模塊。中央處理器所在的模塊由于涉及到高頻信號(hào),普通制板均達(dá)不到要求,因此直接采用ARM核心板,設(shè)計(jì)相應(yīng)的控制板,兩者結(jié)合使用。從系統(tǒng)穩(wěn)定性和搭建服務(wù)器難度上考慮,linux系統(tǒng)成為不二的選擇。Linux系統(tǒng)平臺(tái)下容易搭建服務(wù)器,linux系統(tǒng)也不斷在被優(yōu)化,它的穩(wěn)定性更是經(jīng)受住了時(shí)間檢驗(yàn)。linux設(shè)備驅(qū)動(dòng)都是用C語言編寫的,對(duì)于學(xué)過C語言的我們更有利于深入。下面是系統(tǒng)的整體結(jié)構(gòu)圖:傳感器家 居 控 制 系 統(tǒng)BOA服務(wù)器Linux控制客戶端瀏覽器開關(guān)顯示 圖2-1系統(tǒng)結(jié)構(gòu)
3、圖2.嵌入式WEB服務(wù)器BOA的建立搭建BOA的主要步驟如下2:(1) 下載BOA服務(wù)器源碼,我們可以從網(wǎng)上下到boa-0.94.13.tar.gz 。將壓縮包解壓到linux系統(tǒng)任意目錄下。(2) 打開BOA位于內(nèi)核源碼中Boa/src/define.h,查看其DocumentRoot 后面的目錄,默認(rèn)為ect/boa。此目錄為Boa服務(wù)器的根目錄,當(dāng)boa服務(wù)器運(yùn)行后,會(huì)從該目錄讀取配置文件,配置文件中保存著服務(wù)器配置信息。用戶可根據(jù)需要對(duì)define.h中的根目錄進(jìn)行修改,一般情況下木有修改必要,本次設(shè)計(jì)也沒有對(duì)該項(xiàng)進(jìn)行修改。(3) 生成makefile文件:在boa/src/目錄下執(zhí)行
4、./configure命令。(4) 修改該makefile文件:因?yàn)橐赼rm環(huán)境下建立BOA服務(wù)器,所以要將makefile中的編譯器gcc改成arm-linux-gcc,在PC機(jī)上建立則無需修改。具體修改如下:找到CC=gcc 改為CC=arm-linux-gcc;找到CPP=gcc -E改為CPP=arm-linux-gcc -E。(5) 執(zhí)行#make命令。make編譯時(shí)用2.95.3以上的版本會(huì)出錯(cuò):util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: util.
5、o Error1。解決方法:修改compat.h中的#define TIMEZONE_OFFSET(foo) foo#->tm_gmtoff為:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 。(6) 去除調(diào)試編譯信息:#/boa程序所在目錄/arm-linux-strip boa(7) 配置BOA配置文件,配置文件中指定了網(wǎng)頁(yè)和cgi程序所在目錄等信息,具體如下3:l Port 80 /偵聽端口 l User root /用戶名l Group root /用戶組l ErrorLog /dev/console /錯(cuò)誤日志l AccessLog
6、 /dev/null /訪問日志l ServerName friendly-arm/服務(wù)器名稱l DocumentRoot /home/plg/指定文件根目錄l DirectoryIndex index.html/指定默認(rèn)首頁(yè)名稱l KeepAliveMax 1000/最大連接數(shù)l KeepAliveTimeout 10/設(shè)置連接超時(shí)時(shí)間 單位:Sl MimeTypes /etc/mime.types/設(shè)置媒體類型路徑l DefaultType text/plainl CGIPath /bin/cgi 程序所在位置l AddType application/x-httpd-cgi cgi以上是
7、本次畢業(yè)設(shè)計(jì)的配置,一般需要更改的地方有:User 和 Group 通常設(shè)為0 ;DocumentRoot 項(xiàng),根據(jù)實(shí)際情況設(shè)置網(wǎng)頁(yè)等文件所在的路徑,默認(rèn)在/www目錄下,考慮到ftp傳輸,故將其設(shè)置在了ftp傳輸?shù)母夸浵旅?home/plg。CGIPath項(xiàng)設(shè)置cgi程序所在位置,若根目錄下沒有bin 這個(gè)目錄,自動(dòng)會(huì)在根目錄下尋找cgi文件,也可以不修改,如果不修改,則需要將cgi程序同index.html一起放在根目錄下。其余采用默認(rèn),但需要注意的是,/etc/目錄下必須有mime.types文件,若沒有,只需要去linux PC系統(tǒng)里復(fù)制即可。接下來運(yùn)行BOA服務(wù)器,在PC端輸入開發(fā)
8、板設(shè)置的靜態(tài)IP地址(這里默認(rèn)是:30)。就可以看到index.html頁(yè)面了!至此BOA服務(wù)器搭建完成。3界面設(shè)計(jì)、CGI程序和驅(qū)動(dòng)程序編寫3.1界面設(shè)計(jì)網(wǎng)頁(yè)頁(yè)面主要有各種表格和圖片組成,用frontpage軟件足夠?qū)崿F(xiàn)。頁(yè)面的內(nèi)容可以根據(jù)實(shí)際需要進(jìn)行添加或刪減。對(duì)于我們電氣工程專業(yè)的學(xué)生來講,有兩個(gè)關(guān)鍵問題需要解決:1、 網(wǎng)頁(yè)用什么樣的格式向服務(wù)器提交數(shù)據(jù)。2、 服務(wù)器反饋回來的信息如何在網(wǎng)頁(yè)上表現(xiàn)出來。1) 網(wǎng)頁(yè)提交數(shù)據(jù)表格類型選?。涸趨⒖碱愃圃O(shè)計(jì)的時(shí)候,看到友善之臂的tiny210用戶手冊(cè)中的網(wǎng)頁(yè)管道控制LED例子1,其網(wǎng)頁(yè)控制輸入表格是用radio的:input
9、 type="radio" value="ping" name="type",這種一組可以包含多個(gè)不同值的輸入方式對(duì)設(shè)計(jì)是很有利的,因此,直接選用radio作為網(wǎng)頁(yè)提交數(shù)據(jù)的表格類型。2) 服務(wù)器反饋信息顯示:一般情況下,網(wǎng)頁(yè)數(shù)據(jù)更新需要用到其它語言編寫網(wǎng)頁(yè)腳本,現(xiàn)有的知識(shí)水平無法直接解決這個(gè)問題。退而求其次,決定使用C語言文件操作函數(shù)來對(duì)網(wǎng)頁(yè)源碼進(jìn)行修改。為了方便實(shí)現(xiàn)這個(gè)操作,在網(wǎng)頁(yè)設(shè)計(jì)時(shí),做了如下約定:1 網(wǎng)頁(yè)需要更新顯示的內(nèi)容用圖片顯示;2 網(wǎng)頁(yè)所調(diào)用的圖片采用統(tǒng)一命名,同一類圖片文件名僅相差一個(gè)字符;3 網(wǎng)頁(yè)要具備自動(dòng)刷新功能
10、;這樣做的好處是,用C語言文件操作函數(shù)修改一個(gè)字符,就能更改整個(gè)狀態(tài)顯示。3.2CGI簡(jiǎn)介1. 定義4:CGI(Common Gateway Interface)是HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上。2. 功能:絕大多數(shù)的CGI程序被用來解釋處理杰自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。CGI程序使網(wǎng)頁(yè)具有交互功能。3. 運(yùn)行環(huán)境:CGI程序在UNIX操作系統(tǒng)上CERN或NCSA格式的服務(wù)器上運(yùn)行。在其它操作系統(tǒng)(如:windows NT及windows95等)的服務(wù)器上也廣泛地使用CGI程序,同時(shí)它也適用于
11、各種類型機(jī)器。4. CGI處理步驟:通過Internet把用戶請(qǐng)求送到服務(wù)器。服務(wù)器接收用戶請(qǐng)求并交給CGI程序處理。CGI程序把處理結(jié)果傳送給服務(wù)器。服務(wù)器把結(jié)果送回到用戶??偨Y(jié)下,cgi程序就是網(wǎng)頁(yè)和PC機(jī)交談的工具,它沒有特定的語言規(guī)范,只是一種中間程序,我們可以用shell語言編寫,也可以用C語言編寫編程生成cgi文件。網(wǎng)頁(yè)在執(zhí)行ACTION=*.cgi的時(shí)候會(huì)調(diào)用*.cgi程序。本文設(shè)計(jì)最初參考網(wǎng)頁(yè)控制led例程,故仍然采取命名leds.cgi,以表對(duì)原作的感謝。一下是網(wǎng)頁(yè)部分源碼1: <form method="get" action="leds
12、.cgi" name="LED-TEST"> <div align="left"> <table border="0" width="280" align="center"> <tr> <td width="131"> <p align="center">類型</td> <td width="135"> <p align="
13、;center">速率</td> </tr> <tr> <td width="131"> <p align="center"> <input type="radio" value="ping" checked name="type">跑馬燈</td> <td width="135"> <p align="center"&
14、gt;<input type="radio" name="speed" value="slow" checked>慢速</td> </tr> <tr> <td width="131"> <p align="center"> <input type="radio" name="type" value="counter">計(jì)數(shù)器</
15、td>.這段源碼的第一句<form method="get" action="leds.cgi" name="LED-TEST">表示:當(dāng)用戶按下提交按鈕時(shí),網(wǎng)頁(yè)會(huì)以GET的方式向服務(wù)器傳輸提交的數(shù)據(jù),提交的數(shù)據(jù)保存在網(wǎng)頁(yè)環(huán)境變量QUERY_STRING中,然后調(diào)用leds.cgi程序,在CGI程序中用指令讀出QUERY_STRING中的內(nèi)容:用C語言很簡(jiǎn)單,令指針變量data=getenv("QUERY_STRING")即可。3.3網(wǎng)頁(yè)提交數(shù)據(jù)的兩種方式:GET/POST從效果上講GET和POS
16、T都是用來提交網(wǎng)頁(yè)數(shù)據(jù)的,而我們也只是討論到它們傳輸數(shù)據(jù)格式不同而已。在對(duì)數(shù)據(jù)處理時(shí),用GET方式比POST方式來的簡(jiǎn)單,因?yàn)镻OST必須用單表單,這處理起來相對(duì)麻煩5。在傳輸數(shù)據(jù)量方面,GET最多只能傳輸1024字節(jié),而且數(shù)據(jù)是以明文形式跟在url后面的,很顯然,這也會(huì)導(dǎo)致數(shù)據(jù)安全問題,因?yàn)槟愕馁~戶名和密碼可以在歷史記錄中被看到,造成泄漏5。POST沒有數(shù)據(jù)長(zhǎng)度上的限制,理論上可以無限大,只是受服務(wù)器處理能力限制。如果數(shù)據(jù)是以POST提交的話,則需要先讀取CONTENT_LENGTH環(huán)境變量, 取得輸入數(shù)據(jù)的長(zhǎng)度后, 再由標(biāo)準(zhǔn)輸入設(shè)備取得這個(gè)長(zhǎng)度的數(shù)據(jù)5。兩種方式提交的數(shù)據(jù)都有自己的編碼格式
17、,在網(wǎng)上可以查到相關(guān)資料,本次設(shè)計(jì)提交的數(shù)據(jù)比較簡(jiǎn)單,暫時(shí)也不用考慮安全問題,因此采用了GET的傳輸格式5。3.4CGI程序的編寫為了避免更多錯(cuò)誤,提高編程效率,在用CGI處理GET提交的數(shù)據(jù)之前,我用fprint函數(shù)對(duì)指針data獲取到的變量輸出到文本文件上,以此確定GET數(shù)據(jù)的真實(shí)格式,同樣的方法也適用POST,因?yàn)榫W(wǎng)上的資料只提供了編碼方式,卻沒有具體的實(shí)際數(shù)據(jù)給出。用fprint函數(shù)輸出后,得到了字符串:type1=ping3&type2=ping3&type3=ping2&type4=ping3.這樣一來就很好處理了:char *data;/指針變量,用于儲(chǔ)存
18、環(huán)境變量QUERY_STRING的字符串FILE *fp;/文件指針int type8=;/用來保存type的組別int ping8=;/用來保存type組相應(yīng)的值char i,j,k;data=getenv("QUERY_STRING");/獲取環(huán)境變量的字符串for(i=0,j=4,k=10;i<8;i+,j+=12,k+=12)/截取組別和相對(duì)應(yīng)的值typei=(int)*(data+j)-48;/獲取組別,轉(zhuǎn)化為整型變量pingi=(int)*(data+k)-48;/獲取值,轉(zhuǎn)化為整型變量注:指針變量data保存的是字符串,數(shù)值1和字符“1”的ASCII值相
19、差48,因此將字符串里的字符強(qiáng)制轉(zhuǎn)化為整形后,減去48就為實(shí)際數(shù)值。經(jīng)過上面程序處理后,數(shù)組type和ping元素是一一對(duì)應(yīng)的。這樣處理能夠簡(jiǎn)化解碼步驟,方便后續(xù)程序處理。解碼步驟完成后,接下來就是要將數(shù)據(jù)保存在文本文檔中,供系統(tǒng)讀取:if(fp=fopen("007.txt","w+")=NULL)/打開一個(gè)007.txt文件,若不存在則新建。exit(0);/文件操作失敗則退出for(i=0;i<8;i+)/把組名按順序輸出到007.txt中fprintf(fp,"%d",typei);for(i=0;i<8;i+)f
20、printf(fp,"%d",pingi);/把各組對(duì)應(yīng)的值按順序輸出到007.txt中。fclose(fp);/關(guān)閉文件以上cgi程序?qū)崿F(xiàn)了對(duì)網(wǎng)頁(yè)提交的數(shù)據(jù)解碼和保存。但在實(shí)際操作時(shí),調(diào)用cgi程序后,需要載入新的頁(yè)面或者刷新網(wǎng)頁(yè),所以要求cgi程序能夠向服務(wù)器返回一段網(wǎng)頁(yè)源代碼。按照我目前掌握的C語言水平,向?yàn)g覽器返回源代碼只能通過printf()函數(shù),但是如果要求返回的是一個(gè)完整的頁(yè)面的話就需要成百上千條printf()語句,而且,網(wǎng)頁(yè)源代碼中的特殊符號(hào)和格式控制符會(huì)干擾C語言編譯,處理起來相當(dāng)麻煩。當(dāng)了解到shell語言能夠很方便的將一個(gè)文件返回時(shí),就采用程序調(diào)用的
21、方式解決上面的問題:1) 建立一個(gè)文本類型的文件(led-result.template),文件的命名也是采用參考例程原來的命名。將網(wǎng)頁(yè)源代碼保存在這個(gè)文件里。2) 用shell語言編寫一個(gè)cgi程序:#!/bin/shecho "Content-type: text/html; charset=gb2312"/一定要先返回的標(biāo)簽echo/bin/cat led-result.template/將文本文檔led-result.template里的數(shù)據(jù)輸出exit 0并將其命名為led.cgi。3) 在leds.cgi里調(diào)用led.cgi Leds.cgi是由C語言編寫的,l
22、inux C語言中程序調(diào)用十分方便,僅用一個(gè)system()函數(shù)就可以實(shí)現(xiàn):system("/home/plg/led.cgi")。調(diào)用時(shí)需要將被調(diào)用程序的路徑一起作為參數(shù)輸入。至此為止,CGI程序編寫任務(wù)就完成了。3.5驅(qū)動(dòng)程序的編寫3.5.1傳感器信息采集驅(qū)動(dòng)這套智能家居系統(tǒng)信息交互是通過嵌入式芯片的GPIO口電平信號(hào)實(shí)現(xiàn)的。傳感器最終傳給IO口的是高或者低電平信號(hào),驅(qū)動(dòng)程序的任務(wù)就是讀取連接著傳感器的IO口電平信號(hào),根據(jù)信號(hào)信息更新網(wǎng)頁(yè)信息。GPIO口的電平讀取原理和按鍵讀取原理是一樣的。因此不必再自己編寫底層驅(qū)動(dòng),傳感器信息采集驅(qū)動(dòng)只需要調(diào)用按鍵驅(qū)動(dòng)讀取GPIO口即
23、可。下面是一個(gè)按鍵例程1:int buttons_fd;/保存設(shè)備編號(hào)char buttons8 = '0', '0', '0', '0', '0', '0', '0', '0'/用于保存按鍵當(dāng)前狀態(tài)buttons_fd = open("/dev/buttons", 0);/打開按鍵驅(qū)動(dòng)設(shè)備if (buttons_fd < 0) perror("open device buttons");/打開失敗則退出exit(1);f
24、or (;) char current_buttons8;/按鍵值讀取緩存int count_of_changed_key;/輸出格式控制/用read()函數(shù)讀取實(shí)際按鍵值放入緩存中if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) perror("read buttons:");/讀取失敗則顯示錯(cuò)誤信息exit(1);/循環(huán)比較數(shù)組buttonsi和current_buttonsi中的值,若不相等說明按鍵i狀態(tài)改變for (i = 0, count
25、_of_changed_key = 0; i < sizeof buttons / sizeof buttons0; i+) if (buttonsi != current_buttonsi) buttonsi = current_buttonsi;/更新button中的值,為下次比較做準(zhǔn)備printf("%skey %d is %s", count_of_changed_key? ", ": "", i+1, buttonsi = '0' ? "up" : "down")
26、;/輸出按鍵狀態(tài)count_of_changed_key+;if (count_of_changed_key) printf("n");/格式控制close(buttons_fd);return 0;了解了按鍵例程功能后,我們就可以對(duì)它進(jìn)行移植了。在執(zhí)行buttonsi = current_buttonsi;后,buttoni已經(jīng)保存了相應(yīng)按鍵的最新狀態(tài),因此可以在這條語句后面加上判斷語句,用于更新網(wǎng)頁(yè)信息:FILE *fp;if(fp=fopen("led-result.template","r+")=NULL)/以讀寫方式打開網(wǎng)頁(yè)
27、源碼文件exit(0);switch (i)/定位到網(wǎng)頁(yè)源代碼中的指定位置case 0:fseek(fp,1864L,0);break;case 1:fseek(fp,2064L,0);break;case 2:fseek(fp,2264L,0);break;case 3:fseek(fp,2464L,0);break;case 4:fseek(fp,4495L,0);break;case 5:fseek(fp,4695L,0);break;case 6:fseek(fp,4895L,0);break;case 7:fseek(fp,5095L,0);if(buttonsi='1
28、9;)/判斷按鍵狀態(tài)fprintf(fp,”1”); /根據(jù)案件狀態(tài)修改網(wǎng)頁(yè)源碼的值,以更改網(wǎng)頁(yè)顯示elsefprintf(fp,”0”);fclose(fp);注:fseek(fp,nL,0)函數(shù)是文件定位函數(shù),這里它的作用是定位到fp文件從頭開始第n個(gè)位置。這里實(shí)際上是對(duì)網(wǎng)頁(yè)源碼進(jìn)行修改。至此,傳感器傳來的電平信息都會(huì)在網(wǎng)頁(yè)源碼中體現(xiàn),只要刷新網(wǎng)頁(yè),就能夠看到端口的最新信息。最后,用交叉編譯成生成驅(qū)動(dòng)程序button。3.5.2模擬開關(guān)控制驅(qū)動(dòng)模擬開關(guān)控制驅(qū)動(dòng)也是通過GPIO口控制模擬開關(guān)的,其本質(zhì)是控制GPIO口的高點(diǎn)電平的輸出。與傳感器信息采集驅(qū)動(dòng)一樣,也有現(xiàn)存的驅(qū)動(dòng)可供調(diào)用,就是LE
29、D燈控制驅(qū)動(dòng),是在/dev下的leds。也就是說我們可以直接通過調(diào)用驅(qū)動(dòng)控制,舉個(gè)簡(jiǎn)單例子:fd = open("/dev/leds", 0);/打開led驅(qū)動(dòng)程序if (fd < 0) perror("open device leds");/顯示錯(cuò)誤信息exit(1);ioctl(fd, 0, 3);/關(guān)閉第三盞led燈 (IO口狀態(tài)為高電平)close(fd);/關(guān)閉驅(qū)動(dòng)程序打開leds這個(gè)驅(qū)動(dòng)后,只需要用ioctl()函數(shù)就可以實(shí)現(xiàn)對(duì)IO口狀態(tài)控制。模擬開關(guān)驅(qū)動(dòng)主要負(fù)責(zé)讀取cgi程序生成的007.txt文件中的數(shù)據(jù),根據(jù)數(shù)據(jù)內(nèi)容改變GPIO口
30、的狀態(tài),同時(shí)將GPIO口的狀態(tài)反饋給網(wǎng)頁(yè)。數(shù)據(jù)讀?。篶har type_tmp8=;/用于存放讀取的組別字符信息char ping_tmp8=;/用于存放對(duì)應(yīng)組別字符數(shù)值int type8=;/用于存放轉(zhuǎn)化為整形后的組別信息int ping8=;/用于存放轉(zhuǎn)化為整形后的數(shù)值信息int i,fd;if(fp=fopen("007.txt","r")=NULL)/用讀的方式打開007.txt文件exit(0);fread(type_tmp,1,8,fp);/在fp文件中讀取8個(gè)1個(gè)字節(jié)大小數(shù)據(jù),保存在type_tmp中fread(ping_tmp,1,8,f
31、p);fclose(fp);for(i=0;i<8;i+)typei=(int)*(type_tmp+i)-48;/轉(zhuǎn)換為數(shù)值pingi=(int)*(ping_tmp+i)-48;數(shù)據(jù)讀取后重新分類保存在type和ping中,根據(jù)數(shù)值改變GPIO口狀態(tài):for(i=0;i<8;i+)num=typei-1; /因?yàn)榭偣仓挥?個(gè)led燈口,用num變量控制復(fù)用。if(num>=4)num-=4;if(pingi=1)/根據(jù)組別和數(shù)據(jù)控制led端口的狀態(tài)。ioctl(fd, 1, num);else if(pingi=2)ioctl(fd, 0, num);端口狀態(tài)改變后,向網(wǎng)
32、頁(yè)反饋狀態(tài)信息,同樣利用更改網(wǎng)頁(yè)源碼實(shí)現(xiàn):if(fp=fopen("led-result.template","r+")=NULL) /原理同傳感器信息采集驅(qū)動(dòng)中部分程序exit(0);for(i=0;i<8;i+)switch (i)case 0:fseek(fp,2589L,0);break;case 1:fseek(fp,2704L,0);break;case 2:fseek(fp,2819L,0);break;case 3:fseek(fp,2934L,0);break;case 4:fseek(fp,5220L,0);break;case
33、 5:fseek(fp,5335L,0);break;case 6:fseek(fp,5450L,0);break;case 7:fseek(fp,5565L,0);break;if(pingi=1)fprintf(fp,"1");else if(pingi=2)fprintf(fp,"0");fclose(fp);不管是傳感器信息采集驅(qū)動(dòng)還是模擬開關(guān)驅(qū)動(dòng)程序,都是需要運(yùn)行在while(1)循環(huán)中,編譯完成后在終端中同時(shí)打開運(yùn)行。網(wǎng)頁(yè)的源碼修改后需要刷新才能看到最新信息,因此在可接受范圍之內(nèi)對(duì)實(shí)時(shí)性方面做了如下處理:1 網(wǎng)頁(yè)程序中設(shè)定網(wǎng)頁(yè)每十秒鐘自動(dòng)刷新
34、,這樣用戶看到網(wǎng)頁(yè)上的信息至少是10內(nèi)的。2 用戶在網(wǎng)頁(yè)頁(yè)面設(shè)定完成點(diǎn)擊提交時(shí),cgi程序讓頁(yè)面重新載入,提交后更改會(huì)立即被顯示出來。以上處理能夠在將設(shè)計(jì)難度降低到自己的能力范圍之內(nèi),又不影響系統(tǒng)正常運(yùn)行。最后用交叉編譯器生成驅(qū)動(dòng)程序read_type4WEB嵌入式只能家居控制系統(tǒng)測(cè)試和應(yīng)用4.1軟件系統(tǒng)測(cè)試1. 將編譯好的驅(qū)動(dòng)程序、網(wǎng)頁(yè)、cgi程序、圖片包發(fā)送到開發(fā)板/home/plg2. 在嵌入式系統(tǒng)的終端運(yùn)行傳感器信息采集驅(qū)動(dòng)(button)和模擬開關(guān)控制驅(qū)動(dòng)(read_type)。3. 在客戶端瀏覽器輸入開發(fā)板靜態(tài)IP:30,可以看到歡迎界面。4. 點(diǎn)擊“進(jìn)入系統(tǒng)
35、”進(jìn)入到簡(jiǎn)介控制界面,如圖8.2。5. 查看核心板的初始狀態(tài):電源指示燈亮,其余不亮.。6. 在瀏覽器中選中第一項(xiàng)“灑水”和第二項(xiàng)的“開空調(diào)”,點(diǎn)提交后,核心板LED端口電平發(fā)生變化,網(wǎng)頁(yè)也做相應(yīng)的指示,如圖8.3.1和圖8.3.2所示。7. 按下開發(fā)板上的K1、K4、K8按鍵按鈕,手動(dòng)刷新網(wǎng)頁(yè)(或者等待網(wǎng)頁(yè)自動(dòng)刷新),網(wǎng)頁(yè)上的信息如圖8.4所示。8. 松開按鍵后,狀態(tài)恢復(fù)安全狀態(tài),與圖8.3.2一樣。9. 網(wǎng)頁(yè)上選中“關(guān)水”“關(guān)空調(diào)”選項(xiàng)后,狀態(tài)重新恢復(fù)到圖8.2狀態(tài)。瀏覽器提交的設(shè)置數(shù)據(jù)都會(huì)被保存在服務(wù)器里,因此再一次登陸后可以看到之前的設(shè)置。詳情在驅(qū)動(dòng)程序中可以看到。圖8.2智能家居控制
36、系統(tǒng)簡(jiǎn)介界面圖8.3.1提交后核心板LED燈情況(第一盞是電源燈)圖8.3.2提交后網(wǎng)頁(yè)信息更新情況圖8.4按下K1、K4、K8后網(wǎng)頁(yè)顯示的信息5總結(jié)與展望伴隨著人們生活的水平的提高,家居智能化成為人們新的需求,將嵌入式WEB遠(yuǎn)程控制系統(tǒng)應(yīng)用在智能家居方面是未來發(fā)展的必然趨勢(shì)。實(shí)現(xiàn)基于WEB嵌入式智能家居控制系統(tǒng)最主要的步驟就是將嵌入式、web服務(wù)器、家電控制三者結(jié)合。傳統(tǒng)的PC機(jī)服務(wù)器存在諸多弊端,嵌入式系統(tǒng)的引入剛好可以解決這方面問題,自然而然的,下一步工作就是在嵌入式下建立服務(wù)器,通過cgi程序和服務(wù)程序?qū)⒕W(wǎng)頁(yè)和家電控制結(jié)合起來這也是引導(dǎo)本次畢業(yè)設(shè)計(jì)的主要思路。本次設(shè)計(jì)雖然完成了,但僅僅
37、算是一個(gè)模型,在這個(gè)模型基礎(chǔ)上還可以做很多改進(jìn),如增強(qiáng)網(wǎng)頁(yè)數(shù)據(jù)傳輸安全性,改善網(wǎng)頁(yè)動(dòng)態(tài)特性,脫離局域網(wǎng)使之能真正在Internet網(wǎng)絡(luò)上登陸等,這些是智能家居必然要實(shí)現(xiàn)的過程,也是今后繼續(xù)深入的方向。參考文獻(xiàn)1Tiny210用戶手冊(cè)J.廣州友善之臂計(jì)算機(jī)科技有限公司,2012,08,142 Leo chin -博客園。3戴峻峰,宋玉璽.基于嵌入式WEB服務(wù)器的智能家居遠(yuǎn)程監(jiān)控系統(tǒng)J.鹽城工學(xué)院學(xué)報(bào)(自然科學(xué)版),2010,04:50-52+62.45附件1、 傳感器信息采集驅(qū)動(dòng)程序:button#include <stdio.h>#include <stdlib.h>#
38、include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/select.h>#include <sys/time.h>#include <errno.h>int main(void)int buttons_fd;char buttons8 = '0', '0', '0', '
39、0', '0', '0', '0', '0'buttons_fd = open("/dev/buttons", 0);if (buttons_fd < 0) perror("open device buttons");exit(1);for (;) char current_buttons8;int count_of_changed_key;int i;struct timeval step; if (read(buttons_fd, current_buttons, size
40、of current_buttons) != sizeof current_buttons) perror("read buttons:");exit(1);for (i = 0; i < sizeof buttons / sizeof buttons0; i+) if (buttonsi != current_buttonsi) buttonsi = current_buttonsi;FILE *fp;if(fp=fopen("led-result.template","r+")=NULL)exit(0);switch (i)/定位到網(wǎng)頁(yè)源代碼中的指定位置case 0:fseek(fp,1864L,0);break;case 1:fseek(fp,2064L,0);break;case 2:fseek(fp,2264L,0);break;case 3:fseek(fp,2464L,0);break;case 4:fseek(fp,4495L,0);break;case 5:fsee
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)品研發(fā)資金申請(qǐng)2025年政策扶持與產(chǎn)業(yè)升級(jí)策略報(bào)告
- 2025年新能源汽車廢舊電池回收處理技術(shù)及案例分析報(bào)告
- 2025年生物科技行業(yè)可持續(xù)發(fā)展目標(biāo)(SDGs)實(shí)踐與產(chǎn)業(yè)融合報(bào)告
- 煤炭清潔高效燃燒技術(shù)在煤炭洗選加工中的應(yīng)用與發(fā)展報(bào)告
- 醫(yī)療器械臨床試驗(yàn)質(zhì)量管理與規(guī)范化2025年發(fā)展趨勢(shì)研究報(bào)告
- 2025年建筑信息模型(BIM)在施工全過程精細(xì)化管理中的應(yīng)用策略報(bào)告
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)量子密鑰分發(fā)技術(shù)在智慧醫(yī)療領(lǐng)域的應(yīng)用與挑戰(zhàn)報(bào)告
- 2025年電商平臺(tái)內(nèi)容營(yíng)銷與種草經(jīng)濟(jì)產(chǎn)業(yè)鏈研究報(bào)告
- 深度解析:2025年工業(yè)互聯(lián)網(wǎng)平臺(tái)AR交互技術(shù)在制造領(lǐng)域的應(yīng)用創(chuàng)新報(bào)告
- 綠色環(huán)保產(chǎn)業(yè)資金申請(qǐng)政策變化與應(yīng)對(duì)策略報(bào)告2025
- 山東省青島市嶗山區(qū)育才學(xué)校2023-2024學(xué)年下學(xué)期奇點(diǎn)計(jì)劃選拔考試八年級(jí)物理試卷
- 重慶開放大學(xué)《工具書與文獻(xiàn)檢索》形考測(cè)驗(yàn)1-4答案
- 紡織非遺:讓世界讀懂中國(guó)之美智慧樹知到期末考試答案2024年
- 結(jié)節(jié)性紅斑的護(hù)理措施
- 應(yīng)急處突知識(shí)培訓(xùn)課件
- 江蘇省蘇州市四市2022-2023學(xué)年八年級(jí)下學(xué)期期末語文試題
- 幼兒園病媒生物防制培訓(xùn)方案
- “影子教育”之全球擴(kuò)張教育公平、質(zhì)量、發(fā)展中的利弊談
- JB T 8925-2008滾動(dòng)軸承汽車萬向節(jié)十字軸總成技術(shù)條件
- (word版)2024年成人高考語文試題及答案
- 感悟《亮劍》中的營(yíng)銷啟示課件
評(píng)論
0/150
提交評(píng)論