基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn).doc_第1頁
基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn).doc_第2頁
基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn).doc_第3頁
基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn).doc_第4頁
基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn).doc_第5頁
免費預覽已結束,剩余30頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn)1 系統(tǒng)概述1.1 系統(tǒng)背景近年來,由于計算機技術、網(wǎng)絡技術、現(xiàn)代電子技術的迅猛發(fā)展,無線通信技術在醫(yī)療、自動化控制、遠程監(jiān)測等多個領域得到了廣泛的應用。其中環(huán)境遠程監(jiān)測有其特定的應用背景,一般在比較偏僻、環(huán)境惡劣的無人居住區(qū)域(如沙漠、高山、叢林等危險地區(qū)),這使得很難通過架設電纜來完成數(shù)據(jù)傳輸,因此使用無線通信是一種很好的選擇。對環(huán)境的監(jiān)測是十分重要且有意義的,獲得生存環(huán)境的實時的數(shù)據(jù),有助于我們預測環(huán)境變化的趨勢以及更好的掌握自己生活的環(huán)境現(xiàn)狀并加以改善。1.2 系統(tǒng)簡介本系統(tǒng)在實驗環(huán)境中搭建一個ZigBee網(wǎng)絡,該網(wǎng)絡由一個中心節(jié)點和多個終端節(jié)點以自組織方式構成。終端節(jié)點負責采集環(huán)境溫濕度等數(shù)據(jù)信息,并通過 ZigBee 網(wǎng)絡把采集的數(shù)據(jù)信息發(fā)送至中心節(jié)點;與中心節(jié)點相連的控制器(ARM單片機)將數(shù)據(jù)發(fā)送到串口,再通過socket 通信將數(shù)據(jù)傳到遠程主機,并將獲得的信息存入數(shù)據(jù)庫中。設計一個界面,可通過界面顯示出所需要的信息以及提供相關查詢服務。整個系統(tǒng)設計綜合利用ZigBee網(wǎng)絡的低成本、低功耗、自組織、靈活等優(yōu)良特性,提出一個實時、高效的遠程環(huán)境監(jiān)測解決方案。1.3 關鍵詞解釋1.3.1無線傳感器網(wǎng)絡無線傳感器網(wǎng)絡(Wireless Sensor Network, WSN),就是由部署在監(jiān)測區(qū)域內(nèi)大量的廉價微型傳感器節(jié)點組成,通過無線通信方式形成的一個多跳的自組織的網(wǎng)絡系統(tǒng),其目的是協(xié)作地感知、采集和處理網(wǎng)絡覆蓋區(qū)域中被感知對象的信息,并發(fā)送給觀察者2。傳感器、感知對象和觀察者構成了無線傳感器網(wǎng)絡的三個要素。無線傳感器網(wǎng)絡所具有的眾多類型的傳感器,可探測包括地震、電磁、溫度、濕度、噪聲、光強度、壓力、土壤成分、移動物體的大小、速度和方向等周邊環(huán)境中多種多樣的現(xiàn)象?;贛EMS的微傳感技術和無線聯(lián)網(wǎng)技術為無線傳感器網(wǎng)絡賦予了廣闊的應用前景。這些潛在的應用領域可以歸納為:軍事、航空、反恐、防爆、救災、環(huán)境、醫(yī)療、保健、家居、工業(yè)、商業(yè)等領域34。其主要特點有:1) 低速率傳感器網(wǎng)絡節(jié)點通常只需定期傳輸溫度、濕度、壓力、流量、電量等被測參數(shù),相對而言,被測參數(shù)的數(shù)據(jù)量小,采集數(shù)據(jù)頻率較低。2) 低功耗通常,傳感器節(jié)點利用電池供電,且分布區(qū)域復雜、廣闊,很難通過更換電池方式來補充能量,因此,要求傳感器網(wǎng)絡節(jié)點的功耗要低,傳感器的體積要小。3) 低成本應用無線傳感器網(wǎng)絡,監(jiān)測區(qū)域廣、傳感器的節(jié)點多,且有些區(qū)域環(huán)境的地形復雜,甚至連工作人員都無法進入,一旦安裝傳感器器則很難更換,因而要求傳感器的成本低廉。4) 短距離為了方便組網(wǎng)和傳遞數(shù)據(jù),兩個傳感器節(jié)點之間的距離通常要求在幾十米到幾百米之間。5) 高可靠性無線傳感器網(wǎng)絡的信息獲取是靠分布在監(jiān)測區(qū)域內(nèi)的各個傳感器檢測到的,如傳感器本身不可靠,則其信息的傳輸和處理是沒有任何意義的。6) 大容量要求網(wǎng)絡能容納上千、上萬個節(jié)點。7) 動態(tài)性對于復雜環(huán)境的組網(wǎng),其覆蓋區(qū)域往往會遇到各種電、磁環(huán)境的干擾,加之供電能量的不斷損耗,易引起傳感器節(jié)點故障,因此要求傳感器網(wǎng)絡具有自組網(wǎng)、智能化和協(xié)同感知等功能。1.3.2 ZigBee技術ZigBee技術是一種結構簡單、低功耗、低數(shù)據(jù)率、低成本和高可靠性的雙向微功率網(wǎng)格式無線接入技術,介于RFID和藍牙之間的技術提案,此前被稱作“Hom2eRFLite”或“FireFly”無線技術,主要用于近距離無線連接5。最重要的是ZigBee技術支持地理定位功能,它工作于無需注冊的2.4 GHz ISM頻段,傳輸速率為250 kb/s,傳輸距離可以從標準的75米,到擴展后的幾百米,甚至幾千米,利用ZigBee技術可由多到65535個無線微功率收發(fā)機組成一個龐大而有效的無線網(wǎng)絡平臺6。其主要特點有:1) 低功耗 由于ZigBee的傳輸速率低,發(fā)射功率僅為1mW,而且采用了休眠模式,功耗低,因此ZigBee設備非常省電。據(jù)估算,ZigBee設備僅靠兩節(jié)5號電池就可以維持長達6個月到2年左右的使用時間,這是其它無線設備望塵莫及的。2) 成本低 ZigBee模塊的初始成本在6美元左右,估計很快就能降到1.5-2.5美元,并且ZigBee協(xié)議是免專利費的。低成本對于ZigBee也是一個關鍵的因素。3) 時延短 通信時延和從休眠狀態(tài)激活的時延都非常短,典型的搜索設備時延30ms,休眠激活的時延是15ms,活動設備信道接入的時延為15ms。因此ZigBee技術適用于對時延要求苛刻的無線控制(如工業(yè)控制場合等)應用。4) 網(wǎng)絡容量大 一個星型結構的Zigbee網(wǎng)絡最多可以容納254個從設備和一個主設備,一個區(qū)域內(nèi)可以同時存在最多100個ZigBee網(wǎng)絡,而且網(wǎng)絡組成靈活。5) 可靠 采取了碰撞避免策略,同時為需要固定帶寬的通信業(yè)務預留了專用時隙,避開了發(fā)送數(shù)據(jù)的競爭和沖突。MAC層采用了完全確認的數(shù)據(jù)傳輸模式,每個發(fā)送的數(shù)據(jù)包都必須等待接收方的確認信息。如果傳輸過程中出現(xiàn)問題可以進行重發(fā)7。6) 安全 ZigBee提供了基于循環(huán)冗余校驗(CRC)的數(shù)據(jù)包完整性檢查功能,支持鑒權和認證, 采用了AES-128的加密算法,各個應用可以靈活確定其安全屬性。ZigBee 網(wǎng)絡中存在三種邏輯設備類型:協(xié)調(diào)器、路由器和終端設備。1) 協(xié)調(diào)器 協(xié)調(diào)器包含所有的網(wǎng)絡消息,是3種設備類型中最復雜的一種,也是該網(wǎng)絡的第一個設備。協(xié)調(diào)器具有存儲容量大、計算能力強的特點,其主要任務包括發(fā)送網(wǎng)絡信標、建立一個網(wǎng)絡、管理網(wǎng)絡節(jié)點、存儲網(wǎng)絡節(jié)點信息、尋找一對節(jié)點間的路由消息和不斷地接收信息8。2) 路由器 路由器的功能主要有允許其他設備加入網(wǎng)絡、多跳路由和協(xié)助終端設備的通訊。3) 終端設備 終端設備沒有特定的維持網(wǎng)絡結構的責任,它可以處于睡眠或者喚醒狀態(tài),因此它可以是一個電池供電設備。ZigBee 網(wǎng)絡有三種網(wǎng)絡拓撲結構:星型、樹狀和網(wǎng)狀拓撲結構。在星型拓撲結構中,整個網(wǎng)絡由一個稱為ZigBee協(xié)調(diào)器的設備來控制,ZigBee協(xié)調(diào)器負責發(fā)起和維持網(wǎng)絡正常工作,保持同網(wǎng)絡終端設備通信;在網(wǎng)狀型和樹型拓撲結構中,ZigBee 協(xié)調(diào)器負責啟動網(wǎng)絡以及選擇關鍵的網(wǎng)絡參數(shù),同時,也可以使用ZigBee 路由器來擴展網(wǎng)絡結構;在樹型網(wǎng)絡中,路由器采用分級路由策略來傳送數(shù)據(jù)和控制信息。樹型網(wǎng)絡可以采用基于信標的方式進行通信;網(wǎng)狀型網(wǎng)絡中,設備之間使用完全對等的通信方式,ZigBee路由器不發(fā)送通信信標。1.3.3 Linux 交叉編譯通常,程序是在一臺計算機上編譯,然后再分布到將要使用的其他計算機上。當主機系統(tǒng)(運行編譯器的系統(tǒng))和目標系統(tǒng)(產(chǎn)生的程序?qū)⒃谄渖线\行的系統(tǒng))不兼容時,該過程就叫做交叉編譯。除了兼容性這個原因之外,以下兩種情況也需要進行交叉編譯:(1) 目標系統(tǒng)對其可用的編譯工具沒有本地設置;(2) 主機系統(tǒng)比目標系統(tǒng)要快得多,或者具有更多的可用資源。系統(tǒng)中使用的是基于ARM架構的Linux平臺交叉編譯工具arm-linux-gcc,其版本為arm-linux-gcc-4.3.3。需要說明的是不同Linux內(nèi)核要使用相應的交叉編譯器編譯生成正確的內(nèi)核文件。1.3.4 socket 通信Windows Sockets是廣泛應用的、開放的、支持多種協(xié)議的網(wǎng)絡編程接口。其中套接字(Socket)是通信的基石,是支持TCP/IP協(xié)議網(wǎng)絡通信的基本操作單元,可以將套接字看作是不同主機之間的進程進行雙向通信的端點。套接字可以分為兩類:流套接字和數(shù)據(jù)報套接字14。1) 流套接字流套接字提供雙向的、有序的、無重復并且無記錄邊界的數(shù)據(jù)流服務,它適用于處理大量數(shù)據(jù)。流套接字是面向連接的,通信雙方進行數(shù)據(jù)交換前必須建立一條路徑。這樣既確定了它們之間存在的路由,又保證了雙方是活動的、可彼此響應的,但在通信雙方之間建立一個通信信道需要很多開銷。除此之外,大部分面向連接的協(xié)議為保證發(fā)送無誤,可能會需要執(zhí)行額外的計算來驗證正確性,因此還會進一步增加開銷。2) 數(shù)據(jù)報套接字數(shù)據(jù)報套接字支持雙向的數(shù)據(jù)流,但并不保證數(shù)據(jù)傳輸?shù)目煽啃?、有序性和無重復性。數(shù)據(jù)報套接字是無連接的,通信雙方在進行通信前不需要事先建立連接,也不需要維護通信鏈路,因此可以節(jié)省開銷,但不適合大量、有序數(shù)據(jù)的傳輸15??紤]到本系統(tǒng)中需要傳輸?shù)臄?shù)據(jù)只是一些環(huán)境信息,其特點是數(shù)據(jù)量小且變化連續(xù),不易突發(fā)。因此系統(tǒng)采用數(shù)據(jù)報套接字完成數(shù)據(jù)傳輸。2 系統(tǒng)總體分析與設計2.1 系統(tǒng)總體分析由于本系統(tǒng)要實現(xiàn)環(huán)境監(jiān)測的功能,而實驗室所使用的嵌入式實驗箱CVT6410已經(jīng)集成了監(jiān)測環(huán)境中各項指標(芯片溫度、實驗板溫度、環(huán)境溫度、環(huán)境濕度等)模塊。因此,在本次課程設計中已經(jīng)有了能夠?qū)崟r接收環(huán)境信息的功能,還有許多其他的功能也要實現(xiàn),具體包括將接收到的信息轉換為可讀的數(shù)據(jù),并利用socket通信將數(shù)據(jù)傳到PC端(即服務器端)。此外,在PC機端接收到數(shù)據(jù)后,要能夠?qū)?shù)據(jù)顯示出來,并將這些數(shù)據(jù)傳入構建的數(shù)據(jù)庫中,以便于備份與查詢。2.2 系統(tǒng)總體設計(1)獲取環(huán)境信息通過集成在嵌入式實驗箱CVT6410中的溫度傳感器、濕度傳感器、光照傳感器以及煙霧傳感器等傳感器獲取所處環(huán)境的相關信息。(2)實時接收環(huán)境信息利用Socket網(wǎng)絡編程,實時從串口監(jiān)聽并接收遠端控制器發(fā)來的環(huán)境數(shù)據(jù)。在通信過程中,PC機作為服務器端,實驗箱作為客戶機端進行通信。(3)將接收到的數(shù)據(jù)存儲到數(shù)據(jù)庫中新建一個數(shù)據(jù)庫用于存儲接收到的數(shù)據(jù),數(shù)據(jù)庫中可以只有一個表,每一個屬性代表一個檢測的指標(溫度、濕度、光照等)。(4)將環(huán)境數(shù)據(jù)顯示出來用C#做一個界面,既可以直接顯示從客戶機端接收到的數(shù)據(jù),也可以像在數(shù)據(jù)庫中一樣以表格的形式顯示出環(huán)境參數(shù)。2.3 系統(tǒng)流程圖開始服務器與客戶機是否處于同一網(wǎng)段?是否可以相互通信?客戶機向服務器發(fā)送環(huán)境數(shù)據(jù)服務器端接收到數(shù)據(jù)?數(shù)據(jù)庫連接成功?環(huán)境數(shù)據(jù)存入數(shù)據(jù)庫將數(shù)據(jù)顯示在界面中結束3 開發(fā)實現(xiàn)過程3.1 安裝VMware虛擬機在Windows下安裝虛擬機VMware。VMware (Virtual Machine ware)是一個“虛擬PC”軟件公司。它的產(chǎn)品可以使你在一臺機器上同時運行二個或更多Windows、DOS、LINUX系統(tǒng)。與“多啟動”系統(tǒng)相比,VMware采用了完全不同的概念。多啟動系統(tǒng)在一個時刻只能運行一個系統(tǒng),在系統(tǒng)切換時需要重新啟動機器。VMware是真正“同時”運行,多個操作系統(tǒng)在主系統(tǒng)的平臺上,就象標準Windows應用程序那樣切換。而且每個操作系統(tǒng)你都可以進行虛擬的分區(qū)、配置而不影響真實硬盤的數(shù)據(jù),你甚至可以通過網(wǎng)卡將幾臺虛擬機用網(wǎng)卡連接為一個局域網(wǎng),極其方便。虛擬機裝好以后出現(xiàn)如下界面:3.2 安裝Fedora操作系統(tǒng)Fedora 是一個知名的Linux發(fā)行版,是一款由全球社區(qū)愛好者構建的面向日常應用的快速、穩(wěn)定、強大的操作系統(tǒng)。它允許任何人自由地使用、修改和重發(fā)布,無論現(xiàn)在還是將來。它由一個強大的社群開發(fā),這個社群的成員以自己的不懈努力,提供并維護自由、開放源碼的軟件和開放的標準。Fedora 項目由 Fedora 基金會管理和控制,得到了 Red Hat, Inc. 的支持。Fedora 是一個獨立的操作系統(tǒng),可運行的體系結構包括 x86(即i386-i686), x86_64 和 PowerPC。Fedora安裝過程:Fedora開機過程:Fedora 開機的登錄界面:3.3 配置編譯環(huán)境1.以root身份登錄ubuntu2.然后將光盤中的4.3.3.tar.gz拷到桌面上3.解壓并安裝,具體請執(zhí)行如下命令:# tar zxvf 4.3.3.tar.gz -C /4.設置環(huán)境變量,執(zhí)行如下命令:# gedit /etc/profile在最后面添加一行export PATH=$PATH:/home/zzx/Desktop/6410/4.3.3/bin如圖所示:重新啟動Fedora5.測試是否配置成功,打開終端,輸入以下命令:# arm-linux-gcc v倒數(shù)第二行顯示了版本信息,至此,編譯器已安裝好。3.4 Linux交叉編譯環(huán)境的配置1.安裝交叉編譯器2.配置Fedora10的IP地址為2進入root用戶:supassword/sbin/ifconfig eth0 2 netmask gedit /etc/exports寫入:/tftpboot 2/(rw)保存并退出/sbin/service portmap restart/sbin/service nfs restart/sbin/service iptables stop3.創(chuàng)建tftpboot文件夾cd /mkdir tftpbootchmod 777 /tftpboot4.將6410實驗箱和PC機用網(wǎng)線相連,啟動實驗箱ping 3.5 超級終端1. Windows 7系統(tǒng)安裝HyperTerminal,即將HyperTerminal文件夾下的HyperTerminal_English_ANSI 里的hticons.dll和hypertrm.dll拷貝至C:/Windows/System32下;2. 使用usb轉串口線(或普通RS232線)將6410實驗箱和PC機相連。打開HyperTerminal軟件,選擇正確的串口。設置完成后點擊確認,正確連接至6410實驗箱后,多次回車,出現(xiàn)如下結果:3. 掛載tftpboot文件夾中文件至嵌入式Linux的mnt文件夾中。輸入如下命令:mount 2:/tftpboot /mnt/ -o nolock掛在成功后,輸入cd /mnt查看掛載結果。3.6 socket 通信Linux系統(tǒng)是通過提供套接字(socket)來進行網(wǎng)絡編程的。網(wǎng)絡程序通過socket和其它幾個函數(shù)的調(diào)用,會返回一個通訊的文件描述符,我們可以將這個描述符看成普通的文件的描述符來操作,這就是linux的設備無關性的好處。我們可以通過向描述符讀寫操作實現(xiàn)網(wǎng)絡之間的數(shù)據(jù)交流。1) socketint socket(int domain, int type,int protocol)domain:說明網(wǎng)絡程序所在的主機采用的通訊協(xié)族(AF_UNIX和AF_INET等)。AF_UNIX只能夠用于單一的Unix系統(tǒng)進程間通信,而AF_INET是針對Internet的,因而可以允許在遠程主機之間通信。type:網(wǎng)絡程序所采用的通訊協(xié)議(SOCK_STREAM,SOCK_DGRAM等)。SOCK_STREAM表明使用的是TCP協(xié)議,這樣會提供按順序的、可靠、雙向、面向連接的比特流。SOCK_DGRAM表明使用的是UDP協(xié)議,這樣只會提供定長的、不可靠、無連接的通信。protocol:由于指定了type,所以這個地方一般只要用0來代替就可以了。socket為網(wǎng)絡通訊做基本的準備。成功時返回文件描述符,失敗時返回-1,看errno可知道出錯的詳細情況。2) bindint bind(int sockfd, struct sockaddr *my_addr, int addrlen)sockfd:是由socket調(diào)用返回的文件描述符。addrlen:是sockaddr結構的長度。my_addr:是一個指向sockaddr的指針。sockaddr的定義如下:struct sockaddr unisgned short as_family; char sa_data14; ; 不過由于系統(tǒng)的兼容性,我們一般不用這個頭文件,而使用另外一個結構(struct sockaddr_in) 來代替。sockaddr_in的定義如下: struct sockaddr_in unsigned short sin_family; unsigned short int sin_port; struct in_addr sin_addr; unsigned char sin_zero8; sin_family一般為AF_INET,sin_addr設置為INADDR_ANY表示可以和任何的主機通信,sin_port是我們要監(jiān)聽的端口號。sin_zero8是用來填充的。Bind函數(shù)將本地的端口同socket返回的文件描述符捆綁在一起。成功則返回0,失敗的情況和socket一樣。3) listenint listen(int sockfd,int backlog) sockfd:是bind后的文件描述符。backlog:設置請求排隊的最大長度。當有多個客戶端程序和服務端相連時,使用這個表示可以介紹的排隊長度。listen函數(shù)將bind的文件描述符變?yōu)楸O(jiān)聽套接字。返回的情況和bind一樣。4) acceptint accept(int sockfd, struct sockaddr *addr,int *addrlen)sockfd:是listen后的文件描述符. addr,addrlen是用來給客戶端的程序填寫的,服務器端只要傳遞指針就可以了。bind,listen和accept是服務器端用的函數(shù),accept調(diào)用時,服務器端的程序會一直阻塞到有一個客戶程序發(fā)出了連接。accept成功時返回最后的服務器端的文件描述符,這個時候服務器端可以向該描述符寫信息了。失敗時返回-1。5) connectint connect(int sockfd, struct sockaddr * serv_addr,int addrlen) sockfd:socket返回的文件描述符。serv_addr:儲存了服務器端的連接信息。其中sin_add是服務端的地址。addrlen:serv_addr的長度。connect函數(shù)是客戶端用來同服務端連接的。成功時返回0,sockfd是同服務端通訊的文件描述符失敗時返回-1。到第三階段,可以存取資料了,要讀取資料,我們可以用 recv() 函式: 6) recv:接收數(shù)據(jù)int recv(int sockfd, void* buf, int maxbuf, int options)sockfd:socket返回的文件描述符。buf:是收到數(shù)據(jù)后存放的緩沖位置。maxbuf:是緩沖區(qū)buf的大小。 recv()會回傳收到信息的大小值,如有錯誤,會回傳負數(shù)值。7) send:發(fā)送數(shù)據(jù)int send(int sockfd, void *buffer, int msg_len, int options)其中sockfd、buffer和msg_len和recv()的相同,只不過是這次把要傳輸?shù)男畔⑾确舃uf。而options有MSG_OOB,MSG_DONTROUTE,MSG_DONTWAIT,MSG_NOSIGNAL,send()會回傳傳輸?shù)目偞笮≈怠?查看 socket 文件夾里的文件:對文件夾里的這些文件進行編譯:查看Makefile 文件:對于每個程序需要分別編譯arm平臺的執(zhí)行文件,同時,為了在PC端進行測試,也編譯的PC版本的執(zhí)行文件,Makefile文件如下所示:CC = arm-linux-gccLD = arm-linux-ldEXEC = client.armOBJS = client.o EXEC1 = server.armOBJS1 = server.oEXEC2 = listener.armOBJS2 = listener.oEXEC3 = talker.armOBJS3 = talker.oCFLAGS +=LDFLAGS += all: $(EXEC) $(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 $ $(OBJS3) $(LDLIBS$(LDLIBS_$)cp $(EXEC2) /tftpboot/gcc -o client client.cgcc -o server server.cgcc -o listener listener.cgcc -o talker talker.cclean:-rm -f $(EXEC) $(EXEC1) $(EXEC2) $(EXEC3) *.elf *.gdb *.o此時在超級終端中查看一下 /mnt文件夾:3.7 向服務器端發(fā)送數(shù)據(jù)#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FALSE0#define TRUE1/#define MYPORT 4950 / the port users will be connecting toint MYPORT;int nread=0;char Recbuff1024;int sRecDataLen = 0;char send_buf256;static int serial_fd;int speed_arr = B230400, B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600, B4800, B2400, B1200, B300;int name_arr = 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300;/-void set_speed(int fd,int speed)int i;int status;struct termios Opt;tcgetattr(fd, &Opt);/tcsetattr函數(shù)用于設置終端的相關參數(shù)。參數(shù)fd為打開的終端文件描述符,參數(shù)optional_actions用于控制修改起作用的時間,而結構體termios_p中保存了要修改的參數(shù)。for( i = 0; i 0)set_speed(serial_fd,115200);elseprintf(Cant Open Serial Port!n);exit(0);if(set_Parity(serial_fd,8,1,N) = FALSE)printf(Set parity Errorn);exit(1);return 0;int main(int argc, char *argv) int sockfd; int numbytes; struct sockaddr_in their_addr; / connectors address information struct hostent *he; serial_init(); /* parameters check */ if (argc != 3) /判斷參數(shù)值的個數(shù) fprintf(stderr,usage: talker hostname portn); exit(1); /* argv1 = server ip address */ if (he=gethostbyname(argv1) = NULL) / get the host info perror(gethostbyname); exit(1); /* argv2 = server port */MYPORT=atoi(argv2); /* setup socket */ if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1) /socket初始化 perror(socket); exit(1); char buff1024; their_addr.sin_family = AF_INET; / 表示TCP/IP協(xié)議 their_addr.sin_port = htons(MYPORT); / short, network byte order their_addr.sin_addr = *(struct in_addr *)he-h_addr); memset(&(their_addr.sin_zero), 0, 8); / zero the rest of the struct while(1) while(1) nread = read(serial_fd,buff,1024);/讀串口文件中的數(shù)據(jù),放入buff中,并將長度返回給nreadif(nread 0)printf(n%dn,nread);buffnread = 0;/*int i;for(i=0;inread;i+)RecbuffsRecDataLen + i = buffi;sRecDataLen = sRecDataLen + nread;scan(sockfd,their_addr);*/printf(n2530s Temperature=%d Boards Temperature=%d Temperature=%d Humidity=%dn,buff0,buff1,buff2,buff3); if (numbytes=sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr) = -1) /sendto 函數(shù)獲得套接字文件中的信息長度并把值賦給numbytes perror(sendto); exit(1); close(sockfd); return 0;在超級終端運行./sendData.arm 3 4950出現(xiàn)的結果如下所示:3.8 新建數(shù)據(jù)庫打開SQL Server Management Studio,登錄修改登錄方式,斷開連接用sa登錄:記住服務器名稱,登錄名及密碼。 新建了一個名為Environment Monitoring 的數(shù)據(jù)庫和一個名為EM的表。 表中有四個屬性:temperature1,temperature2,temperature3,humidity.分別代表將要接收的四個數(shù)據(jù):2530s Temperature(芯片溫度), Boards Temperature(板子溫度), Temperature(環(huán)境溫度)和Humidity(環(huán)境濕度)。3.9設計界面用C#寫了一個可以顯示數(shù)據(jù)的界面如下所示4 調(diào)試過程在實驗的過程中,出現(xiàn)了許多意料之外的錯誤,列舉一下幾條加以說明。(1) 以下是在配置交叉編譯器的時候出現(xiàn)的問題,當重啟了portmap和nfs,并且關閉了防火墻以后,依然沒有ping通,如下:第一次沒有ping 通,隨后進行了如下設置:依然沒有ping 通,結果如下:然后斷開了無線網(wǎng),可以ping通:(2) 在啟動超級終端的時候,有時候會出現(xiàn)如下提示:這時一般是串口線出了問題,可以換一根線或通過重啟實驗箱的方式來解決;有時啟動超級終端的時候,回車會出現(xiàn)亂碼,而不是rootCvtech /#,一般也是由于串口轉USB線出了問題,可以通過換一根線來解決。(3) 在進行掛在的時候,輸入mount 2:/tftpboot /mnt/ -o nolock 后會出現(xiàn)如下所示的結果:這表明之前已經(jīng)掛載過一次,現(xiàn)在是掛載成功的狀態(tài)。5 總結本次課程設計,歷時三周,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔