光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)_第1頁
光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)_第2頁
光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)_第3頁
光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)_第4頁
光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

光照信息采集系統(tǒng)設(shè)計(jì)與開發(fā)摘要:研究在光照的環(huán)境下,用CC2530模塊對光照強(qiáng)度信息進(jìn)行采集,光照信息采集是我們?nèi)粘I钪斜夭豢缮俚囊豁?xiàng)工程,它涉及到了我們生活中的方方面面,在農(nóng)業(yè),工業(yè),醫(yī)療等方面都起到了很大的作用,幫助了人們處理了一些需要利用到光方面的各種難題,可以很方便,快速,實(shí)時(shí)的獲得光照強(qiáng)度信息,人們利用這樣的信息可以準(zhǔn)確的做出判斷,例如能夠讓農(nóng)產(chǎn)品再最適的光照強(qiáng)度里成長。本次系統(tǒng)使用了C語言進(jìn)行語言開發(fā)環(huán)境,利用ZigBee協(xié)議棧,設(shè)計(jì)一套光照信息采集系統(tǒng)。該系統(tǒng)用到的軟件為IAR,能夠?qū)Υa進(jìn)行編程和調(diào)試操作,將代碼下載到CC2530模塊。系統(tǒng)管理員能夠在上位機(jī)獲取到光照信息強(qiáng)度的信息,同時(shí)也可以對代碼功能進(jìn)行適當(dāng)?shù)脑黾?,以滿足使用需求。關(guān)鍵詞:光照信息采集;C語言;IAR;CC2530DesignanddevelopmentoflightinformationacquisitionsystemAbstract:inthelightenvironment,CC2530moduleisusedtocollectthelightintensityinformation.Thelightinformationcollectionisanessentialprojectinourdailylife.Itinvolvesallaspectsofourlife,playsagreatroleinagriculture,industry,medicaltreatmentandotheraspects,andhelpspeopledealwithsomeproblemsthatneedtousethelightItisveryconvenient,fastandreal-timetoobtainthelightintensityinformation.Peoplecanmakeaccuratejudgmentsbyusingthisinformation,forexample,itcanmakeagriculturalproductsgrowinthemostappropriatelightintensity.ThissystemusesClanguageforlanguagedevelopmentenvironment,usingZigBeeprotocolstack,designasetoflightinginformationcollectionsystem.ThesoftwareusedinthesystemisIAR,whichcanprogramanddebugthecodeanddownloadthecodetoCC2530module.Thesystemadministratorcangettheinformationofilluminationinformationintensityontheuppercomputer,andcanalsoincreasethecodefunctiontomeettheuserequirements.Keywords:lightinformationcollection;Clanguage;IAR;CC2530緒論科技發(fā)展迅速,生活質(zhì)量的不斷提高,越來越多的人意識到光照對于人體、植物、對于生活中方方面面的影響和作用。光照強(qiáng)度就是對光照的一個(gè)更深入的探索,我們會對光照強(qiáng)度進(jìn)行監(jiān)測,例如生產(chǎn)車間,農(nóng)業(yè)種植,機(jī)房照明,樓宇自控,交通燈等。在這些場合,我們都會利用光傳感器對光照進(jìn)行監(jiān)測。人們可以利用這樣的一個(gè)設(shè)計(jì),不需要到實(shí)地監(jiān)測,在上位機(jī)就能夠獲取光照的信息,在許多人們監(jiān)測不到的地方,通過這樣的一種技術(shù),能夠保障人們的安全??萍及l(fā)展迅速,這是在我們生活中很有必要的,相信越來越多的地方,會使用這樣的技術(shù)完成對光照強(qiáng)度的采集。人們將獲取到了的光照信息,就可以利用光照信息來做應(yīng)該處于這樣的光照環(huán)境的一些實(shí)踐。1.1光照采集的背景和意義光照強(qiáng)度不再僅僅是光照太亮以及光照太暗等等一系列的代名詞,而是擁有更深層次的含義,尤其是在科學(xué)研究領(lǐng)。我們會對光照的強(qiáng)暗進(jìn)行精確的判斷。此次實(shí)驗(yàn)是基于ZigBee無線通信技術(shù)進(jìn)行的,通過讓發(fā)送模塊對光照信息進(jìn)行采集,將信息傳輸給接收模塊,接收模塊將通過串口的方式把所收集到的信息傳給上位機(jī)。ZigBee的優(yōu)點(diǎn)是穩(wěn)定,便捷。在開發(fā)過程中會用到ZigBee技術(shù),需要對協(xié)調(diào)器,終端設(shè)備進(jìn)行編程,這不僅會使用到我們學(xué)習(xí)到的C語言知識,還要更加的了解各個(gè)模塊之間的通信特點(diǎn)。本系統(tǒng)的開發(fā)會涉及到物理層,網(wǎng)絡(luò)層,應(yīng)用層相關(guān)的知識,每隔一段時(shí)間就會采集光照強(qiáng)度信息,提高效率,更好的能為用戶服務(wù)。此次實(shí)驗(yàn)是一個(gè)典型的單播通信傳輸?shù)膶?shí)驗(yàn),通信方式簡單,技術(shù)便捷,利用ZigBee網(wǎng)絡(luò)以及準(zhǔn)備好的光照傳感器和CC2530芯片,不用通過連線的方式就能實(shí)現(xiàn)監(jiān)測。配置發(fā)送模塊監(jiān)測光照強(qiáng)度,光傳感器將采集到的數(shù)據(jù)傳送給發(fā)送模塊,發(fā)送模塊在已經(jīng)構(gòu)建好的ZigBee網(wǎng)絡(luò)的基礎(chǔ)上,再將獲得到的信息傳遞給接收模塊,最后通過串口將數(shù)據(jù)傳到上位機(jī),實(shí)現(xiàn)在遠(yuǎn)端就能夠獲取光照強(qiáng)度信息。采用ZigBee這樣的一個(gè)無線通信技術(shù),光傳感器如果較多的話,數(shù)據(jù)線在連接串口時(shí)才會用到,這樣布置簡單,不會占用較多的資源,并且會節(jié)省材料,有益于降低成本。2系統(tǒng)開發(fā)環(huán)境2.1C語言概述這里開發(fā)編程所使用到的語言為C語言,C語言有著它獨(dú)自強(qiáng)大的兼容優(yōu)點(diǎn)以及使用范圍廣的特點(diǎn)。編譯方式簡單,操作容易,不需要特別復(fù)雜的運(yùn)算,就能對寫好的代碼進(jìn)行運(yùn)作。它的工作效率高,編譯速度快,在代碼的修改和調(diào)試方面更能讓編程者或閱讀者操作和了解。它包含的功能強(qiáng)大,所擁有的數(shù)據(jù)類型多,可選擇的運(yùn)算符廣泛,能夠?qū)Φ刂愤M(jìn)行直接操作。因?yàn)樗嫦蜻^程和抽象化的特點(diǎn),更加的注重于函數(shù)的使用,所以廣泛用于底層開發(fā)。2.2IAR介紹IARSystems是全球領(lǐng)先的嵌入式系統(tǒng)開發(fā)工具和服務(wù)的供應(yīng)商。公司成立于1983年,總部位于瑞典的烏普薩拉。在中國也設(shè)有分公司或代理商。這個(gè)軟件能夠?qū)Υa編譯,能夠?qū)⒋a下載到模塊芯片,也可以輸出hex文件。2.3ZigBee技術(shù)概述我們常說的ZigBee,它就是所謂的IEEE802.15.4標(biāo)準(zhǔn)下的一個(gè)通訊應(yīng)用。ZigBee技術(shù)是雙向的能夠在距離較短的范圍內(nèi)進(jìn)行通訊的無線技術(shù),傳感器的應(yīng)用也是在ZigBee基礎(chǔ)上逐漸發(fā)展的,應(yīng)用的領(lǐng)域范圍十分廣泛,也是一種在IEEE802.15.4基礎(chǔ)標(biāo)準(zhǔn)上,在組網(wǎng)方面、信息安全領(lǐng)域和軟件應(yīng)用的無線傳輸技術(shù)。ZigBee的協(xié)議規(guī)范是由ZigBee聯(lián)盟制定的。在2005年的時(shí)候,第一份ZigBee協(xié)議規(guī)范被公布出來,名稱為ZigBeeSpecificationV1.0。ZigBee協(xié)議規(guī)范涉及到了IEEE802.15.4中的物理層(PHY)和媒體介質(zhì)訪問層(MAC),并在此基礎(chǔ)上定義了網(wǎng)絡(luò)層(NWK)和應(yīng)用層(APL)。2.3.1ZigBee技術(shù)優(yōu)缺點(diǎn)ZigBee采用的是IEEE802.15.4的協(xié)議,信息的傳輸速度不快。ZigBee網(wǎng)絡(luò)層次分明,消耗的能源低,運(yùn)算開銷少,延遲低,具有靈活的吞吐量等優(yōu)點(diǎn)。硬件和軟件方面組裝簡捷,數(shù)據(jù)傳輸非常安全、可容納多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)、并且組建組網(wǎng)的能力強(qiáng)大。不過也有相應(yīng)的缺點(diǎn),缺點(diǎn)是硬件成本高,通信穩(wěn)定較弱。因?yàn)榇┩改芰θ?,在處于有眾多墻壁的環(huán)境下,信號會有接收不到或者信號弱的可能,所以在接收信號時(shí)會有這方面的缺點(diǎn)。LR-WPAN中,在這樣的網(wǎng)絡(luò)環(huán)境條件下有三種不同的傳輸速率,分別為250kb/s,40kb/s,20kb/s。它還在點(diǎn)對點(diǎn)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),星型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)這兩種結(jié)構(gòu)在這個(gè)網(wǎng)絡(luò)中是可以使用的。協(xié)議棧中有兩個(gè)字節(jié)的短地址或者八個(gè)字節(jié)擴(kuò)展地址。短地址是網(wǎng)絡(luò)地址,設(shè)置網(wǎng)絡(luò)地址需要分開設(shè)置。一半的網(wǎng)絡(luò)地址由一個(gè)字節(jié)控制。8個(gè)字節(jié)的擴(kuò)展地址是MAC地址,屬于物理地址。物理地址是硬件生產(chǎn)出來的時(shí)候就有的。ZigBee的消息通道一共擁有27個(gè),這27個(gè)信道是根據(jù)頻段來劃分,有三種頻段。每一個(gè)頻段里面的信道個(gè)數(shù)是不同的,在2.4GHz這個(gè)頻段內(nèi)含有16個(gè)信道;在915MHz頻段內(nèi)有10個(gè)信道;在868MHz頻段內(nèi)有1個(gè)信道。Ti所有支持ZigBee基層協(xié)議的芯片都是在2.4GHz頻段下進(jìn)行通信。接收和發(fā)送消息的設(shè)備必須處于在同一個(gè)信道中才可以進(jìn)行互相通信。2.3.2ZigBee網(wǎng)絡(luò)配置ZigBee的設(shè)備分為兩種。一種名為全功能設(shè)備,可以充當(dāng)路由功能,傳遞信息,全功能設(shè)備的存儲需要大量的內(nèi)存空間。路由信息的存放是放在內(nèi)存空間中的,可以了解到它解決問題的能力很強(qiáng)大。另一種名為精簡功能設(shè)備,它只能接收信號和發(fā)送信號,具有較小的內(nèi)存,在ZigBee網(wǎng)絡(luò)中作為終端。2.3.3ZigBee工作模式ZigBee工作模式有信標(biāo)模式和非信標(biāo)模式。信標(biāo)模式消耗的能源少,因?yàn)橛布O(shè)備都是統(tǒng)一工作和休息,避免了多余的開銷;當(dāng)處于非信標(biāo)模式下,協(xié)調(diào)器和路由器會不斷工作,沒有休息的時(shí)間,而終端會處于在休息狀態(tài),但會每隔相同時(shí)間醒來,為了確認(rèn)自己還在線。 2.4本實(shí)驗(yàn)ZStack協(xié)議棧工作原理本實(shí)驗(yàn)會使用到ZStack協(xié)議棧相關(guān)的代碼,以下是對光照采集過程的概述。我們將光照采集模塊作為終端,用于采集光照強(qiáng)度信息,同時(shí)會使用到光照傳感器。對于終端而言,需要對其網(wǎng)絡(luò)進(jìn)行一個(gè)初始化的過程,通過設(shè)置PANID,這里的PANID是指,該終端需要加入到一個(gè)這樣的網(wǎng)絡(luò)當(dāng)中,本次實(shí)驗(yàn)屬于單播,所以是需要加入到一個(gè)指定的網(wǎng)絡(luò)。終端在網(wǎng)絡(luò)層,需要對網(wǎng)絡(luò)地址進(jìn)行一個(gè)設(shè)置,網(wǎng)絡(luò)地址由兩個(gè)字節(jié)構(gòu)成。當(dāng)連接上電源時(shí),終端就會發(fā)出信標(biāo)請求幀,發(fā)現(xiàn)周圍是否有網(wǎng)絡(luò)能夠加入,假如有一個(gè)PANID與已經(jīng)設(shè)置好的PANID相同時(shí),說明光照采集模塊已經(jīng)加入到該網(wǎng)絡(luò)當(dāng)中。對于協(xié)調(diào)器而言,當(dāng)協(xié)調(diào)器連接到電源時(shí)的初始化操作就是創(chuàng)建一個(gè)確定好的PANID網(wǎng)絡(luò),并且該協(xié)調(diào)器的網(wǎng)絡(luò)層地址只能為0x0000。入網(wǎng)時(shí),協(xié)調(diào)器模塊會發(fā)出網(wǎng)絡(luò)連接狀態(tài)幀,表明協(xié)調(diào)器已經(jīng)穩(wěn)定工作。協(xié)調(diào)器和終端入網(wǎng)操作結(jié)束后,就是光照采集的一個(gè)循環(huán)往復(fù)的過程,涉及到用戶任務(wù),事件以及輪詢過程。對于終端,系統(tǒng)會分配給該模塊一個(gè)taskid,一個(gè)taskid里有任務(wù)處理事件,在本實(shí)驗(yàn)使用到的任務(wù)處理時(shí)間就是光照的采集,應(yīng)用層里有任務(wù)事件的變量,在ZigBee協(xié)議中,很多的功能代碼都在里面。編程者只需要根據(jù)框架結(jié)構(gòu)來梳理自己所需要的代碼即可。ZigBee的框架圖就包含了許多重要的信息,根據(jù)ZigBee的框架圖,就可以將任務(wù)和應(yīng)用互相對應(yīng)起來。任務(wù)數(shù)目的增加就會導(dǎo)致任務(wù)開銷的不均勻。這樣一來就引入了OSAL。OSAL就解決了分配不均勻的問題,剛開始,OSAL會把系統(tǒng)中的參數(shù)設(shè)置成默認(rèn)值,例如軟件中的變量等,也會在硬件方面將內(nèi)存信息、中斷、NV等所包含的信息設(shè)定為默認(rèn)值,經(jīng)過對照了解到,這個(gè)原理和嵌入式系統(tǒng)中的RTOS操作系統(tǒng)μC/OS-II幾乎一樣。μC/OS-II的原理就是通過創(chuàng)建任務(wù)來剖析矛盾,利用消息隊(duì)列來實(shí)現(xiàn)任務(wù)的信息傳輸。OSAL利用osal_add_task函數(shù)將正在進(jìn)行的任務(wù)增添到表中,這個(gè)表就是任務(wù)鏈表。任務(wù)鏈表的順序根據(jù)任務(wù)的先后順序排序,優(yōu)先級高的在前,低的在后。當(dāng)一切準(zhǔn)備工作都準(zhǔn)備好后,就可以啟動程序,系統(tǒng)一直在死循環(huán)中運(yùn)行.在循環(huán)方法體當(dāng)中不斷地檢測各個(gè)任務(wù)是否要運(yùn)行等,所以這樣光傳感器模塊就能夠不斷的執(zhí)行采集光照強(qiáng)度信息這個(gè)任務(wù),對于協(xié)調(diào)器而言同樣如此,協(xié)調(diào)器的任務(wù)處理事件當(dāng)中,不斷的將接收到的光照傳感器采集到的數(shù)據(jù)通過串口傳輸給上位機(jī)。3材料與方法3.1材料的選擇市面上用于ZigBee編程模塊有多種,不過本次實(shí)驗(yàn)采用的是以CC2530作為模塊,將數(shù)據(jù)代碼下載到其中。考慮到的原因主要是使用的模塊必須要有穩(wěn)定、抗干擾能力強(qiáng),方便小巧的特點(diǎn)。同時(shí)耗費(fèi)不能過大,不管是在能源方面還是在購買方面,都應(yīng)該實(shí)際一點(diǎn)。CC2530這種芯片給IEEE802.15.4協(xié)議的ZigBee和RF4CE搭起了一個(gè)信息互通的交流平臺。它利用了最少的資源將各處的網(wǎng)絡(luò)節(jié)點(diǎn)銜接在一起。RF收發(fā)器擁有的功能,CC2530同樣具備,并且CC2530的功能更加龐大,CC2530的芯片內(nèi)部含有8051CPU。四個(gè)不同的存儲空間位于8051CPU的內(nèi)部,并且8051CPU還另外擁有一個(gè)獨(dú)立的存儲空間,是為了讓數(shù)據(jù)和程序進(jìn)行保存。有四個(gè)存儲空間,CODE,DATA,XDATA,SFR。它們在8051CPU里面互相分開,各自擁有自己的位置。不過在設(shè)備中有的地方也有重疊,這是為了讓DMA數(shù)據(jù)傳輸和硬件調(diào)試操作所帶來的負(fù)擔(dān)降低。正因?yàn)镃C2530帶有這樣的四種不同的緩存,使得它可以在不同的模式中工作。較低功耗的系統(tǒng)更加適合讓CC2530作為芯片。由于CC2530芯片低功耗的優(yōu)點(diǎn),采用CC2530來作為核心模塊是一個(gè)不錯(cuò)的選擇。本次實(shí)驗(yàn)采用的是光敏電阻5539監(jiān)測光照強(qiáng)度。光敏電阻的構(gòu)成材料是半導(dǎo)體,電阻在不同條件下阻值是不一樣的,阻值大小是伴隨著光照強(qiáng)度的強(qiáng)弱大小來決定的。我們就可以利用這樣的一個(gè)特點(diǎn),制成受光面積不同的電阻,這樣變化的大小就能夠控制光照強(qiáng)度隨著電阻變化而變化的范圍幅度。而光敏電阻中的其中一種就是光敏5539,它的阻值隨著光照強(qiáng)度的增強(qiáng)電阻越來越大。上位機(jī)可采用Windows系統(tǒng)的電腦,它能兼容IAR軟件,串口,以及幀的抓包軟件等。補(bǔ)充說明一下,CC2530核心模塊工作電壓需要在2V-3.6V的電源下,以及需要在2.4Ghz的頻段才能夠通信,使用到的編寫語言為C語言。還需要獨(dú)立的光傳感器電源,為了保證能夠正常的通信,無限傳輸距離應(yīng)控制在80米以內(nèi)。3.2模塊間數(shù)據(jù)傳輸方式一般來講,數(shù)據(jù)傳輸方式可分為有線和無線,方式的選擇是根據(jù)實(shí)際情況進(jìn)行選擇的。有線傳輸是有線的,信息的發(fā)送和接收操作簡捷、耗時(shí)少,由于此次實(shí)驗(yàn)的前提是無線數(shù)據(jù)傳輸,所以就放棄了有線傳輸。ZigBee是一種通訊技術(shù),它能夠支撐起傳感器等電子元器件之間的無線連接通信。不管是幾十個(gè)微小模塊或者幾百個(gè)又或者上千個(gè),它能夠讓這些ZigBee模塊相互協(xié)調(diào)實(shí)現(xiàn)通信。不僅耗能低是這些ZigBee模塊的優(yōu)勢,更重要的是這些模塊通過信號將數(shù)據(jù)從一個(gè)ZigBee模塊傳到另一個(gè)ZigBee模塊產(chǎn)生的效果就像連鎖反應(yīng),所以在傳輸距離稍微遠(yuǎn)的時(shí)候地方也能夠互相通信,只需要使用多個(gè)ZigBee模塊即可。通信效率高是ZigBee技術(shù)的優(yōu)點(diǎn),這樣的優(yōu)點(diǎn)剛好適用于本次實(shí)驗(yàn)需要滿足的光照傳感器無線傳輸光照數(shù)據(jù)的要求。3.3功能概述本實(shí)驗(yàn)需要實(shí)現(xiàn)的功能就是在遠(yuǎn)程的CC2530模塊上采集光照強(qiáng)度的信息,將采集到的數(shù)據(jù)通過Zigbee網(wǎng)絡(luò),把數(shù)據(jù)傳輸給協(xié)調(diào)器,再通過協(xié)調(diào)器傳給上位機(jī)。對于CC2530模塊而言,每一個(gè)模塊里代碼功能的不同就有了協(xié)調(diào)器和終端的說法。終端是通過分配一個(gè)taskid,這個(gè)taskid里有任務(wù)處理的函數(shù)。通過輪詢機(jī)制,會不斷執(zhí)行任務(wù)處理函數(shù)。同時(shí),在任務(wù)處理函數(shù)里就有一個(gè)叫CollectLight的函數(shù)需要執(zhí)行。具體代碼如下:voidCollectLight(void){uint16adval;//AD采集值uint8len,buf[5];adval=HalAdcRead(HAL_ADC_CHN_AIN6,HAL_ADC_RESOLUTION_10);//讀AD值len=uitoa(buf,adval);//AD值轉(zhuǎn)換成ASCII并存入數(shù)組buf中//發(fā)送buf中的數(shù)據(jù),數(shù)據(jù)長度為lenAF_DataRequest(&SampleApp_DstAddr,&SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,len,(uint8*)buf,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}這是一個(gè)光照采集的函數(shù),定義了一個(gè)名字為adval的無符號整型,將光照信息通過數(shù)模轉(zhuǎn)換的方式,轉(zhuǎn)換為ASCII保存在了數(shù)組buf中,同時(shí)把數(shù)據(jù)傳給指定的目的地址,以及端口地址和簇地址。這樣一來就把采集到的數(shù)據(jù)傳輸給了協(xié)調(diào)器。對于協(xié)調(diào)器而言,它是通過串口的形式,把數(shù)據(jù)傳輸給了上位機(jī)。協(xié)調(diào)器同樣有一個(gè)taskid,它的任務(wù)就是不斷的接收數(shù)據(jù)具體代碼如下:voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){uint8*buf;switch(pkt->clusterId){caseSAMPLEAPP_PERIODIC_CLUSTERID:buf=pkt->cmd.Data;HalUARTWrite(0,"\r\n節(jié)點(diǎn)上的光照度:",osal_strlen("節(jié)點(diǎn)上的光照度:")+2);HalUARTWrite(0,buf,pkt->cmd.DataLength);HalUARTWrite(0,"\r\n",2);break;}}這是一個(gè)接收消息的一個(gè)函數(shù),其中HalUARTWrite這個(gè)函數(shù)就是串口顯示的函數(shù),同樣也是通過輪詢機(jī)制,不斷的處理任務(wù)事件,任務(wù)事件下包含了這個(gè)接收消息的函數(shù),這樣就能夠在接收消息的同時(shí)將數(shù)據(jù)信息通過串口的方式在上位機(jī)上顯示。本次實(shí)驗(yàn)終端使用到的協(xié)調(diào)器模塊上的光照傳感器的介紹如下:光敏電阻5539的亮電阻阻值為50至100Luxk歐姆,光照強(qiáng)度較弱的環(huán)境下暗電阻阻值為5M歐姆,光譜峰值的數(shù)據(jù)能夠達(dá)到540nm,能夠工作的最大電壓150vdc,最大功耗為100mw,工作的環(huán)境溫度為-30至+70,光照強(qiáng)度信息上升時(shí)響應(yīng)時(shí)間為20,光照強(qiáng)度信息下降時(shí)響應(yīng)時(shí)間為30,照度電阻特性為5。3.4ZigBee網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)ZigBee網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)有三種,分別是星狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),樹(簇)狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和網(wǎng)狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。如下圖所示:星狀星狀網(wǎng)狀網(wǎng)狀精簡功能設(shè)備精簡功能設(shè)備全功能設(shè)備全功能設(shè)備協(xié)調(diào)器協(xié)調(diào)器簇狀簇狀星狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)由一個(gè)協(xié)調(diào)器和多個(gè)終端組成,在這樣的結(jié)構(gòu)中,協(xié)調(diào)器直接和終端進(jìn)行信息的傳輸,終端之間消息的發(fā)送需要經(jīng)過協(xié)調(diào)器。樹狀網(wǎng)絡(luò)由一個(gè)協(xié)調(diào)器和多個(gè)路由和終端組成,在這樣的結(jié)構(gòu)中,這些設(shè)備只與自己的父節(jié)點(diǎn)或子節(jié)點(diǎn)通訊。網(wǎng)狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)也是由一個(gè)協(xié)調(diào)器和多個(gè)路由和終端組成,但是網(wǎng)狀網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)通訊規(guī)則更加方便簡捷。終端(發(fā)送模塊)協(xié)調(diào)器(接收模塊)本實(shí)驗(yàn)?zāi)K模型終端(發(fā)送模塊)協(xié)調(diào)器(接收模塊)光照上位機(jī)光照上位機(jī)4代碼和硬件分析4.1ZigBee節(jié)點(diǎn)硬件設(shè)計(jì)采用一個(gè)光傳感器連接一個(gè)CC2530核心模塊同時(shí)配置單獨(dú)的獨(dú)立電源,實(shí)現(xiàn)多點(diǎn)監(jiān)測,通過ZigBee網(wǎng)絡(luò)在不同節(jié)點(diǎn)的位置進(jìn)行數(shù)據(jù)傳遞,實(shí)現(xiàn)數(shù)據(jù)的流通,同時(shí)配置接收模塊,將收集到的信息傳輸給上位機(jī)。其中可使用多個(gè)路由器進(jìn)行無線網(wǎng)絡(luò)數(shù)據(jù)的中間傳輸,同時(shí)構(gòu)建一個(gè)小型的局域網(wǎng),對CC2530芯片進(jìn)行編程。在電腦上打開IAR編程系統(tǒng),因?yàn)橛糜诠庹詹杉膮f(xié)調(diào)器和終端設(shè)備不是本身就有功能,而是在CC2530模塊上通過代碼賦予不同的功能。本實(shí)驗(yàn)采用的是單播的方式進(jìn)行通信,通信方式較為簡單。兩個(gè)模塊之間通過模塊進(jìn)行數(shù)據(jù)傳輸,兩個(gè)模塊需要對端口進(jìn)行配置,也要有簇命令。發(fā)送模塊需要有對事件處理的任務(wù)處理函數(shù),任務(wù)處理函數(shù)會采集光照強(qiáng)度信息,每隔一段時(shí)間就會采集一次。接收模塊需要設(shè)置串口,也有任務(wù)處理函數(shù),每隔一段時(shí)間就會接收來自發(fā)送模塊的信息,將獲得的光照強(qiáng)度信息發(fā)送給上位機(jī)。4.2協(xié)調(diào)器節(jié)點(diǎn)重要代碼(接收模塊)ZStack協(xié)議棧會給協(xié)調(diào)器分配一個(gè)PANID用于無限局域網(wǎng)的啟動,其他設(shè)備想要加入該網(wǎng)絡(luò)的話,它們PANID必須相同才能加入到相同的網(wǎng)絡(luò)當(dāng)中。啟動時(shí),默認(rèn)網(wǎng)絡(luò)ID為0x0000。接收終端節(jié)點(diǎn)發(fā)來的光照信息(5字節(jié)的ASCII碼),然后通過串口發(fā)送至計(jì)算機(jī)中顯示。任務(wù)處理函數(shù)uint16SampleApp_ProcessEvent(uint8task_id,uint16events){afIncomingMSGPacket_t*MSGpkt; //定義指向接收消息的指針(void)task_id; //引參數(shù)task_id;If(events&SYS_EVENT_MSG) //判斷是否為系統(tǒng)事件{MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//從消息隊(duì)列中取消息While(MSGpkt) //有消息?{switch(MSGPKT->hdr.event)//判斷消息中的事件域{ caseAF_INCOMING_MSG_CMD://端口收到消息SampleApp_MessageMSGCB(MSGpkt);//break;default;break;}osal_msg_deallocate((uint8*)MSGpkt); //釋放消息所占存儲空間MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//再從消息隊(duì)列中取消息}return(event^SYS_EVENT_MSG);//返回未處理事件}return0;//丟棄未知事件}這段代碼為任務(wù)處理函數(shù)的核心代碼,具體分析如下:接收模塊有一個(gè)taskid,一個(gè)taskid包含了任務(wù)處理的函數(shù),該段代碼就是接收模塊收集數(shù)據(jù)會執(zhí)行的一段代碼。首先該段代碼就定義了一個(gè)接收消息的指針,然后作了個(gè)if的判斷,event和SYS_EVENT_MSG作了一個(gè)與的操作,就是表示這個(gè)事件與定義的事件是否相同,如果相同就在消息隊(duì)列中取消息。這里有一個(gè)osal_msg_receive的方法,這個(gè)方法完成了接收消息,任務(wù)通過調(diào)用這個(gè)方法來實(shí)現(xiàn)。將接收到的消息賦給MSGpkt,消息發(fā)出后就需要調(diào)用osal_msg_deallocate()這個(gè)方法將消息隊(duì)列中的消息清除。任務(wù)和命令互相對應(yīng),接下來就是一個(gè)while循環(huán),該循環(huán)判斷有消息接收到的話,再進(jìn)行一個(gè)switch判斷,判斷是哪一種事件域。判斷事件域之后,就會執(zhí)行一個(gè)函數(shù)名為SampleApp_MessageMSGCB(MSGpkt)的函數(shù),這個(gè)函數(shù)功能就是光照信息接收,將信息通過串口傳給上位機(jī)。然后釋放消息所占用的存儲空間,繼續(xù)執(zhí)行接收消息隊(duì)列的操作,返回未處理事件,丟棄未知事件。4.3終端節(jié)點(diǎn)重要代碼(發(fā)送模塊)采集環(huán)境的光照數(shù)據(jù)voidSampleApp_Init(uint8task_id){ halUARTCfg_tUartConfig;//定義串口配置變量SampleApp_TaskID=task_id;//應(yīng)用任務(wù)(全局變量)初始化SampleApp_NwkState=DEV_INIT;//網(wǎng)絡(luò)狀態(tài)初始化SampleApp_TransID=0;//傳輸ID號初始化//初始化消息發(fā)送的目的地址SampleApp_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;//單播發(fā)送SampleApp_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;//目的地的端口SampleApp_DstAddr.addr.shortAddr=0x0000;//協(xié)調(diào)器目的地址//應(yīng)用端口初始化SampleApp_epDesc.endPoint=SAMPLEAPP_ENDPOINT;//端口號SampleApp_epDesc.task_id=&SampleApp_TaskID;//任務(wù)號SampleApp_epDesc.simpleDesc//端口的其他描述=(SimpleDescriptionFormat_t*)&SampleApp_SimpleDesc;//SampleApp_epDesc.latencyReq=noLatencyReqs;//端口的延遲響應(yīng)afRegister(&SampleApp_epDesc);//端口注冊//ADC口配置APCFG|=1<<6;//配置模擬口:P06為模擬輸入口HalAdcInit();//初始化ADCHalAdcSetReference(HAL_ADC_REF_AVDD);//設(shè)置ADC的參考電壓}發(fā)送模塊需要發(fā)送數(shù)據(jù)給接收模塊就需要定義端口和任務(wù)ID以及對網(wǎng)絡(luò)狀態(tài)進(jìn)行初始化,SampleApp_DstAddr.addrMode=(afAddrMode_t)Addr16Bit這串代碼的意思是將發(fā)送消息的方式設(shè)置成單播,在數(shù)據(jù)發(fā)送過去后,需要哪一個(gè)端口處理消息就會使用到SampleApp_DstAddr.endPoint=SAMPLEAPP_ENDPOINT這樣的一個(gè)設(shè)定,指定一個(gè)端口,這個(gè)端口就處理消息。此外可以看出目標(biāo)端的網(wǎng)關(guān)短地址為0x0000。SampleApp_epDesc.endPointSampleApp_epDesc.task_id這是一個(gè)結(jié)構(gòu)體,設(shè)置指定端口號,綁定taskid,這里的設(shè)置端口和綁定taskid這兩者的對象都是發(fā)送模塊。還需要對端口進(jìn)行一個(gè)延遲響應(yīng),最后就是對端口就行一個(gè)注冊。注冊完成才能夠使用已經(jīng)配置好的端口,然后就是數(shù)模轉(zhuǎn)換的初始化。任務(wù)事件處理函數(shù)uint16SampleApp_ProcessEvent(uint8task_id,uint16events)//{afIncomingMSGPacket_t*MSGpkt;//定義指向接收消息的指針(void)task_id;//引參數(shù)task_idif(events&SYS_EVENT_MSG)//判斷是否為系統(tǒng)事件{MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//從消息隊(duì)列中取消息while(MSGpkt)//有消息?{switch(MSGpkt->hdr.event)//判斷消息中的事件域{caseZDO_STATE_CHANGE://ZDO的狀態(tài)變化事件SampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);//讀設(shè)備狀態(tài)if((SampleApp_NwkState==DEV_ROUTER)//若為路由器||(SampleApp_NwkState==DEV_END_DEVICE))//或終端節(jié)點(diǎn){osal_set_event(SampleApp_TaskID,USER_LIGHT_GATH_EVT);}break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);//釋放消息所占存儲空間MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);//再從消息隊(duì)列中取消息}return(events^SYS_EVENT_MSG);//返回未處理的事件}//用戶事件處理if(events&USER_LIGHT_GATH_EVT){CollectLight();//采集光照度//再次觸發(fā)用戶事件osal_start_timerEx(SampleApp_TaskID,USER_LIGHT_GATH_EVT,//過1s后再設(shè)置事件1000);return(events^USER_LIGHT_GATH_EVT);//返回未處理完畢的事件}return0;//丟棄未知事件}這段代碼是發(fā)送模塊的任務(wù)處理函數(shù),首先一進(jìn)函數(shù)就定義了一個(gè)接收消息指針,然后使用if進(jìn)行了一個(gè)判斷,判斷這個(gè)事件是否是系統(tǒng)事件,如果判斷結(jié)果為true就把消息從消息隊(duì)列里取出來,當(dāng)確定收到消息之后就進(jìn)入一個(gè)while循環(huán),如果有消息就會進(jìn)入循環(huán)體,switch是用來判斷事件域如果是終端或者路由器的話就執(zhí)行osal_set_event(SampleApp_TaskID,USER_LIGHT_GATH_EVT)這一段代碼,可以查到這段代碼函數(shù)是uint8osal_set_event(uint8task_id,uint16event_flag){if(task_id<tasksCnt){halIntState_tintState;HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[task_id]|=event_flag;HAL_EXIT_CRITICAL_

溫馨提示

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

最新文檔

評論

0/150

提交評論