基于無線傳感器網(wǎng)絡和GPRS的遠程環(huán)境監(jiān)測系統(tǒng)_第1頁
基于無線傳感器網(wǎng)絡和GPRS的遠程環(huán)境監(jiān)測系統(tǒng)_第2頁
基于無線傳感器網(wǎng)絡和GPRS的遠程環(huán)境監(jiān)測系統(tǒng)_第3頁
基于無線傳感器網(wǎng)絡和GPRS的遠程環(huán)境監(jiān)測系統(tǒng)_第4頁
基于無線傳感器網(wǎng)絡和GPRS的遠程環(huán)境監(jiān)測系統(tǒng)_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn)課程設計 學生學號 實驗課成績學 生 實 驗 報 告 書 實驗課程名稱嵌入式系統(tǒng)設計開 課 學 院指導教師姓名學 生 姓 名學生專業(yè)班級2013-2014學年第二學期目錄課程設計任務書21.系統(tǒng)描述31.1研究意義31.2遠程環(huán)境監(jiān)測的發(fā)展前景32系統(tǒng)總體分析43.系統(tǒng)總體設計43.1系統(tǒng)主要模塊硬件設計43.1.1現(xiàn)場監(jiān)控網(wǎng)絡硬件43.1.2監(jiān)控終端傳感器節(jié)點設計53.1.3監(jiān)控匯聚節(jié)點設計53.1.4遠程監(jiān)控中心硬件53.2系統(tǒng)軟件設計63.2.1傳感器網(wǎng)絡節(jié)點63.2.2監(jiān)測中心平臺74.詳細的流程圖74.1設備安裝74.2配置IP和開啟

2、服務94.3創(chuàng)建tftpboot文件夾104.4啟動超級終端114.5拷貝文件114.6編譯源程序134.7通信程序運行134.8打開數(shù)據(jù)庫接收數(shù)據(jù)135.軟件的測試方法和測試結果146.實驗體會167附件:16sendData 代碼16recieve 代碼28本科生課程設計成績評定表34 課程設計任務書學生姓名: 專業(yè)班級: 指導教師: 工作單位: 計算機學院 題 目: 基于無線傳感器網(wǎng)絡的遠程環(huán)境監(jiān)測系統(tǒng)的設計與實現(xiàn) 初始條件:1理論:使用嵌入式系統(tǒng)設計、計算機組成原理、數(shù)字邏輯、微機原理與接口技術、C語言,程序設計方法等專業(yè)知識。2實踐:學習和使用嵌入式實驗箱CVT6410的使用方法、L

3、inux交叉編譯軟件環(huán)境。完成從串口獲取信息,并通過Socket方式進行數(shù)據(jù)通訊,將信息存儲到數(shù)據(jù)庫,通過web頁面發(fā)布相關信息。 要求完成的主要任務: (包括課程設計工作量及其技術要求,以及說明書撰寫等具體要求)課程設計內容:利用嵌入式實驗箱CVT6410完成以下內容,撰寫嵌入式系統(tǒng)設計報告。搭建嵌入式系統(tǒng)開發(fā)環(huán)境,進行Linux內核移植,燒寫Linux系統(tǒng),編寫應用程序,完成以下功能:1. 通過串口傳輸,獲得ZigBee嵌入式網(wǎng)關采集的ZigBee傳感器模塊上的信息;2. 利用實驗箱上的RJ45網(wǎng)口,通過網(wǎng)線與PC機建立連接,并基于Linux環(huán)境下的Socket通訊方式在實驗箱與PC機間傳

4、遞數(shù)據(jù),將采集的信息存儲于PC機的數(shù)據(jù)庫中。3. 在PC機端顯示采集的信息。課程設計報告書正文的內容應包括:(1)系統(tǒng)描述(問題域描述);(2)系統(tǒng)總體分析;(3)系統(tǒng)總體設計;(4)詳細的流程圖或偽代碼;(5)軟件的測試方法和測試結果;(6)研制報告(研制過程,本設計的評價、特點、不足、收獲與體會等);時間安排:序號設計內容所用時間1查閱資料,熟悉實驗平臺和搭建嵌入式系統(tǒng)開發(fā)環(huán)境,完成Linux內核移植和燒寫Linux系統(tǒng)0.5周2相關基礎技術掌握1 周3應用軟件系統(tǒng)的開發(fā)與實現(xiàn),及撰寫文檔1.5 周合 計3 周 指導教師簽名: 2014 年 7月 4日1.系統(tǒng)描述1.1研究意義隨著人類社會

5、的快速發(fā)展及無序、無度的環(huán)境利用,使自然環(huán)境遭到了巨大的破壞,這不僅影響社會經(jīng)濟,還危及到人類的生存安全。因此必須對生存環(huán)境進行精確、實時的監(jiān)測,以有效降低各種環(huán)境災害對人類造成的生命財產(chǎn)損失。近年來,由于計算機技術、網(wǎng)絡技術、現(xiàn)代電子技術的迅猛發(fā)展,無線通信技術在醫(yī)療、自動化控制、遠程監(jiān)測等多個領域得到了廣泛的應用。其中環(huán)境遠程監(jiān)測有其特定的應用背景,一般在比較偏僻、環(huán)境惡劣的無人居住區(qū)域(如沙漠、高山、叢林等危險地區(qū)),這使得很難通過架設電纜來完成數(shù)據(jù)傳輸,因此使用無線通信是一種很好的選擇。無線通信技術從通信距離上可劃分為遠距離無線通信和短距離無線通信技術,各種無線通信技術根據(jù)其自身技術特

6、點適用于不同的領域。本研究利用無線通信技術進行環(huán)境的遠程實時監(jiān)測,掌握環(huán)境變化信息從而達到高效的預警和監(jiān)測目的。1.2遠程環(huán)境監(jiān)測的發(fā)展前景目前國內外市場上存在兩種較為成熟的環(huán)境遠程監(jiān)測方案:一種是基于遠距離無線通信(如GPRS,CDMA等移動通信網(wǎng)絡)的環(huán)境遠程監(jiān)測系統(tǒng),一種是基于近距離無線通信(如ZigBee,Bluetooth等)的環(huán)境監(jiān)測系統(tǒng)。在中國具有代表性的遠距離無線通信網(wǎng)絡是 GPRS 和 CDMA 移動通信網(wǎng)。GPRS(General Packet Radio Service,通用分組無線業(yè)務)是在 GSM 網(wǎng)絡的基礎上疊加一個新的網(wǎng)絡而形成的邏輯實體,是在現(xiàn)有GSM系統(tǒng)基礎上

7、發(fā)展出來的一種新的分組數(shù)據(jù)承載業(yè)務1。由于具有永久在線、遠距離傳輸、數(shù)據(jù)傳輸速率高、按流量計費等特點而廣泛應用于移動商務、移動互聯(lián)網(wǎng)、工業(yè)控制等領域;而在近距離無線通信領域中,ZigBee 技術和藍牙技術一直是業(yè)界談論的熱點。ZigBee技術由于具有低成本、低功耗、低復雜度、低傳輸速率以及較遠的傳輸距離等特點,廣泛應用于智能家居、工業(yè)控制、手機終端、樓宇自動化等領域,在無線通信領域具有顯而易見的優(yōu)勢和潛在的應用價值。近幾年結合ZigBee和GPRS提出的遠程控制解決方案也越來越多,如無線自動抄表系統(tǒng)、遠程農作物監(jiān)控系統(tǒng)、在線水質監(jiān)測系統(tǒng)等。越來越多的相關應用也會逐漸在未來社會中得以實現(xiàn),從而更

8、好地促進人類發(fā)展,合理地分配各種資源。2系統(tǒng)總體分析搭建嵌入式系統(tǒng)開發(fā)環(huán)境,進行Linux內核移植,燒寫Linux系統(tǒng),編寫應用程序,完成以下功能:1. 通過串口傳輸,獲得ZigBee嵌入式網(wǎng)關采集的ZigBee傳感器模塊上的信息;2. 利用實驗箱上的RJ45網(wǎng)口,通過網(wǎng)線與PC機建立連接,并基于Linux環(huán)境下的Socket通訊方式在實驗箱與PC機間傳遞數(shù)據(jù),將采集的信息存儲于PC機的數(shù)據(jù)庫中。3. 在PC機端顯示采集的信息。3.系統(tǒng)總體設計3.1系統(tǒng)主要模塊硬件設計對于網(wǎng)絡節(jié)點的設計,主要依據(jù)以下幾個方面:(1)低功耗:硬件上盡可能使用低電壓、低功耗的芯片。軟件上可以添置電源管理功能,合理

9、分配能量。(2)優(yōu)良射頻性能:提高節(jié)點的射頻性能可以改善網(wǎng)絡工作能力,比如同等功耗下節(jié)點通信距離,越大往往具有越強的實用性。(3)微型化:節(jié)點體積應足夠小,保證對目標系統(tǒng)本身特性不會構成影響,另外也方便部署。(4)低成本:低成本保證了節(jié)點的廣泛使用,設計中節(jié)點模塊不能太多且不能太復雜。(5)可擴展性:采用模塊化設計,根據(jù)不同的需要可以添加不同的功能模塊。在這里,針對實際項目需求與網(wǎng)絡節(jié)點的要求,本著自主研發(fā)的態(tài)度,以ZigBee系列芯片CC2430為核心設計整個硬件平臺。整個硬件結構包括傳感器板、ZigBee網(wǎng)絡節(jié)點和串口。3.1.1現(xiàn)場監(jiān)控網(wǎng)絡硬件現(xiàn)場監(jiān)控網(wǎng)絡主要由匯聚節(jié)點和終端傳感器節(jié)點組

10、成,其中終端傳感器節(jié)點主要完成數(shù)據(jù)采集,匯聚節(jié)點一方面接收終端節(jié)點的環(huán)境信息,同時要將環(huán)境信息通過串口發(fā)送至遠程監(jiān)控控制中心.3.1.2監(jiān)控終端傳感器節(jié)點設計監(jiān)控終端傳感器節(jié)點由傳感器模塊、CC2430ZigBee模塊和電源模塊組成.傳感器負責監(jiān)控區(qū)域內信息的探測和數(shù)據(jù)轉換;CC2430負責控制整個節(jié)點的管理、數(shù)據(jù)采集和無線通信;電源模塊為傳感器節(jié)點提供運行所需的能量.3.1.3監(jiān)控匯聚節(jié)點設計 監(jiān)控匯聚節(jié)點由單片機、CC2430ZigBee模塊、串口、電源組成.其中單片機為主控機,管理協(xié)調匯聚節(jié)點的所有功能,完成與CC2430模塊的數(shù)據(jù)通訊,同時控制串口發(fā)送和接收數(shù)據(jù).a.單片機. 監(jiān)控匯聚

11、節(jié)點選用s3c6410系列單片機,由于CC2430模塊都需要通過串口與單片機通信,因此通過模擬開關74HC4052芯片選擇不同模塊進行通信.當74HC4052芯片的使能端VEE為低電平時,若S1和S2都為低電平時,串口0接通,單片機與GPRS進行通信;若為S1低電平,S0為高電平時,串口1接通,單片機與監(jiān)控點CC2430模塊進行通信;S1為高電平,S2為低電平時,串口2接通,單片機與GPS進行通信.因此通過P0.0和P0.1口來控制S1和S0的狀態(tài)就能選擇AT89C52與不同模塊進行通信b.電源模塊. 由于單片機、74HC4052芯片、Max232芯片和TC35i模塊的供電電壓為5V,而CC2

12、430模塊和GPS模塊的供電電壓為3.3V,為了將5V轉化為3.3V,需要采用TPS7333Q芯片來實現(xiàn)電壓的轉換.3.1.4遠程監(jiān)控中心硬件遠程監(jiān)控中心主要由監(jiān)控中心服務器、數(shù)據(jù)庫系統(tǒng)與應用軟件、GPRS通信模塊組成。3.2系統(tǒng)軟件設計無線傳感器網(wǎng)絡節(jié)點的工作分為兩個階段:組建網(wǎng)絡階段和數(shù)據(jù)收發(fā)階段:組網(wǎng)之前協(xié)調器和精簡功能設備(ReducedFunction Device,RFD)已經(jīng)配置好各自的MAC地址,只要保證相互之間不沖突即可。在協(xié)調器和各個RFD組建網(wǎng)絡完成之前,相互之間是通過MAC地址進行通信的。在組網(wǎng)階段,協(xié)調器選擇一個PAN ID建立網(wǎng)絡,建立成功后允許RFD加入網(wǎng)絡。只要

13、RFD發(fā)出加入網(wǎng)絡的請求數(shù)據(jù)幀,協(xié)調器就允許該RFD加入網(wǎng)絡。并同時分配用于網(wǎng)內通信的16bit的短地址,而不再使用64bit的MAC地址,這樣可以節(jié)省無線傳感器網(wǎng)絡節(jié)點有限的能量。RFD上電以后,發(fā)出加入網(wǎng)絡的請求數(shù)據(jù)幀。如該RFD之前已經(jīng)加入?yún)f(xié)調器組建的網(wǎng)絡,它可以執(zhí)行孤立節(jié)點通知過程來定位其之前關聯(lián)的網(wǎng)絡。否則,以新設備加入?yún)f(xié)調器組建的網(wǎng)絡并從協(xié)調器處獲得網(wǎng)絡短地址。當協(xié)調器組網(wǎng)成功后,RFD均已加入網(wǎng)絡,便可進行數(shù)據(jù)的收發(fā)。3.2.1傳感器網(wǎng)絡節(jié)點 考慮到各個RFD之間進行通信的意義不大,且增加網(wǎng)絡結構的復雜性,在項目中采用星形網(wǎng)絡拓撲結構。該結構由一個協(xié)調器和多個RFD構成。RFD只

14、能與協(xié)調器直接進行通信,而各個RFD之間無法直接進行通信。如果RFD需要進行通信,需要通過協(xié)調器進行轉發(fā)。在編寫協(xié)調器和RFD的代碼之前需要根據(jù)要實現(xiàn)的功能編寫配置文件。 對于終端節(jié)點,其流程較簡單,設置好定時器中斷,每隔一定時間讀取傳感器數(shù)據(jù),并將其發(fā)送至相鄰的協(xié)調節(jié)點,發(fā)送完后便進入待機狀態(tài),為減少能量損耗,直到定時中斷的再次到來。協(xié)調節(jié)點在上電后負責組建網(wǎng)絡,當然網(wǎng)絡組建好后,進入數(shù)據(jù)收發(fā)段,如果監(jiān)測收到數(shù)據(jù),便將數(shù)據(jù)發(fā)送到相鄰的協(xié)調節(jié)點,如果傳送到匯聚節(jié)點,便解析數(shù)據(jù)包,并重新按規(guī)定格式打包,通過串口發(fā)送至GPRS模塊,GPRS模塊負責將數(shù)據(jù)發(fā)送至監(jiān)測中心軟件。 3.2.2監(jiān)測中心平臺

15、監(jiān)測中心將收集的各傳感器數(shù)據(jù)經(jīng)過處理以后顯示給用戶,根據(jù)用戶需要將采集到的數(shù)據(jù)情況保存于文件或數(shù)據(jù)庫中,以備查詢。監(jiān)測系統(tǒng)的使用最終是要面對用戶的,因此監(jiān)測軟件的開發(fā)將決定系統(tǒng)能否方便高效運行。考慮到以后與Internet網(wǎng)絡連接,用戶可以在任何一臺與Internet網(wǎng)絡連接的PC機上查詢數(shù)據(jù),整個平臺采用BS模式開發(fā)。監(jiān)測中心軟件設計包括用戶登錄管理、系統(tǒng)自檢、數(shù)據(jù)讀取顯示、歷史數(shù)據(jù)分析與查詢等模塊。4.詳細的流程圖4.1設備安裝(1)在windows環(huán)境下安裝虛擬機vmware,如下圖:首先下載Fedora10鏡像文件,開啟虛擬機,并開始創(chuàng)建一個新的虛擬機,選擇標準即可,如下圖: 選擇Li

16、nux,下面我們選擇other linux 網(wǎng)絡類型,選擇use-bridged networking 設置虛擬文件的最大大?。ńㄗh不要勾選Allocate all disk space now) 安裝完成后,如下圖: (2)在vmware下安裝Fedora10:用虛擬機裝載fedora10的鏡像文件 cd-rom->sue iso image->選擇你的Fedora鏡像文件路徑(3)Windows 7系統(tǒng)安裝HyperTerminal,即將HyperTerminal文件夾下的HyperTer

17、minal_English_ANSI 里的hticons.dll和hypertrm.dll拷貝至C:/Windows/System32下(4)安裝交叉編譯器:將examples-newwsn-6410.tar.gz文件拷貝至/opt目錄下在Windows系統(tǒng)創(chuàng)建D:/share文件夾 如上所示選擇【設置】。 左上方選擇【選項】,選擇【共享文件夾】,在右上方選擇【總是啟用】,初次設置時沒有共享文件夾,此時選擇【添加】選擇剛才在Windows系統(tǒng)下創(chuàng)建的D:/share文件夾,之后點擊【下一步】完成共享文件夾的創(chuàng)建。 4.2配置IP和開啟服務 (1) 首先查看網(wǎng)絡接口是eth0還是eth1:/sb

18、in/ifconfig (2)用ifconfig eth0 2 netmask 配置成指定IP。 (3)重啟portmap服務 重啟nfs服務 關閉iptables服務 4.3創(chuàng)建tftpboot文件夾cd /mkdir tftpbootchmod 777 /tftpboot4.4啟動超級終端(1)使用usb轉串口線(或普通RS232線)將6410實驗箱和PC機相連。打開HyperTerminal軟件,選擇正確的串口,具體設置如下: 設置完成后,點擊確認。正確連接至6410實驗箱后,多次回車,會出現(xiàn)如下結果: (2)掛載: 將tftpboot文件

19、夾中文件至嵌入式Linux的mnt文件夾中。 輸入如下命令: mount 2:/tftpboot /mnt -o nolock (正確掛載后,系統(tǒng)不會顯示任何結果) 掛載成功后,輸入cd /mnt 查看掛載結果。 4.5拷貝文件將my6410文件拷貝至/opt目錄下設置共享文件夾在Windows系統(tǒng)創(chuàng)建D:/share文件夾 如上所示選擇【設置】。 左上方選擇【選項】,選擇【共享文件夾】,在右上方選擇【總是啟用】,初次設置時沒有共享文件夾,此時選擇【添加】 選擇剛才在Windows系統(tǒng)下創(chuàng)建的D:/share文件夾,之后點擊【下一步】完成共享文件夾的創(chuàng)建。將my6410文

20、件復制到Windows系統(tǒng)中D:/share文件夾中。4.6編譯源程序1.進入Fedora10系統(tǒng),在終端下輸入如下命令(root權限下):cp /mnt/hgfs/share/my6410 /opt/ls進入sendData文件夾:cd sendDatamake cleanmake此時可執(zhí)行文件已自動拷貝至/tftpboot文件下。2.掛載tftpboot至6410實驗箱中的/mnt下。(參考4.4(2)掛載)掛載成功后,進入/mnt目錄,在超級終端下輸入如下內容:cd /mntls會顯示剛才生成的sendData的可執(zhí)行文件,輸入如下命令:./sendData.arm

21、 5678。在超級終端下打印出信息。4.7通信程序運行打開eclipse編譯環(huán)境,輸入寫好的socket通信程序,運行4.8打開數(shù)據(jù)庫接收數(shù)據(jù)打開數(shù)據(jù)庫,新建一個數(shù)據(jù)庫表格,用于存放從串口收到的數(shù)據(jù) 點擊小應用程序中的按鈕,每點擊一次,數(shù)據(jù)就接收發(fā)送一次 5.軟件的測試方法和測試結果 1.在超級終端將掛載tftpboot文件夾中文件至嵌入式Linux的mnt文件打開mnt,找到sendData.arm, 輸入命令./sendData.arm 5678 2.打開eclipse編譯環(huán)境,運行receive程序,出現(xiàn)如下結果:3.點擊小應用程序中的按鈕,數(shù)據(jù)寫入同時發(fā)送,結果如

22、圖4.再次點擊:5.打開數(shù)據(jù)庫,delete數(shù)據(jù)庫記錄,重新讀取數(shù)據(jù)6.實驗體會通過這次課程設計的整個實驗過程,將所學的知識得到了靈活的運用,在實踐的基礎上更加完整的去理解整個系統(tǒng)的工作流程,通過與同學的合作和老師的交流也讓自己在整個實驗過程中認識到團體的重要性,在實驗過程中遇到過很多關于實驗箱,實驗環(huán)境的配置,實驗程序的調試問題,通過與同學之間的交流一步步去解決,最后順利的完成了實驗。7附件: sendData 代碼SendData.c/* sendData.c - a datagram "client" demo*/#include <stdio.h>#in

23、clude <stdlib.h>#include <string.h>#include <time.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/time.h>#include <signal.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include <ctype.h>#include <unistd.h>

24、#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <stddef.h>#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_buf20;int

25、 count=0;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;static

26、 int fd = -1;unsigned char seg7table16 = /* 0 1 2 3 4 5 6 7*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, /* 8 9 A B C D E F*/ 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,;/-void set_speed(int fd,int speed)int i;int status;struct termios Opt;tcgetattr(fd, &Opt);/tcsetattr函數(shù)用于設置終端的相關參數(shù)。參數(shù)f

27、d為打開的終端文件描述符,參數(shù)optional_actions用于控制修改起作用的時間,而結構體termios_p中保存了要修改的參數(shù)。for( i = 0; i < sizeof(speed_arr)/sizeof(int); i+)if(speed = name_arri)tcflush(fd, TCIOFLUSH);/清空終端未完成的輸入/輸出請求及數(shù)據(jù).TCOFLUSH:清除正寫入的數(shù)據(jù),且不會發(fā)送至終端。cfsetispeed(&Opt, speed_arri);cfsetospeed(&Opt, speed_arri);status = tcsetattr(f

28、d, TCSANOW, &Opt);if(status != 0)perror("tcsetattr fd1");/perror( ) 用來將上一個函數(shù)發(fā)生錯誤的原因輸出到標準設備return;tcflush(fd, TCIOFLUSH);int set_Parity(int fd,int databits,int stopbits,int parity)struct termios options;if(tcgetattr(fd, &options) != 0)perror("SetupSerial 1");return(FALSE);

29、options.c_cflag &=CSIZE;switch(databits)case 7:options.c_cflag |= CS7;break;case 8:options.c_cflag |= CS8;break;default:fprintf(stderr,"Unsupported data sizen");return(FALSE);switch(parity)case 'n':case 'N':options.c_cflag &= PARENB;options.c_iflag &= INPCK;brea

30、k;case 'o':case 'O':options.c_cflag |= (PARODD | PARENB);options.c_iflag |= INPCK;break;case 'e':case 'E':options.c_cflag |= PARENB;options.c_cflag &= PARODD;options.c_iflag |= INPCK;break;case 'S':case 's':options.c_cflag &= PARENB;options.c_c

31、flag &= CSTOPB;break;default:fprintf(stderr, "Unsupported parityn");return(FALSE);switch(stopbits)case 1:options.c_cflag &= CSTOPB;break;case 2:options.c_cflag |= CSTOPB;break;default:fprintf(stderr,"Unsupported stop bitsn");return(FALSE);if(parity != 'n'&&

32、; parity != 'N')options.c_iflag |= INPCK;options.c_cflag &= CRTSCTS;options.c_iflag &= IXOFF;options.c_iflag &= IXON;if(parity != 'n'&& parity != 'N') options.c_iflag |= INPCK;tcflush(fd, TCIOFLUSH);options.c_lflag &= (ICANON|ECHO|ECHOE|ISIG);options.c

33、_oflag &= OPOST;options.c_iflag &= (ICRNL|IGNCR); options.c_ccVTIME = 0; options.c_ccVMIN = 0;tcflush(fd, TCIFLUSH); fcntl(fd, F_SETFL, 0);if(tcsetattr(fd, TCSANOW, &options) != 0)perror("SetupSerial 3");return(FALSE);return(TRUE);int OpenDev(char *Dev)int fd = open(Dev, O_RDWR

34、);if(-1 = fd)perror("Can't Open Serial Port");return -1;elsereturn fd;int serial_init(void)char *Dev = "/dev/s3c2410_serial1"serial_fd = OpenDev(Dev);if(serial_fd > 0)set_speed(serial_fd,115200);elseprintf("Can't Open Serial Port!n");exit(0);if(set_Parity(ser

35、ial_fd,8,1,'N') = FALSE)printf("Set parity Errorn");exit(1);return 0;int main(int argc, char *argv)/define send socket int sockfd; struct sockaddr_in their_addr; / connector's address information struct hostent *he;/define receive socket int sockfd_r; struct sockaddr_in my_addr

36、_r; / my address information struct sockaddr_in their_addr_r; / connector's address information serial_init(); /* parameters check */ if (argc != 3) fprintf(stderr,"usage: talker hostname portn"); exit(1); fd=open("/dev/seg",O_RDWR);if(fd<0)printf("Can't openn&quo

37、t;);return -1;elseprintf("open OK %xn", fd); /* 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)

38、 perror("socket"); exit(1); 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 /* setup soc

39、ket */ if (sockfd_r= socket(AF_INET, SOCK_DGRAM, 0) = -1) perror("socket"); exit(1); my_addr_r.sin_family = AF_INET; / host byte order my_addr_r.sin_port = htons(4950); / short, network byte order my_addr_r.sin_addr.s_addr = INADDR_ANY; / automatically fill with my IP memset(&(my_addr_

40、r.sin_zero), '0', 8); / zero the rest of the struct /* bind */ if (bind(sockfd_r, (struct sockaddr *)&my_addr_r,sizeof(struct sockaddr) = -1) perror("bind"); exit(1); char buff1024; char recbuff100; int numbytes; while(1) while(1) nread = read(serial_fd,buff,1024);if(nread >

41、0)char send_buf8; int addr_len_r=sizeof(struct sockaddr); if (numbytes=recvfrom(sockfd_r, recbuff, 99, 0, (struct sockaddr *)&their_addr_r, &addr_len_r) = -1) perror("recvfrom"); exit(1); else ioctl(fd, 0, seg7tablecount); count+; if(count>10) count=0; recbuffnumbytes = '0&#

42、39; printf("n%s says:%s",inet_ntoa(their_addr_r.sin_addr), recbuff);int i;for(i=0;i<8;i+)send_bufi = buffi;int numbytes;if (numbytes=sendto(sockfd, send_buf, strlen(send_buf), 0,(struct sockaddr *)&their_addr, sizeof(struct sockaddr) = -1) /printf("failed"); close(sockfd);

43、 return 0;recieve 代碼import java.applet.Applet;import java.awt.BorderLayout;import java.awt.Button;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.ByteArrayInputStream;import java.io.DataInputStream;import .Dat

44、agramPacket;import .DatagramSocket;import .InetAddress;import .InetSocketAddress;import .SocketAddress;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.*;public class Recieve extends Applet implements ActionListener TextFie

45、ld temData; TextField moiData; TextField lightData; TextField oxyData; Button refresh; Button wrToDb;private static bytebuf;private static ByteArrayInputStream bais;private static DataInputStream dis;private static Connection dbConn;private static Statement sta;private static ResultSet re;private st

46、atic int temperature;private static int moisture;private static int light;private static int oxygen;private static SocketAddress sd; public void init() temData=new TextField(20);moiData=new TextField(20);lightData=new TextField(20);oxyData=new TextField(20);wrToDb=new Button("采集數(shù)據(jù)并寫入數(shù)據(jù)庫并發(fā)送數(shù)據(jù)控制數(shù)碼管");add(temData);add(moiData);add(lightData);add(oxyData);add(wrToDb);wrToDb.addActionListener(this);String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver" String dbURL="jdbc:sqlserver:/localhost:1433;DatabaseName=keshe&

溫馨提示

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

評論

0/150

提交評論