基于無(wú)線傳感器網(wǎng)絡(luò)地遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)地設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
基于無(wú)線傳感器網(wǎng)絡(luò)地遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)地設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
基于無(wú)線傳感器網(wǎng)絡(luò)地遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)地設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
基于無(wú)線傳感器網(wǎng)絡(luò)地遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)地設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
基于無(wú)線傳感器網(wǎng)絡(luò)地遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)地設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書基于無(wú)線傳感器網(wǎng)絡(luò)的遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)1系統(tǒng)概述1.1系統(tǒng)背景近年來(lái),由于計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)、現(xiàn)代電子技術(shù)的迅猛發(fā)展,無(wú)線通信技術(shù)在醫(yī)療、自動(dòng)化控制、遠(yuǎn)程監(jiān)測(cè)等多個(gè)領(lǐng)域得到了廣泛的應(yīng)用。其中環(huán)境遠(yuǎn)程監(jiān)測(cè)有其特定的應(yīng)用背景,一般在比較偏僻、環(huán)境惡劣的無(wú)人居住區(qū)域(如沙漠、高山、叢林等危險(xiǎn)地區(qū)),這使得很難通過(guò)架設(shè)電纜來(lái)完成數(shù)據(jù)傳輸,因此使用無(wú)線通信是一種很好的選擇。對(duì)環(huán)境的監(jiān)測(cè)是十分重要且有意義的,獲得生存環(huán)境的實(shí)時(shí)的數(shù)據(jù),有助于我們預(yù)測(cè)環(huán)境變化的趨勢(shì)以及更好的掌握自己生活的環(huán)境現(xiàn)狀并加以改善。1.2系統(tǒng)簡(jiǎn)介本系統(tǒng)在實(shí)驗(yàn)環(huán)境中搭建一個(gè)ZigBee網(wǎng)絡(luò),該網(wǎng)絡(luò)由

2、一個(gè)中心節(jié)點(diǎn)和多個(gè)終端節(jié)點(diǎn)以自組織方式構(gòu)成。終端節(jié)點(diǎn)負(fù)責(zé)采集環(huán)境溫濕度等數(shù)據(jù)信息,并通過(guò)ZigBee網(wǎng)絡(luò)把采集的數(shù)據(jù)信息致至中心節(jié)點(diǎn);與中心節(jié)點(diǎn)相連的控制器(ARM單片機(jī))將數(shù)據(jù)致到串口,再通過(guò)socket通信將數(shù)據(jù)傳到遠(yuǎn)程主機(jī),并將獲得的信息存入數(shù)據(jù)庫(kù)中。設(shè)計(jì)一個(gè)界面,可通過(guò)界面顯示出所需要的信息以及提供相關(guān)查詢服務(wù)。整個(gè)系統(tǒng)設(shè)計(jì)綜合利用ZigBee網(wǎng)絡(luò)的低成本、低功耗、自組織、靈活等優(yōu)良特性,提出一個(gè)實(shí)時(shí)、高效的遠(yuǎn)程環(huán)境監(jiān)測(cè)解決方案。1.3關(guān)鍵詞解釋1.3.1無(wú)線傳感器網(wǎng)絡(luò)無(wú)線傳感器網(wǎng)絡(luò)(WirelessSensorNetwork,WSN),就是由部署在監(jiān)測(cè)區(qū)域內(nèi)大量的廉價(jià)微型傳感器節(jié)點(diǎn)組

3、成,通過(guò)無(wú)線通信方式形成的一個(gè)多跳的自組織的網(wǎng)絡(luò)系統(tǒng),其目的是2協(xié)作地感知、采集和處理網(wǎng)絡(luò)覆蓋區(qū)域中被感知對(duì)象的信息,并致給觀察者。傳感器、感知對(duì)象和觀察者構(gòu)成了無(wú)線傳感器網(wǎng)絡(luò)的三個(gè)要素。無(wú)線傳感器網(wǎng)絡(luò)所具有的眾多類型的傳感器,可探測(cè)包括地震、電磁、溫度、濕度、噪聲、光強(qiáng)度、壓力、土壤成分、移動(dòng)物體的大小、速度和方向等周邊環(huán)境中多種多樣的現(xiàn)象。-1-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書基于MEMS的微傳感技術(shù)和無(wú)線聯(lián)網(wǎng)技術(shù)為無(wú)線傳感器網(wǎng)絡(luò)賦予了廣闊的應(yīng)用前景。這些潛在的應(yīng)用領(lǐng)域可以歸納為:軍事、航空、反恐、防爆、救災(zāi)、環(huán)境、醫(yī)療、保健、家居、工業(yè)、商業(yè)等領(lǐng)域34。其主要特點(diǎn)有:1)低速率傳感器網(wǎng)絡(luò)節(jié)點(diǎn)通常

4、只需定期傳輸溫度、濕度、壓力、流量、電量等被測(cè)參數(shù),相對(duì)而言,被測(cè)參數(shù)的數(shù)據(jù)量小,采集數(shù)據(jù)頻率較低。2)低功耗通常,傳感器節(jié)點(diǎn)利用電池供電,且分布區(qū)域復(fù)雜、廣闊,很難通過(guò)更換電池方式來(lái)補(bǔ)充能量,因此,要求傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的功耗要低,傳感器的體積要小。3)低成本應(yīng)用無(wú)線傳感器網(wǎng)絡(luò),監(jiān)測(cè)區(qū)域廣、傳感器的節(jié)點(diǎn)多,且有些區(qū)域環(huán)境的地形復(fù)雜,甚至連工作人員都無(wú)法進(jìn)入,一旦安裝傳感器器則很難更換,因而要求傳感器的成本低廉。4)短距離為了方便組網(wǎng)和傳遞數(shù)據(jù),兩個(gè)傳感器節(jié)點(diǎn)之間的距離通常要求在幾十米到幾百米之間。5)高可靠性無(wú)線傳感器網(wǎng)絡(luò)的信息獲取是靠分布在監(jiān)測(cè)區(qū)域內(nèi)的各個(gè)傳感器檢測(cè)到的,如傳感器本身不可靠,則

5、其信息的傳輸和處理是沒(méi)有任何意義的。6)大容量要求網(wǎng)絡(luò)能容納上千、上萬(wàn)個(gè)節(jié)點(diǎn)。7)動(dòng)態(tài)性對(duì)于復(fù)雜環(huán)境的組網(wǎng),其覆蓋區(qū)域往往會(huì)遇到各種電、磁環(huán)境的干擾,加之供電能量的不斷損耗,易引起傳感器節(jié)點(diǎn)故障,因此要求傳感器網(wǎng)絡(luò)具有自組網(wǎng)、智能化和協(xié)同感知等功能。1.3.2ZigBee技術(shù)ZigBee技術(shù)是一種結(jié)構(gòu)簡(jiǎn)單、低功耗、低數(shù)據(jù)率、低成本和高可靠性的雙向微功率網(wǎng)格式無(wú)線接入技術(shù),介于RFID和藍(lán)牙之間的技術(shù)提案,此前被稱作“Hom2eRFLite”或“FireFly”5無(wú)線技術(shù),主要用于近距離無(wú)線連接。最重要的是ZigBee技術(shù)支持地理定位功能,它工作-2-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書于無(wú)需注冊(cè)的2.4G

6、HzISM頻段,傳輸速率為250kb/s,傳輸距離可以從標(biāo)準(zhǔn)的75米,到擴(kuò)展后的幾百米,甚至幾千米,利用ZigBee技術(shù)可由多到65535個(gè)無(wú)線微功率收發(fā)機(jī)組成一個(gè)龐大而有效的無(wú)線網(wǎng)絡(luò)平臺(tái)6。其主要特點(diǎn)有:1)低功耗由于ZigBee的傳輸速率低,發(fā)射功率僅為1mW,而且采用了休眠模式,功耗低,因此ZigBee設(shè)備非常省電。據(jù)估算,ZigBee設(shè)備僅靠?jī)晒?jié)5號(hào)電池就可以維持長(zhǎng)達(dá)6個(gè)月到2年左右的使用時(shí)間,這是其它無(wú)線設(shè)備望塵莫及的。2)成本低ZigBee模塊的初始成本在6美元左右,估計(jì)很快就能降到1.5-2.5美元,并且ZigBee協(xié)議是免專利費(fèi)的。低成本對(duì)于ZigBee也是一個(gè)關(guān)鍵的因素。3)

7、時(shí)延短通信時(shí)延和從休眠狀態(tài)激活的時(shí)延都非常短,典型的搜索設(shè)備時(shí)延30ms,休眠激活的時(shí)延是15ms,活動(dòng)設(shè)備信道接入的時(shí)延為15ms。因此ZigBee技術(shù)適用于對(duì)時(shí)延要求苛刻的無(wú)線控制(如工業(yè)控制場(chǎng)合等)應(yīng)用。4)網(wǎng)絡(luò)容量大一個(gè)星型結(jié)構(gòu)的Zigbee網(wǎng)絡(luò)最多可以容納254個(gè)從設(shè)備和一個(gè)主設(shè)備,一個(gè)區(qū)域內(nèi)可以同時(shí)存在最多100個(gè)ZigBee網(wǎng)絡(luò),而且網(wǎng)絡(luò)組成靈活。5)可靠采取了碰撞避免策略,同時(shí)為需要固定帶寬的通信業(yè)務(wù)預(yù)留了專用時(shí)隙,避開(kāi)了致數(shù)據(jù)的競(jìng)爭(zhēng)和沖突。MAC層采用了完全確認(rèn)的數(shù)據(jù)傳輸模式,每個(gè)致的數(shù)據(jù)包都必須等待接收方的確認(rèn)信息。如果傳輸過(guò)程中出現(xiàn)問(wèn)題可以進(jìn)行重發(fā)7。6)安全ZigBee

8、提供了基于循環(huán)冗余校驗(yàn)(CRC)的數(shù)據(jù)包完整性檢查功能,支持鑒權(quán)和認(rèn)證,采用了AES-128的加密算法,各個(gè)應(yīng)用可以靈活確定其安全屬性。ZigBee網(wǎng)絡(luò)中存在三種邏輯設(shè)備類型:協(xié)調(diào)器、路由器和終端設(shè)備。1)協(xié)調(diào)器協(xié)調(diào)器包含所有的網(wǎng)絡(luò)消息,是3種設(shè)備類型中最復(fù)雜的一種,也是該網(wǎng)絡(luò)的第一個(gè)設(shè)備。協(xié)調(diào)器具有存儲(chǔ)容量大、計(jì)算能力強(qiáng)的特點(diǎn),其主要任務(wù)包括致網(wǎng)絡(luò)信標(biāo)、建立一個(gè)網(wǎng)絡(luò)、管理網(wǎng)絡(luò)節(jié)點(diǎn)、存儲(chǔ)網(wǎng)絡(luò)節(jié)點(diǎn)信息、尋找一對(duì)節(jié)點(diǎn)間的路由消息和不斷地接收信息8。2)路由器路由器的功能主要有允許其他設(shè)備加入網(wǎng)絡(luò)、多跳路由和協(xié)助終端設(shè)備的通訊。3)終端設(shè)備終端設(shè)備沒(méi)有特定的維持網(wǎng)絡(luò)結(jié)構(gòu)的責(zé)任,它可以處于睡眠或者喚醒

9、狀態(tài),因此它可以是一個(gè)電池供電設(shè)備。-3-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書ZigBee網(wǎng)絡(luò)有三種網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu):星型、樹(shù)狀和網(wǎng)狀拓?fù)浣Y(jié)構(gòu)。在星型拓?fù)浣Y(jié)構(gòu)中,整個(gè)網(wǎng)絡(luò)由一個(gè)稱為ZigBee協(xié)調(diào)器的設(shè)備來(lái)控制,ZigBee協(xié)調(diào)器負(fù)責(zé)發(fā)起和維持網(wǎng)絡(luò)正常工作,保持同網(wǎng)絡(luò)終端設(shè)備通信;在網(wǎng)狀型和樹(shù)型拓?fù)浣Y(jié)構(gòu)中,ZigBee協(xié)調(diào)器負(fù)責(zé)啟動(dòng)網(wǎng)絡(luò)以及選擇關(guān)鍵的網(wǎng)絡(luò)參數(shù),同時(shí),也可以使用ZigBee路由器來(lái)擴(kuò)展網(wǎng)絡(luò)結(jié)構(gòu);在樹(shù)型網(wǎng)絡(luò)中,路由器采用分級(jí)路由策略來(lái)傳送數(shù)據(jù)和控制信息。樹(shù)型網(wǎng)絡(luò)可以采用基于信標(biāo)的方式進(jìn)行通信;網(wǎng)狀型網(wǎng)絡(luò)中,設(shè)備之間使用完全對(duì)等的通信方式,ZigBee路由器不致通信信標(biāo)。1.3.3Linux交叉編譯

10、通常,程序是在一臺(tái)計(jì)算機(jī)上編譯,然后再分布到將要使用的其他計(jì)算機(jī)上。當(dāng)主機(jī)系統(tǒng)(運(yùn)行編譯器的系統(tǒng))和目標(biāo)系統(tǒng)(產(chǎn)生的程序?qū)⒃谄渖线\(yùn)行的系統(tǒng))不兼容時(shí),該過(guò)程就叫做交叉編譯。除了兼容性這個(gè)原因之外,以下兩種情況也需要進(jìn)行交叉編譯:(1)目標(biāo)系統(tǒng)對(duì)其可用的編譯工具沒(méi)有本地設(shè)置;(2)主機(jī)系統(tǒng)比目標(biāo)系統(tǒng)要快得多,或者具有更多的可用資源。系統(tǒng)中使用的是基于ARM架構(gòu)的Linux平臺(tái)交叉編譯工具arm-linux-gcc,其版本為arm-linux-gcc-4.3.3。需要說(shuō)明的是不同Linux內(nèi)核要使用相應(yīng)的交叉編譯器編譯生成正確的內(nèi)核文件。1.3.4socket通信WindowsSockets是廣泛

11、應(yīng)用的、開(kāi)放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。其中套接字(Socket)是通信的基石,是支持TCP/IP協(xié)議網(wǎng)絡(luò)通信的基本操作單元,可以將套接字看作是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點(diǎn)。套接字可以分為兩類:流套接字和數(shù)據(jù)報(bào)套接字14。1)流套接字流套接字提供雙向的、有序的、無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù),它適用于處理大量數(shù)據(jù)。流套接字是面向連接的,通信雙方進(jìn)行數(shù)據(jù)交換前必須建立一條路徑。這樣既確定了它們之間存在的路由,又保證了雙方是活動(dòng)的、可彼此響應(yīng)的,但在通信雙方之間建立一-4-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書個(gè)通信信道需要很多開(kāi)銷。除此之外,大部分面向連接的協(xié)議為保證致無(wú)誤,可能會(huì)需要執(zhí)行額外的

12、計(jì)算來(lái)驗(yàn)證正確性,因此還會(huì)進(jìn)一步增加開(kāi)銷。2)數(shù)據(jù)報(bào)套接字?jǐn)?shù)據(jù)報(bào)套接字支持雙向的數(shù)據(jù)流,但并不保證數(shù)據(jù)傳輸?shù)目煽啃浴⒂行蛐院蜔o(wú)重復(fù)性。數(shù)據(jù)報(bào)套接字是無(wú)連接的,通信雙方在進(jìn)行通信前不需要事先建立連接,也不需要維護(hù)通信鏈路,因此可以節(jié)省開(kāi)銷,但不適合大量、有序數(shù)據(jù)的傳輸15??紤]到本系統(tǒng)中需要傳輸?shù)臄?shù)據(jù)只是一些環(huán)境信息,其特點(diǎn)是數(shù)據(jù)量小且變化連續(xù),不易突發(fā)。因此系統(tǒng)采用數(shù)據(jù)報(bào)套接字完成數(shù)據(jù)傳輸。2系統(tǒng)總體分析與設(shè)計(jì)2.1系統(tǒng)總體分析由于本系統(tǒng)要實(shí)現(xiàn)環(huán)境監(jiān)測(cè)的功能,而實(shí)驗(yàn)室所使用的嵌入式實(shí)驗(yàn)箱CVT6410已經(jīng)集成了監(jiān)測(cè)環(huán)境中各項(xiàng)指標(biāo)(芯片溫度、實(shí)驗(yàn)板溫度、環(huán)境溫度、環(huán)境濕度等)模塊。因此,在本次課

13、程設(shè)計(jì)中已經(jīng)有了能夠?qū)崟r(shí)接收環(huán)境信息的功能,還有許多其他的功能也要實(shí)現(xiàn),具體包括將接收到的信息轉(zhuǎn)換為可讀的數(shù)據(jù),并利用socket通信將數(shù)據(jù)傳到PC端(即服務(wù)器端)。此外,在PC機(jī)端接收到數(shù)據(jù)后,要能夠?qū)?shù)據(jù)顯示出來(lái),并將這些數(shù)據(jù)傳入構(gòu)建的數(shù)據(jù)庫(kù)中,以便于備份與查詢。2.2系統(tǒng)總體設(shè)計(jì)(1)獲取環(huán)境信息通過(guò)集成在嵌入式實(shí)驗(yàn)箱CVT6410中的溫度傳感器、濕度傳感器、光照傳感器以及煙霧傳感器等傳感器獲取所處環(huán)境的相關(guān)信息。(2)實(shí)時(shí)接收環(huán)境信息利用Socket網(wǎng)絡(luò)編程,實(shí)時(shí)從串口監(jiān)聽(tīng)并接收遠(yuǎn)端控制器發(fā)來(lái)的環(huán)境數(shù)據(jù)。在通信過(guò)程中,PC機(jī)作為服務(wù)器端,實(shí)驗(yàn)箱作為客戶機(jī)端進(jìn)行通信。(3)將接收到的數(shù)據(jù)

14、存儲(chǔ)到數(shù)據(jù)庫(kù)中新建一個(gè)數(shù)據(jù)庫(kù)用于存儲(chǔ)接收到的數(shù)據(jù),數(shù)據(jù)庫(kù)中可以只有一個(gè)表,每一個(gè)屬性代表一個(gè)檢測(cè)的指標(biāo)(溫度、濕度、光照等)。(4)將環(huán)境數(shù)據(jù)顯示出來(lái)-5-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書用C#做一個(gè)界面,既可以直接顯示從客戶機(jī)端接收到的數(shù)據(jù),也可以像在數(shù)據(jù)庫(kù)中一樣以表格的形式顯示出環(huán)境參數(shù)。2.3系統(tǒng)流程圖開(kāi)始服務(wù)器與客戶機(jī)是否處于同一網(wǎng)段?是否可以相互通信?客戶機(jī)向服務(wù)器發(fā)送環(huán)境數(shù)據(jù)服務(wù)器端接收到數(shù)據(jù)?數(shù)據(jù)庫(kù)連接成功?-6-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書環(huán)境數(shù)據(jù)存入數(shù)據(jù)庫(kù)將數(shù)據(jù)顯示在界面中結(jié)束3開(kāi)發(fā)實(shí)現(xiàn)過(guò)程3.1安裝VMware虛擬機(jī)在Windows下安裝虛擬機(jī)VMware。VMware(Virtual

15、Machineware)是一個(gè)“虛擬PC”軟件公司。它的產(chǎn)品可以使你在一臺(tái)機(jī)器上同時(shí)運(yùn)行二個(gè)或更多Windows、DOS、LINUX系統(tǒng)。與“多啟動(dòng)”系統(tǒng)相比,VMware采用了完全不同的概念。多啟動(dòng)系統(tǒng)在一個(gè)時(shí)刻只能運(yùn)行一個(gè)系統(tǒng),在系統(tǒng)切換時(shí)需要重新啟動(dòng)機(jī)器。VMware是真正“同時(shí)”運(yùn)行,多個(gè)操作系統(tǒng)在主系統(tǒng)的平臺(tái)上,就象標(biāo)準(zhǔn)Windows應(yīng)用程序那樣切換。而且每個(gè)操作系統(tǒng)你都可以進(jìn)行虛擬的分區(qū)、配置而不影響真實(shí)硬盤的數(shù)據(jù),你甚至可以通過(guò)網(wǎng)卡將幾臺(tái)虛擬機(jī)用網(wǎng)卡連接為一個(gè)局域網(wǎng),極其方便。虛擬機(jī)裝好以后出現(xiàn)如下界面:-7-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書3.2安裝Fedora操作系統(tǒng)Fedora是一

16、個(gè)知名的Linux發(fā)行版,是一款由全球社區(qū)愛(ài)好者構(gòu)建的面向日常應(yīng)用的快速、穩(wěn)定、強(qiáng)大的操作系統(tǒng)。它允許任何人自由地使用、修改和重發(fā)布,無(wú)論現(xiàn)在還是將來(lái)。它由一個(gè)強(qiáng)大的社群開(kāi)發(fā),這個(gè)社群的成員以自己的不懈努力,提供并維護(hù)自由、開(kāi)放源碼的軟件和開(kāi)放的標(biāo)準(zhǔn)。Fedora項(xiàng)目由Fedora基金會(huì)管理和控制,得到了RedHat,Inc.的支持。Fedora是一個(gè)獨(dú)立的操作系統(tǒng),可運(yùn)行的體系結(jié)構(gòu)包括x86(即i386-i686),x86_64和PowerPC。Fedora安裝過(guò)程:-8-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書Fedora開(kāi)機(jī)過(guò)程:Fedora開(kāi)機(jī)的登錄界面:-9-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書3.3配置編譯環(huán)

17、境1.以root身份登錄ubuntu2.然后將光盤中的4.3.3.tar.gz拷到桌面上3.解壓并安裝,具體請(qǐng)執(zhí)行如下命令:#tarzxvf4.3.3.tar.gz-C/4.設(shè)置環(huán)境變量,執(zhí)行如下命令:#gedit/etc/profile在最后面添加一行exportPATH=$PATH:/home/zzx/Desktop/6410/4.3.3/bin如圖所示:重新啟動(dòng)Fedora5.測(cè)試是否配置成功,打開(kāi)終端,輸入以下命令:#arm-linux-gccv-10-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書倒數(shù)第二行顯示了版本信息,至此,編譯器已安裝好。3.4Linux交叉編譯環(huán)境的配置1.安裝交叉編譯器2.配置F

18、edora10的IP地址為2進(jìn)入root用戶:supassword/sbin/ifconfigeth02netmaskgedit/etc/exports-11-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書寫入:/tftpboot2/(rw)保存并退出/sbin/serviceportmaprestart/sbin/servicenfsrestart/sbin/serviceiptablesstop3.創(chuàng)建tftpboot文件夾cd/mkdirtftpbootchmod777/tftpboot4.將6410實(shí)驗(yàn)箱和PC機(jī)用網(wǎng)線相連,啟動(dòng)實(shí)驗(yàn)箱ping-12-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書3.5超級(jí)終端1.Windows7

19、系統(tǒng)安裝HyperTerminal,即將HyperTerminal文件夾下的HyperTerminal_English_ANSI里的hticons.dll和hypertrm.dll拷貝至C:/Windows/System32下;2.使用usb轉(zhuǎn)串口線(或普通RS232線)將6410實(shí)驗(yàn)箱和PC機(jī)相連。打開(kāi)HyperTerminal軟件,選擇正確的串口。-13-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書設(shè)置完成后點(diǎn)擊確認(rèn),正確連接至6410實(shí)驗(yàn)箱后,多次回車,出現(xiàn)如下結(jié)果:3.掛載tftpboot文件夾中文件至嵌入式Linux的mnt文件夾中。輸入如下命令:mount2:/tftpboot/mnt/-onoloc

20、k掛在成功后,輸入cd/mnt查看掛載結(jié)果。3.6socket通信Linux系統(tǒng)是通過(guò)提供套接字(socket)來(lái)進(jìn)行網(wǎng)絡(luò)編程的。網(wǎng)絡(luò)程序通過(guò)socket和其它幾個(gè)函數(shù)的調(diào)用,會(huì)返回一個(gè)通訊的文件描述符,我們可以將這個(gè)描述符看成普通的文件的描述符來(lái)操作,這就是linux的設(shè)備無(wú)關(guān)性的好處。我們可以通過(guò)向描述符讀寫操作實(shí)現(xiàn)網(wǎng)絡(luò)之間的數(shù)據(jù)交流。1)socketintsocket(intdomain,inttype,intprotocol)domain:說(shuō)明網(wǎng)絡(luò)程序所在的主機(jī)采用的通訊協(xié)族(AF_UNIX和AF_INET等)。AF_UNIX只能夠用于單一的Unix系統(tǒng)進(jìn)程間通信,而AF_INET是針

21、對(duì)Internet的,因而可以允許在遠(yuǎn)程主機(jī)之間通信。type:網(wǎng)絡(luò)程序所采用的通訊協(xié)議(SOCK_STREAM,SOCK_DG等R)A。MSOCK_STREA表M明使用的是TCP協(xié)議,這樣會(huì)提供按順序的、可靠、雙向、面向連接的比特流。SOCK_DGRA表M明使用的是UDP協(xié)議,這樣只會(huì)提供定長(zhǎng)的、不可靠、無(wú)連接的通信。protocol:由于指定了type,所以這個(gè)地方一般只要用0來(lái)代替就可以了。socket為網(wǎng)絡(luò)-14-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書通訊做基本的準(zhǔn)備。成功時(shí)返回文件描述符,失敗時(shí)返回-1,看errno可知道出錯(cuò)的詳細(xì)情況。2)bindintbind(intsockfd,struct

22、sockaddr*my_addr,intaddrlen)sockfd:是由socket調(diào)用返回的文件描述符。addrlen:是sockaddr結(jié)構(gòu)的長(zhǎng)度。my_addr:是一個(gè)指向sockaddr的指針。sockaddr的定義如下:structsockaddrunisgnedshortas_family;charsa_data14;不過(guò)由于系統(tǒng)的兼容性,我們一般不用這個(gè)頭文件,而使用另外一個(gè)結(jié)構(gòu)(structsockaddr_in)來(lái)代替。sockaddr_in的定義如下:structsockaddr_inunsignedshortsin_family;unsignedshortintsin_

23、port;structin_addrsin_addr;unsignedcharsin_zero8;sin_family一般為AF_INET,sin_addr設(shè)置為INADDR_ANY表示可以和任何的主機(jī)通信,sin_port是我們要監(jiān)聽(tīng)的端口號(hào)。sin_zero8是用來(lái)填充的。Bind函數(shù)將本地的端口同socket返回的文件描述符捆綁在一起。成功則返回0,失敗的情況和socket一樣。3)listenintlisten(intsockfd,intbacklog)sockfd:是bind后的文件描述符。backlog:設(shè)置請(qǐng)求排隊(duì)的最大長(zhǎng)度。當(dāng)有多個(gè)客戶端程序和服務(wù)端相連時(shí),使用這個(gè)表示可以介紹

24、的排隊(duì)長(zhǎng)度。listen函數(shù)將bind的文件描述符變?yōu)楸O(jiān)聽(tīng)套接字。返回的情況和bind一樣。4)accept-15-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書intaccept(intsockfd,structsockaddr*addr,int*addrlen)sockfd:是listen后的文件描述符.addr,addrlen是用來(lái)給客戶端的程序填寫的,服務(wù)器端只要傳遞指針就可以了。bind,listen和accept是服務(wù)器端用的函數(shù),accept調(diào)用時(shí),服務(wù)器端的程序會(huì)一直阻塞到有一個(gè)客戶程序發(fā)出了連接。accept成功時(shí)返回最后的服務(wù)器端的文件描述符,這個(gè)時(shí)候服務(wù)器端可以向該描述符寫信息了。失敗時(shí)返回-

25、1。5)connectintconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)sockfd:socket返回的文件描述符。serv_addr:儲(chǔ)存了服務(wù)器端的連接信息。其中sin_add是服務(wù)端的地址。addrlen:serv_addr的長(zhǎng)度。connect函數(shù)是客戶端用來(lái)同服務(wù)端連接的。成功時(shí)返回0,sockfd是同服務(wù)端通訊的文件描述符失敗時(shí)返回-1。到第三階段,可以存取資料了,要讀取資料,我們可以用recv()函式:6)recv:接收數(shù)據(jù)intrecv(intsockfd,void*buf,intmaxbuf,intoptions

26、)sockfd:socket返回的文件描述符。buf:是收到數(shù)據(jù)后存放的緩沖位置。maxbuf:是緩沖區(qū)buf的大小。recv()會(huì)回傳收到信息的大小值,如有錯(cuò)誤,會(huì)回傳負(fù)數(shù)值。7)send:致數(shù)據(jù)intsend(intsockfd,void*buffer,intmsg_len,intoptions)其中sockfd、buffer和msg_len和recv()的相同,只不過(guò)是這次把要傳輸?shù)男畔⑾确舃uf。而options有MSG_OOB,MSG_DONTROUTE,MSG_DONTWAIT,MSG_NOSIGNAL,send()會(huì)回傳傳輸?shù)目偞笮≈?。查看socket文件夾里的文件:-16-嵌入

27、式系統(tǒng)課程設(shè)計(jì)說(shuō)明書對(duì)文件夾里的這些文件進(jìn)行編譯:-17-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書查看Makefile文件:對(duì)于每個(gè)程序需要分別編譯arm平臺(tái)的執(zhí)行文件,同時(shí),為了在PC端進(jìn)行測(cè)試,也編譯的PC版本的執(zhí)行文件,Makefile文件如下所示:CC=arm-linux-gccLD=arm-linux-ldEXEC=client.armOBJS=client.oEXEC1=server.armOBJS1=server.oEXEC2=listener.armOBJS2=listener.oEXEC3=talker.armOBJS3=talker.oCFLAGS+=LDFLAGS+=all:$(EXEC

28、)$(EXEC1)$(EXEC2)$(EXEC3)$(EXEC):$(OBJS)$(CC)$(LDFLAGS)-o$(OBJS)$(LDLIBS$(LDLIBS_$)cp$(EXEC)/tftpboot/$(EXEC1):$(OBJS1)$(CC)$(LDFLAGS)-o$(OBJS1)$(LDLIBS$(LDLIBS_$)cp$(EXEC1)/tftpboot/$(EXEC2):$(OBJS2)$(CC)$(LDFLAGS)-o$(OBJS2)$(LDLIBS$(LDLIBS_$)cp$(EXEC2)/tftpboot/$(EXEC3):$(OBJS3)$(CC)$(LDFLAGS)-o$(

29、OBJS3)$(LDLIBS$(LDLIBS_$)cp$(EXEC2)/tftpboot/gcc-oclientclient.cgcc-oserverserver.cgcc-olistenerlistener.cgcc-otalkertalker.cclean:-rm-f$(EXEC)$(EXEC1)$(EXEC2)$(EXEC3)*.elf*.gdb*.o-18-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書此時(shí)在超級(jí)終端中查看一下/mnt文件夾:3.7向服務(wù)器端致數(shù)據(jù)#include#include#include#include#include#include#include#include#include#

30、include#include#include#include-19-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書#include#include#include#include#include#defineFALSE0#defineTRUE1/#defineMYPORT4950/theportuserswillbeconnectingtointMYPORT;intnread=0;charRecbuff1024;intsRecDataLen=0;charsend_buf256;staticintserial_fd;intspeed_arr=B230400,B115200,B57600,B38400,B19200,

31、B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300;intname_arr=230400,115200,57600,38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300;/-20-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書voidset_speed(intfd,intspeed)inti;intstatus;structtermiosOpt;tcgetattr(fd,&Opt);/tcsetattr函數(shù)用于設(shè)置終端的相關(guān)參數(shù)。參數(shù)f

32、d為打開(kāi)的終端文件描述符,參數(shù)optional_actions用于控制修改起作用的時(shí)間,而結(jié)構(gòu)體termios_p中保存了要修改的參數(shù)。for(i=0;i0)set_speed(serial_fd,115200);elseprintf(CantOpenSerialPort!n);exit(0);if(set_Parity(serial_fd,8,1,N)=FALSE)printf(SetparityErrorn);exit(1);-25-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書return0;intmain(intargc,char*argv)intsockfd;intnumbytes;structsocka

33、ddr_intheir_addr;/connectorsaddressinformationstructhostent*he;serial_init();/*parameterscheck*/if(argc!=3)/判斷參數(shù)值的個(gè)數(shù)fprintf(stderr,usage:talkerhostnameportn);exit(1);/*argv1=serveripaddress*/if(he=gethostbyname(argv1)=NULL)/getthehostinfoperror(gethostbyname);exit(1);/*argv2=serverport*/MYPORT=atoi(

34、argv2);/*setupsocket*/if(sockfd=socket(AF_INET,SOCK_DGRAM,0)=-1)/socket初始化-26-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書perror(socket);exit(1);charbuff1024;their_addr.sin_family=AF_INET;/表示TCP/IP協(xié)議their_addr.sin_port=htons(MYPORT);/short,networkbyteordertheir_addr.sin_addr=*(structin_addr*)he-h_addr);memset(&(their_addr.sin_zero

35、),0,8);/zerotherestofthestructwhile(1)while(1)nread=read(serial_fd,buff,1024);/讀串口文件中的數(shù)據(jù),放入buff中,并將長(zhǎng)度返回給nreadif(nread0)printf(n%dn,nread);buffnread=0;/*inti;for(i=0;inread;i+)RecbuffsRecDataLen+i=buffi;sRecDataLen=sRecDataLen+nread;scan(sockfd,their_addr);*/-27-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書printf(n2530sTemperature=%

36、dBoardsTemperature=%dTemperature=%dHumidity=%dn,buff0,buff1,buff2,buff3);if(numbytes=sendto(sockfd,buff,strlen(buff),0,(structsockaddr*)&their_addr,sizeof(structsockaddr)=-1)/sendto函數(shù)獲得套接字文件中的信息長(zhǎng)度并把值賦給numbytesperror(sendto);exit(1);close(sockfd);return0;在超級(jí)終端運(yùn)行./sendData.arm34950出現(xiàn)的結(jié)果如下所示:-28-嵌入式系統(tǒng)課

37、程設(shè)計(jì)說(shuō)明書3.8新建數(shù)據(jù)庫(kù)打開(kāi)SQLServerManagementStudio,登錄修改登錄方式,斷開(kāi)連接用sa登錄:記住服務(wù)器名稱,登錄名及密碼。新建了一個(gè)名為EnvironmentMonitoring的數(shù)據(jù)庫(kù)和一個(gè)名為EM的表。-29-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書表中有四個(gè)屬性:temperature1,temperature2,temperature3,humidity.分別代表將要接收的四個(gè)數(shù)據(jù):2530sTemperature(芯片溫度),BoardsTemperature(板子溫度),Temperature(環(huán)境溫度)和Humidity(環(huán)境濕度)。3.9設(shè)計(jì)界面用C#寫了一個(gè)可以

38、顯示數(shù)據(jù)的界面如下所示-30-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書4調(diào)試過(guò)程在實(shí)驗(yàn)的過(guò)程中,出現(xiàn)了許多意料之外的錯(cuò)誤,列舉一下幾條加以說(shuō)明。(1)以下是在配置交叉編譯器的時(shí)候出現(xiàn)的問(wèn)題,當(dāng)重啟了portmap和nfs,并且關(guān)閉了防火墻以后,依然沒(méi)有ping通,如下:第一次沒(méi)有ping通,隨后進(jìn)行了如下設(shè)置:-31-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書依然沒(méi)有ping通,結(jié)果如下:然后斷開(kāi)了無(wú)線網(wǎng),可以ping通:(2)在啟動(dòng)超級(jí)終端的時(shí)候,有時(shí)候會(huì)出現(xiàn)如下提示:-32-嵌入式系統(tǒng)課程設(shè)計(jì)說(shuō)明書這時(shí)一般是串口線出了問(wèn)題,可以換一根線或通過(guò)重啟實(shí)驗(yàn)箱的方式來(lái)解決;有時(shí)啟動(dòng)超級(jí)終端的時(shí)候,回車會(huì)出現(xiàn)亂碼,而不是rootCvtech/#,一般也是由于串口轉(zhuǎn)USB線出了問(wèn)題,可以通過(guò)換一根線來(lái)解決。(3)在進(jìn)行掛在的時(shí)候,輸入mount2:/tftpboot/mnt/-onolock后會(huì)出現(xiàn)如下所示的結(jié)果:這表明之前已經(jīng)掛載過(guò)一次,現(xiàn)在是掛載成功的狀態(tài)。5總結(jié)本次課程設(shè)計(jì),歷時(shí)三周,是有史以來(lái)時(shí)間最

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論