物聯(lián)網(wǎng)實(shí)驗(yàn)報(bào)告_第1頁
物聯(lián)網(wǎng)實(shí)驗(yàn)報(bào)告_第2頁
物聯(lián)網(wǎng)實(shí)驗(yàn)報(bào)告_第3頁
物聯(lián)網(wǎng)實(shí)驗(yàn)報(bào)告_第4頁
物聯(lián)網(wǎng)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、20134636中南林業(yè)科技大學(xué)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告專業(yè)班級(jí):2013級(jí)計(jì)算機(jī)科學(xué)與技術(shù)2班授課教師:張艷學(xué)生姓名:陸煥麗學(xué)生學(xué)號(hào): 20134636實(shí)驗(yàn)一繼電器閃爍一 實(shí)驗(yàn)?zāi)康模簩W(xué)會(huì)使用修改程序,使得繼電器按要求閃爍。二 內(nèi)容:修改以下程序,使得繼電器的綠燈閃一下,紅燈閃五下#include <ioCC2530.h>typedef unsigned int uint ;typedef unsigned char uchar;/定義控制燈的端口#define RLED P1_0/定義LED1為P10口控制#define YLED P1_1/定義LED2為P11口控制/函數(shù)聲明void

2、Delay(uint);/延時(shí)函數(shù)void Initial(void);/初始化P0口/*/延時(shí)*/void Delay(uint n) uchar i; while(n-) for(i=200;i>0;i-); /* 初始化程序*/void Initial(void) P1DIR |= 0x03; /P10、P11定義為輸出 RLED = 1; YLED = 1;/LED滅/*/主函數(shù)*/void main(void) Initial();/調(diào)用初始化函數(shù)RLED = 0;/LED1YLED = 0;/LED2while(1) RLED = 0; YLED = 1; Delay(100

3、0); RLED = 1; YLED = 0; Delay(1000);三 實(shí)驗(yàn)記錄:修改好的程序如下: #include <ioCC2530.h>typedef unsigned int uint ;typedef unsigned char uchar;/定義控制燈的端口#define RLED P1_0/定義LED1為P10口控制#define YLED P1_1/定義LED2為P11口控制/函數(shù)聲明void Delay(uint);/延時(shí)函數(shù)void Initial(void);/初始化P0口/*/延時(shí)*/void Delay(uint n) uchar i; while(

4、n-) for(i=200;i>0;i-); /* 初始化程序*/void Initial(void) P1DIR |= 0x03; /P10、P11定義為輸出 RLED = 1; YLED = 1;/LED滅/*/主函數(shù)*/void main(void)uint i; Initial();/調(diào)用初始化函數(shù)RLED = 0;/LED1YLED = 0;/LED2while(1) RLED = 0; YLED = 1; Delay(1000); for(i=0;i<5;i+) RLED = 0; YLED = 0; Delay(1000); RLED = 1; YLED = 0; D

5、elay(1000); RLED = 0; YLED = 0; Delay(1000);實(shí)驗(yàn)顯示結(jié)果:繼電器的綠燈閃一下,紅燈閃五下,一直循環(huán)著.整個(gè)過程中所有儀器都正常。四 實(shí)驗(yàn)心得: 通過這次的實(shí)驗(yàn),利用C語言將程序修改,學(xué)會(huì)使用接口編程,學(xué)會(huì)使用IAR8.10與CC2530接口編程,重新溫習(xí)for循環(huán)語句,掌握繼電器的連接方式及工作原理實(shí)驗(yàn)二 Zigbee無線傳感網(wǎng)開發(fā)入門一、實(shí)驗(yàn)內(nèi)容: 1 、zigbee協(xié)議棧使用簡介 協(xié)議定義的是一系列的通信標(biāo)準(zhǔn),通信雙方需要共同按照這一標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)收發(fā);協(xié)議棧是協(xié)議的具體實(shí)現(xiàn)形式,通俗的理解為用代碼實(shí)現(xiàn)的函數(shù)庫,以便于開發(fā)人員調(diào)用。ZigBe

6、e的協(xié)議分為兩部分,IEEE802.15.4定義了物理層和MAC層技術(shù)規(guī)范,ZigBee聯(lián)盟定義了網(wǎng)絡(luò)層、安全層和應(yīng)用層技術(shù)規(guī)范,ZigBee協(xié)議棧就是將各個(gè)層定義的協(xié)議都集合在一起,以函數(shù)的形式實(shí)現(xiàn),并給用戶提供一些應(yīng)用層API,供用戶調(diào)用。注意:雖然協(xié)議是統(tǒng)一的,但是協(xié)議的具體實(shí)現(xiàn)形式是變化的,即不同廠商提供的協(xié)議棧是有區(qū)別的,例如:函數(shù)名稱和參數(shù)列表可能有區(qū)別,用戶在選擇協(xié)議棧以后,需要學(xué)習(xí)具體的例子,查看廠商提供的Demo演示程序和說明文檔來學(xué)習(xí)各個(gè)函數(shù)的使用方式,進(jìn)而快速的使用協(xié)議棧進(jìn)行應(yīng)用程序的開發(fā)工作。使用ZigBee協(xié)議棧進(jìn)行開發(fā)的基本思路可以概括為如下三點(diǎn):1、用戶對(duì)于Zig

7、Bee無線網(wǎng)絡(luò)的開發(fā)就簡化為應(yīng)用層的c語言程序開發(fā),用戶不需要深入研究復(fù)雜的ZigBee協(xié)議棧;2、ZigBee無線傳感器網(wǎng)絡(luò)中數(shù)據(jù)采集,只需用戶在應(yīng)用層加入傳感器的讀取函數(shù)即可;3、如果考慮節(jié)能,可以根據(jù)數(shù)據(jù)采集周期進(jìn)行定時(shí),定時(shí)時(shí)間到就喚醒ZigBee的終端節(jié)點(diǎn),終端節(jié)點(diǎn)喚醒后,自動(dòng)采集傳感器數(shù)據(jù),然后將數(shù)據(jù)發(fā)送給路由器或者直接發(fā)給協(xié)調(diào)器。既然ZigBee協(xié)議棧已經(jīng)實(shí)現(xiàn)了ZigBee協(xié)議,那么用戶就可以使用協(xié)議棧提供的API進(jìn)行應(yīng)用程序的開發(fā),在開發(fā)過程中完全不必關(guān)心ZigBee協(xié)議的具體實(shí)現(xiàn)細(xì)節(jié),只需關(guān)心一個(gè)核心的問題:應(yīng)用程序數(shù)據(jù)從哪里來到哪里去。下面舉一個(gè)例子,當(dāng)用戶應(yīng)用程序需要進(jìn)行

8、數(shù)據(jù)通信時(shí),需要按照如下步驟實(shí)現(xiàn): (1)調(diào)用協(xié)議棧的組網(wǎng)函數(shù)、加入網(wǎng)絡(luò)函數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)的建立與節(jié)點(diǎn)的加入; (2)發(fā)送設(shè)備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)發(fā)送函數(shù),實(shí)現(xiàn)數(shù)據(jù)的發(fā)送; (3)接收設(shè)備調(diào)用協(xié)議棧提供的無線數(shù)據(jù)接收函數(shù),實(shí)現(xiàn)數(shù)據(jù)的正確接收。因此,使用協(xié)議棧進(jìn)行應(yīng)用程序開發(fā)時(shí),開發(fā)者不需要關(guān)心協(xié)議棧是具體怎么實(shí)現(xiàn)的(例如,每個(gè)函數(shù)是怎么實(shí)現(xiàn)的,每條函數(shù)代碼是什么意思等),只需要知道協(xié)議棧提供的函數(shù)實(shí)現(xiàn)什么樣的功能,會(huì)調(diào)用相應(yīng)的函數(shù)來實(shí)現(xiàn)自己的應(yīng)用需求即可。例如,在TI提供的Zstack協(xié)議棧中,數(shù)據(jù)發(fā)送函數(shù)定義如下:afStatus_t AF_DataRequest(afAddrType_t

9、* dstAddr, endPointDesc_t * srcEP, uint16 cID, uint16 len, uint8 * buf, uint8 * transID,uint8 options, uint8 radius ) 用戶調(diào)用該函數(shù)即可實(shí)現(xiàn)數(shù)據(jù)的無線發(fā)送,當(dāng)然,在此函數(shù)中有8個(gè)參數(shù),用戶需要將每個(gè)參數(shù)的含義理解以后,才能達(dá)到熟練應(yīng)用該函數(shù)進(jìn)行無線數(shù)據(jù)通信的目的。AF_DataRequest()函數(shù)中最核心的兩個(gè)參數(shù):·uint16 len-發(fā)送數(shù)據(jù)的長度;·uint8* buf-指向存放發(fā)送數(shù)據(jù)的緩沖區(qū)的指針。至于調(diào)用該函數(shù)后,如何初始化硬件進(jìn)行數(shù)據(jù)發(fā)送等

10、工作,用戶不需要關(guān)心,ZigBee協(xié)議棧已經(jīng)將所需要的初始化工作初始化好了,這就類似于學(xué)習(xí)TCP/IP網(wǎng)絡(luò)編程時(shí),用戶只需要調(diào)用相應(yīng)的數(shù)據(jù)發(fā)送、接收函數(shù)即可,而不必關(guān)心具體的網(wǎng)卡驅(qū)動(dòng)的具體實(shí)現(xiàn)細(xì)節(jié)。2 zigbee協(xié)議棧安裝ZigBee協(xié)議棧具有很多版本,不同廠商提供的ZigBee協(xié)議棧有一定的區(qū)別,本手冊(cè)選用的是TI推出的ZigBee2007協(xié)議棧進(jìn)行講解。ZigBee 2007協(xié)議棧ZStack-CC2530-2.5.1a要安裝以后才能使用,下面講解安裝步驟。./工程源碼,雙擊ZStack-CC2530-2.5.1a.exe即可進(jìn)行協(xié)議棧的安裝,默認(rèn)是安裝到c盤。然后在路徑C:Texas

11、InstrumentsZStack-CC2530-2.5.1aProjectszstackSamplesGenericAppCC2530DB下找到GenericApp.eww,打開該工程。打開該工程后,可以看到GenericApp工程文件布局,如圖4.1所示。在圖中所示的文件布局中,左側(cè)有很多文件夾,如App,HAL,MAC等;這些文件夾對(duì)應(yīng)了ZigBee協(xié)議中不同的層,使用ZigBee協(xié)議棧進(jìn)行應(yīng)用程序的開發(fā),一般只需要修改App目錄下的文件即可。3 點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸實(shí)驗(yàn)盡管到此為止,讀者對(duì)ZigBee協(xié)議的基本內(nèi)容都不了解,甚至ZigBee協(xié)議是什么也可能存在諸多的疑問與不解,但與其閱讀“深

12、奧”的ZigBee協(xié)議棧,不如通過一個(gè)數(shù)據(jù)傳輸實(shí)驗(yàn)來對(duì)ZigBee協(xié)議以及ZigBee協(xié)議棧建立一個(gè)形象、直觀的認(rèn)識(shí),這將有助于讀者對(duì)ZigBee協(xié)議的理解。數(shù)據(jù)傳輸實(shí)驗(yàn)的基本功能:兩個(gè)ZigBee節(jié)點(diǎn)進(jìn)行點(diǎn)對(duì)點(diǎn)通信,ZigBee節(jié)點(diǎn)2向節(jié)點(diǎn)1發(fā)送“ChinaSofti”10個(gè)字符,同時(shí)LED綠燈閃爍兩下表示成功發(fā)送。ZigBee節(jié)點(diǎn)1收到節(jié)點(diǎn)2發(fā)送過來的數(shù)據(jù)后,對(duì)接收到的數(shù)據(jù)進(jìn)行判斷,如果收到的數(shù)據(jù)是“ChinaSofti”,則使開發(fā)板上的LED紅燈閃爍兩下表示成功接收。數(shù)據(jù)傳輸實(shí)驗(yàn)原理圖如圖4.2所示。(1) 協(xié)調(diào)器程序在ZigBee無線傳感器網(wǎng)絡(luò)中有三種設(shè)備類型:協(xié)調(diào)器、路由器和終端節(jié)點(diǎn)

13、,設(shè)備類型是由ZigBee協(xié)議棧不同的編譯選項(xiàng)來選擇的。協(xié)調(diào)器負(fù)責(zé)ZigBee網(wǎng)絡(luò)的組建,維護(hù),控制終端節(jié)點(diǎn)的加入等。路由器主要負(fù)責(zé)數(shù)據(jù)包的路由選擇,終端節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的采集,不具備路由功能。在本實(shí)驗(yàn)中,ZigBee節(jié)點(diǎn)1配置為1個(gè)協(xié)調(diào)器,負(fù)責(zé)ZigBee網(wǎng)路的組建,ZigBee節(jié)點(diǎn)2配置為一個(gè)終端節(jié)點(diǎn),上電后加入ZigBee節(jié)點(diǎn)1建立的網(wǎng)絡(luò),然后發(fā)送" ChinaSofti "給節(jié)點(diǎn)1。將GenericApp工程中的GenericApp.c刪除,刪除方法是:右鍵單擊GenericApp.c,在彈出的下拉菜單中選擇Remove即可,如圖4.3所示。單擊File,在彈出的下拉菜

14、單中選擇New,然后選擇File,如圖4.4所示。圖4.4 新建源文件將該文件保存為Coordinator.c,然后以同樣的方法建立一個(gè)Enddevice.c文件(最佳保存路徑:就保存在GenericApp工程中的Source文件夾下,具體路徑為C:Texas InstrumentsZStack-CC2530-2.5.1aProjectszstackSamplesGenericAppSource)。下面講解向該工程添加源文件的方法:右鍵單擊App,在彈出的下拉菜單中選擇Add,然后選擇Add Flies,如圖4.5所示,選擇剛才建立的兩個(gè)文件Coordinator.c和Enddevice.c即

15、可。添加完上述文件后,GenericApp工程文件布局如圖4.6所示。在Coordinator.c中輸入以下代碼:#include "OSAL.h"#include "AF.h"#include "ZDApp.h"#include "ZDObject.h"#include "ZDProfile.h"#include "GenericApp.h"#include "DebugTrace.h"#if !defined( WIN32 ) #include &qu

16、ot;OnBoard.h"#endif#include "hal_led.h"#include "hal_key.h"#include "hal_uart.h"const cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID;const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, GENERICAPP_PROFID, GENERICA

17、PP_DEVICEID, GENERICAPP_DEVICE_VERSION, GENERICAPP_FLAGS, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList ;endPointDesc_t GenericApp_epDesc;byte GenericApp_TaskID;byte GenericApp_TransID;static void GenericApp_MessageMSGCB( afIncomin

18、gMSGPacket_t *pckt );void GenericApp_Init( uint8 task_id ) GenericApp_TaskID = task_id; GenericApp_TransID = 0; GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = &GenericApp_TaskID; GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc

19、; GenericApp_epDesc.latencyReq = noLatencyReqs; afRegister( &GenericApp_epDesc );/節(jié)點(diǎn)注冊(cè)u(píng)int16 GenericApp_ProcessEvent( uint8 task_id, uint16 events ) afIncomingMSGPacket_t *MSGpkt; if ( events & SYS_EVENT_MSG ) MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); while ( M

20、SGpkt ) switch ( MSGpkt->hdr.event ) case AF_INCOMING_MSG_CMD: GenericApp_MessageMSGCB( MSGpkt ); break; default: break; osal_msg_deallocate( (uint8 *)MSGpkt ); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); return (events SYS_EVENT_MSG); return 0;static void GenericApp_

21、MessageMSGCB( afIncomingMSGPacket_t *pkt ) unsigned char buf10; switch ( pkt->clusterId ) case GENERICAPP_CLUSTERID: osal_memcpy(buf,pkt->cmd.Data,10); if( (buf10='C')|(buf1='h')|(buf5='S')|(buf9='i') HalLedBlink(HAL_LED_1,2,40,700); break; default: break; 上述代碼實(shí)

22、現(xiàn)的基本功能如下:第79行,將收到的數(shù)據(jù)拷貝到緩沖區(qū)buf中。第80行,判斷接收到的數(shù)據(jù)是不是“ChinaSofti”,這里是選擇性判斷了4個(gè)字符。如果是則執(zhí)行第82行,使LED紅燈閃爍2次。注意:上述代碼使用到了ZigBee協(xié)議棧提供的函數(shù)HalLedBlink(功能:使某個(gè)LED閃爍),直接使用即可。這里需要提醒讀者,使用協(xié)議棧進(jìn)行應(yīng)用程序開發(fā)時(shí),如果協(xié)議棧已經(jīng)提供了相應(yīng)的函數(shù),則只需要盡快掌握該函數(shù)的功能及使用方法即可,不需要另外實(shí)現(xiàn)該函數(shù)。由于我們的開發(fā)板硬件和TI的原廠開發(fā)板硬件有所不同,所以這里需要對(duì)相關(guān)的LED硬件初始化做一些調(diào)整。具體可分為以下兩步:1.打開ZMain文件夾下的

23、ZMain.c文件,找到整個(gè)協(xié)議棧的主函數(shù)main()函數(shù),在85行(通過Tools->Options選項(xiàng)的Editor欄中設(shè)置show line numbers即可顯示行號(hào)):HAL_BOARD_INIT();鼠標(biāo)雙擊這個(gè)函數(shù)選定然后右擊,選擇跳轉(zhuǎn)到函數(shù)定義處,具體如圖4.7所示:2.還是在hal_board_cfg.h這個(gè)文件中,我們將116行和123行的ACTIVE_HIGH改為ACTIVE_LOW,這是因?yàn)槲覀兊腖ED燈是IO口低電平觸發(fā)亮。通過以上兩步,相關(guān)的LED函數(shù)就可以正常使用了。到此為止,協(xié)調(diào)器的編程已經(jīng)基本結(jié)束,下面回憶一下上述代碼所做的基本工作。(1)刪除了協(xié)議棧中

24、的GenericApp.c文件,然后添加了兩個(gè)文件: Coordinator.c和Enddevice.c。(2)給出了Coordinator.c的代碼,并給出了部分注釋,其中 Coordinator.c文件中很多代碼格式是固定的,讀者只需要熟悉這些代碼格式即可。在Workspace下面的下拉列表框中選擇CoordinatorEB,然后右鍵單擊Enddevice.c,在彈出的下拉菜單中選擇Options,如圖4.8所示。圖4.8 Options選項(xiàng)設(shè)置在彈出的對(duì)話框中,選擇Exclude from build,如圖4.9所示。圖4.9 Exclude from build此時(shí),Enddevice

25、.c文件會(huì)呈灰白顯示狀態(tài)。同時(shí)可以打開Tools文件夾可以看到f8wEndevcfg和f8wRouter.cfg文件也是呈灰白顯示狀態(tài),文件呈灰白顯示狀態(tài)說明該文件不參與編譯,ZigBee協(xié)議棧正是使用這種方式實(shí)現(xiàn)對(duì)源文件編譯的控制。f8w2530.xcl,f8wConfig.cfg,f8wCoord.cfg三個(gè)文件包含了節(jié)點(diǎn)的配置信息,具體功能如下:(1)f8w2530.xcl-包含了CC2530單片機(jī)的鏈接控制指令(如定義堆棧大小、內(nèi)存分配等),一般不需要改動(dòng)。(2)f8wConfig.cfg-包含了信道選擇,網(wǎng)絡(luò)號(hào)等有關(guān)的鏈接命令。例如:下列代碼定義了建立網(wǎng)絡(luò)的信道默認(rèn)為11,即從11信

26、道上建立ZigBee無線網(wǎng)絡(luò),第59行定義了ZigBee無線網(wǎng)絡(luò)的網(wǎng)絡(luò)號(hào)。因此如果想從其他信道上建立zigbee網(wǎng)絡(luò)和修改網(wǎng)絡(luò)號(hào),就可以在此修改。(3)f8wCoord.cfg-定義了設(shè)備類型前文講到zigbee無線網(wǎng)絡(luò)中的設(shè)備類型有協(xié)調(diào)器,路由器和終端節(jié)點(diǎn)。下述代碼就定義了該設(shè)備具有協(xié)調(diào)器和路由器的功能。下面講解一下zigbee協(xié)議棧的編譯以及下載。點(diǎn)擊工具欄上的Make按鈕或者點(diǎn)擊Project下的Make,即可實(shí)現(xiàn)zigbee協(xié)議棧的編譯。編譯完成后,在窗口下方會(huì)自動(dòng)彈出Message窗口,顯示編譯過程中的警告和出錯(cuò)信息。Message窗口如圖4.10所示。圖4.10 Message窗口

27、最后,用CC2530仿真器將開發(fā)板和電腦連接起來,復(fù)位一下仿真器,然后選擇工具欄上的Debug按鈕或者點(diǎn)擊Project下的Download and Debug,即可實(shí)現(xiàn)程序的下載。(2) 終端節(jié)點(diǎn)程序下面介紹一下終端節(jié)點(diǎn)的程序設(shè)計(jì)步驟。首先,在Workspace下面的下拉列表框中選擇EndDeviceEB,然后右鍵單擊Coordinator.c文件,在彈出的下拉菜單中選擇Options,在彈出的對(duì)話框中,選擇Exclude from build,此時(shí),Coordinator.c文件會(huì)呈灰白顯示狀態(tài)。在Enddevice.c文件中輸入以下代碼: #include "OSAL.h&qu

28、ot;#include "AF.h"#include "ZDApp.h"#include "ZDObject.h"#include "ZDProfile.h"#include "GenericApp.h"#include "DebugTrace.h"#if !defined( WIN32 ) #include "OnBoard.h"#endif#include "hal_led.h"#include "hal_key.h&qu

29、ot;#include "hal_uart.h"const cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID;const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, / int Endpoint; GENERICAPP_PROFID, / uint16 AppProfId2; GENERICAPP_DEVICEID, / uint16 AppDeviceId2; GENERICA

30、PP_DEVICE_VERSION, / int AppDevVer:4; GENERICAPP_FLAGS, / int AppFlags:4; GENERICAPP_MAX_CLUSTERS, / byte AppNumInClusters; (cId_t *)GenericApp_ClusterList, / byte *pAppInClusterList; GENERICAPP_MAX_CLUSTERS, / byte AppNumInClusters; (cId_t *)GenericApp_ClusterList / byte *pAppInClusterList;endPoint

31、Desc_t GenericApp_epDesc;byte GenericApp_TaskID; devStates_t GenericApp_NwkState;byte GenericApp_TransID;afAddrType_t GenericApp_DstAddr;static void GenericApp_SendTheMessage( void );void GenericApp_Init( uint8 task_id ) GenericApp_TaskID = task_id; GenericApp_NwkState = DEV_INIT; GenericApp_TransID

32、 = 0; GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent; GenericApp_DstAddr.endPoint = 0; GenericApp_DstAddr.addr.shortAddr = 0x0000; GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT; GenericApp_epDesc.task_id = &GenericApp_TaskID; GenericApp_epDesc.simpleDesc = (SimpleDescriptionFormat

33、_t *)&GenericApp_SimpleDesc; GenericApp_epDesc.latencyReq = noLatencyReqs; afRegister( &GenericApp_epDesc );uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events ) afIncomingMSGPacket_t *MSGpkt; if ( events & SYS_EVENT_MSG ) MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( Gene

34、ricApp_TaskID ); while ( MSGpkt ) switch ( MSGpkt->hdr.event ) case ZDO_STATE_CHANGE: GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status); if (GenericApp_NwkState = DEV_ZB_COORD) osal_start_timerEx( GenericApp_TaskID, GENERICAPP_SEND_MSG_EVT, GENERICAPP_SEND_MSG_TIMEOUT ); break; default:

35、break; osal_msg_deallocate( (uint8 *)MSGpkt ); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); return (events SYS_EVENT_MSG); if ( events & GENERICAPP_SEND_MSG_EVT ) GenericApp_SendTheMessage(); osal_start_timerEx( GenericApp_TaskID, GENERICAPP_SEND_MSG_EVT, GENERICAPP_S

36、END_MSG_TIMEOUT ); return (events GENERICAPP_SEND_MSG_EVT); return 0;static void GenericApp_SendTheMessage( void ) char theMessageData = "Hello World" if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID, (byte)osal_strlen( theMessageData ) + 1, (byte

37、*)&theMessageData, &GenericApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) = afStatus_SUCCESS ) HalLedBlink(HAL_LED_2,2,40,700); 4 點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸實(shí)驗(yàn)解析前面實(shí)驗(yàn)實(shí)現(xiàn)了ZigBee無線網(wǎng)絡(luò)中點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳輸,但是具體流程并沒有講解,主要是想盡快讓讀者感受一下在ZigBee無線網(wǎng)絡(luò)里面的數(shù)據(jù)傳輸過程,對(duì)傳輸過程有個(gè)感性的認(rèn)識(shí),然后進(jìn)而展開講解。本節(jié)這是對(duì)上述實(shí)驗(yàn)進(jìn)行原理上的討論,具體的函數(shù)代碼并沒有過多的討論,目的是為了使讀者明白實(shí)驗(yàn)思路,具體的代碼

38、只要用多了自然就熟悉了。(1) 實(shí)驗(yàn)原理及流程圖 協(xié)調(diào)器流程圖如圖4.11所示。 協(xié)調(diào)器上電后,會(huì)按照編譯時(shí)給定的參數(shù),選擇合適的信道、合適的網(wǎng)絡(luò)號(hào),建立ZigBee無線網(wǎng)絡(luò),這部分內(nèi)容讀者不需要寫代碼實(shí)現(xiàn),ZigBee協(xié)議棧已經(jīng)實(shí)現(xiàn)了。圖4.11 協(xié)調(diào)器流程圖終端節(jié)點(diǎn)則是加入網(wǎng)絡(luò)后定期發(fā)送數(shù)據(jù)。流程圖與協(xié)調(diào)器類似。 終端節(jié)點(diǎn)上電后,會(huì)進(jìn)行硬件電路的初始化,然后搜索是否有ZigBee無線網(wǎng)絡(luò),如果有ZigBee無線網(wǎng)絡(luò)再自動(dòng)加入(這是最簡單的情況,當(dāng)然可以控制節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí)要符合編譯時(shí)確定的網(wǎng)絡(luò)號(hào)等),然后發(fā)送數(shù)據(jù)到協(xié)調(diào)器,最后使LED閃爍。(2) 數(shù)據(jù)發(fā)送 在zigbee協(xié)議棧中進(jìn)行數(shù)據(jù)發(fā)送

39、可以調(diào)用AF_Dataquest函數(shù)實(shí)現(xiàn),該函數(shù)會(huì)調(diào)用協(xié)議棧里面與硬件相關(guān)的函數(shù)最終將數(shù)據(jù)通過天線發(fā)送出去,這里面涉及對(duì)射頻模塊的操作,例如:打開發(fā)射機(jī),調(diào)整發(fā)射機(jī)的發(fā)送功率等內(nèi)容,這些部分協(xié)議棧已經(jīng)實(shí)現(xiàn)了,用戶不需自己寫代碼去實(shí)現(xiàn),只需要掌握AF_DataRequest函數(shù)的使用方法即可。 下面簡要講解一下AF_DataRequest數(shù)據(jù)發(fā)送函數(shù)中各個(gè)參數(shù)的具體含義。afStatus_t AF_DataRequest(afAddrType_t * dstAddr, endPointDesc_t * srcEP, uint16 cID, uint16 len, uint8 * buf, uin

40、t8 * transID,uint8 options, uint8 radius )afAddrType_t *dstAddr-該參數(shù)包含了目的節(jié)點(diǎn)的網(wǎng)絡(luò)地址以及發(fā)送數(shù)據(jù)的格式,如廣播、單播或多播等。endPointDesc_t *srcEP-在ZigBee無線網(wǎng)絡(luò)中,通過網(wǎng)絡(luò)地址可以找到某個(gè)具體的節(jié)點(diǎn),如協(xié)調(diào)器的網(wǎng)絡(luò)地址是0x0000,但是具體到某一個(gè)節(jié)點(diǎn),還有不同的端口( endpoint),每個(gè)節(jié)點(diǎn)上最多支持240個(gè)端口(endpoint)。 節(jié)點(diǎn)與端口的關(guān)系如圖4.12所示,每個(gè)節(jié)點(diǎn)上最多有240個(gè)端口,端口0是默認(rèn)的ZDO( ZigBee Device Object),端口1-240

41、用戶可以自己定義,引入端口主要是由于TI實(shí)現(xiàn)的ZigBee協(xié)議棧中加入了一個(gè)小的操作系統(tǒng),這樣,每個(gè)節(jié)點(diǎn)上的所有端口共用一個(gè)發(fā)射接收天線,不同節(jié)點(diǎn)上的端口之間可以進(jìn)行通信,如節(jié)點(diǎn)1的端口1可以給節(jié)點(diǎn)2的端口1發(fā)送控制命令來點(diǎn)亮LED,節(jié)點(diǎn)1的端口1也可以給節(jié)點(diǎn)2的端口2發(fā)送命令進(jìn)行數(shù)據(jù)采集操作,但是節(jié)點(diǎn)2上端口1和端口2的網(wǎng)絡(luò)地址是相同的,所以僅僅通過網(wǎng)絡(luò)地址無法區(qū)分,所以,在發(fā)送數(shù)據(jù)時(shí)不但要指定網(wǎng)絡(luò)地址,還要指定端口號(hào)。圖4.12 節(jié)點(diǎn)與端口應(yīng)此,通過使用端口號(hào)來區(qū)分同一節(jié)點(diǎn)上的不同端口。uint16 cID-這個(gè)參數(shù)描述的是命令號(hào),在ZigBee協(xié)議里的命令主要用來標(biāo)識(shí)不同的控制操作,不問

42、的命令號(hào)代表了不同的控制命令,如節(jié)點(diǎn)1的端口1可以給節(jié)點(diǎn)2的端口1發(fā)送控制命令,當(dāng)該命令的ID為1時(shí)表示點(diǎn)亮LED,為0時(shí)表示熄滅LED。因此,該參數(shù)主要是為了區(qū)別不同的命令。如終端節(jié)點(diǎn)在發(fā)送數(shù)據(jù)時(shí)使用的命令I(lǐng)D是GENERICAPP_CLUSTERID,它的值為1。uint16 len-該參數(shù)標(biāo)志了發(fā)送數(shù)據(jù)的長度。uint8 *buf-該參數(shù)是指向發(fā)送數(shù)據(jù)緩沖區(qū)的指針。發(fā)送數(shù)據(jù)函數(shù)會(huì)從該指針指向的地址按照指定的長度取得發(fā)送數(shù)據(jù)進(jìn)行發(fā)送。uint8 *transID-該參數(shù)是一個(gè)指向發(fā)送序號(hào)的指針,每次發(fā)送數(shù)據(jù)時(shí),發(fā)送序號(hào)會(huì)自動(dòng)加1(協(xié)議棧里面實(shí)現(xiàn)的該功能),在接收端可以通過發(fā)送序號(hào)來判斷是否

43、丟包,同時(shí)可以計(jì)算出丟包率。 uint8 options和uint8 radius-這兩個(gè)參數(shù)取默認(rèn)值即可。、2、 實(shí)驗(yàn)?zāi)康模?了解Zigbee協(xié)議和掌握Zigbee無線傳感網(wǎng)開發(fā)入門,了解點(diǎn)對(duì)點(diǎn)數(shù)據(jù)連接。三、實(shí)例測(cè)試及結(jié)果 打開協(xié)調(diào)器電源開關(guān),然后打開終端節(jié)點(diǎn)電源開關(guān),等終端節(jié)點(diǎn)連接上網(wǎng)絡(luò)后,每隔5s,會(huì)發(fā)現(xiàn)協(xié)調(diào)器的LED紅燈閃爍兩下,這說明協(xié)調(diào)器已經(jīng)成功收到了終端節(jié)點(diǎn)發(fā)送的“ChinaSofti”數(shù)據(jù)。以上就是點(diǎn)對(duì)點(diǎn)的無線數(shù)據(jù)傳輸,讀者可以自行修改數(shù)據(jù)發(fā)送緩沖區(qū)theMessageData中的數(shù)據(jù)來實(shí)現(xiàn)類似功能。實(shí)驗(yàn)截圖:四、實(shí)驗(yàn)心得: 在整個(gè)過程中,通過軟件將不同的程序分別下載到不同的實(shí)

44、驗(yàn)器材中,通過中端節(jié)點(diǎn)發(fā)送無線信號(hào)給協(xié)調(diào)器使得協(xié)調(diào)器中接收到信號(hào)后在顯示界面中顯示chinasoft字符串,學(xué)習(xí)了如何使兩個(gè)發(fā)送器之間傳輸無線信息,當(dāng)中端節(jié)點(diǎn)關(guān)閉后,協(xié)調(diào)器中如果接收不到信號(hào)就不顯示字符。 實(shí)驗(yàn)三可燃性氣體傳感器實(shí)驗(yàn)1.【實(shí)驗(yàn)?zāi)康摹?、了解MQ-2系列氣體傳感器的使用方法;2、掌握在Z-STACK協(xié)議中添加氣體傳感器采集數(shù)據(jù)的方法。3、掌握在Z-STACK任務(wù)中添加事件的方式;4、掌握周期性事件的處理方法。 2.【實(shí)驗(yàn)設(shè)備】1、裝有IAR8.10軟件的PC機(jī)一臺(tái);2、CC2530仿真器一臺(tái);3、物聯(lián)網(wǎng)教學(xué)實(shí)驗(yàn)平臺(tái)試驗(yàn)箱一臺(tái)。3.【實(shí)驗(yàn)要求】1、編程要求:按照實(shí)驗(yàn)步驟實(shí)現(xiàn)應(yīng)用程序

45、2、實(shí)現(xiàn)功能:傳感器檢測(cè)到可燃?xì)怏w后能夠?qū)?bào)警消息上傳到網(wǎng)關(guān),報(bào)警狀態(tài)解除后,也能將狀態(tài)上傳到網(wǎng)關(guān)。4.【實(shí)驗(yàn)原理】MQ-2氣體傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2)。當(dāng)傳感器所處環(huán)境中存在可燃?xì)怏w時(shí),傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大簡單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出信號(hào)。MQ-2氣體傳感器對(duì)液化氣、丙烷、氫氣的靈敏度高,對(duì)天然氣和其它可燃蒸汽的檢測(cè)也很理想。這種傳感器可檢測(cè)多種可燃性氣體,是一款適合多種應(yīng)用的低成本傳感器。傳感器如下圖所示:1、MQ-2氣體傳感器主要特點(diǎn)如下:在較寬的濃度范圍內(nèi)對(duì)可燃?xì)怏w有良好的靈敏度; 對(duì)液

46、化氣、丙烷、氫氣的靈敏度較高; 長壽命、低成本; 簡單的驅(qū)動(dòng)電路即可。 2、MQ-2和CC2530連接原理圖如果檢測(cè)到煙霧報(bào)警,P0_0處檢測(cè)到高電平,否則,保持低電平。5.【實(shí)驗(yàn)步驟】1、編寫基于Z-STACK的MQ-2驅(qū)動(dòng);2、在煙霧傳感器節(jié)點(diǎn)代碼中添加傳感器采集數(shù)據(jù)的事件;3、在協(xié)調(diào)器代碼中處理接收到的氣體傳感器報(bào)警消息;4、分別燒寫網(wǎng)關(guān)和傳感器對(duì)應(yīng)的代碼;5、通過串口助手觀察煙霧報(bào)警數(shù)據(jù)。細(xì)步驟:1.先安裝以下軟件:2.安裝好后,在電腦上插上繼電器和仿真器,然后右擊計(jì)算機(jī),點(diǎn)擊管理,查看設(shè)備管理器3將仿真器復(fù)位。改一下代碼再運(yùn)行程序:在59行改,-DZDAPP_CONFIG_PAN_I

47、D=0x122a,再運(yùn)行coordinatorEB里的coordinator.c這個(gè)程序4.拔掉繼電器,插上煙霧彈器,然后在smoke里運(yùn)行smoke.c程序:5.拔掉原先的設(shè)備,分別將繼電器和紅外線插上電腦,打開sscom32,改三處,顯示、cm3、115200,再關(guān)閉串口,出現(xiàn)以下結(jié)果:6【關(guān)鍵代.碼分析】1、 static void GPIOInit(void) P0SEL &= 0x01; /P0_0設(shè)置為通用IO P0DIR &= 0x01; /將P0_0設(shè)置為輸入模式 if(SMOKE_GPIO = HIGH) SmokeStatusNow = SMOKE_YES;

48、 else SmokeStatusNow = SMOKE_NO;功能:初始化P0_0口為輸入模式;入口參數(shù):無;返回值:無。2、#define SMOKE_READ_EVT 0x0004上面的宏定義了煙霧報(bào)警采檢測(cè)事件,下面的代碼段用來處理報(bào)警事件。 if ( events & SMOKE_READ_EVT ) /查看光敏電阻狀態(tài) SmokeStatusOld = SmokeStatusNow; /保存當(dāng)前狀態(tài) if(SMOKE_GPIO = HIGH) /高電平,檢測(cè)到報(bào)警 SmokeStatusNow = SMOKE_YES; /更新狀態(tài) else if(SMOKE_GPIO =

49、LOW) /低電平,報(bào)警消除 SmokeStatusNow = SMOKE_NO; /更新狀態(tài) /如果當(dāng)前狀態(tài)和上一個(gè)狀態(tài)不一樣,發(fā)送消息給網(wǎng)關(guān) if(SmokeStatusNow != SmokeStatusOld) UART0_Format.Command = 0x01; if(SmokeStatusNow = SMOKE_YES) UART0_Format.Data0 = 0x01; UART0_Format.Data1 = 0x00; else if(SmokeStatusNow = SMOKE_NO) UART0_Format.Data0 = 0x00; UART0_Format.D

50、ata1 = 0x00; osal_set_event(SerialApp_TaskID, SERIALAPP_SEND_EVT); /發(fā)送RF消息 /每隔200ms觸發(fā)一次檢測(cè) osal_start_timerEx(SerialApp_TaskID, SMOKE_READ_EVT, 200); return ( events SMOKE_READ_EVT ); 上面的代碼通過輪詢的方式,每隔200ms檢測(cè)一次煙霧傳感器的狀態(tài),如果狀態(tài)發(fā)生了變化,將當(dāng)前的狀態(tài)發(fā)送出去;如果沒有變化,繼續(xù)檢測(cè)。7.實(shí)驗(yàn)心得:這個(gè)實(shí)驗(yàn)實(shí)現(xiàn)了有害氣體檢測(cè)報(bào)警功能,所涉及的知識(shí)點(diǎn)有:CC2530的GPIO功能配置;煙

51、霧傳感器輸出信號(hào)的調(diào)理;周期消息的設(shè)置;串口收發(fā)函數(shù)的使用;事件的設(shè)置。 實(shí)驗(yàn)四紅外熱釋電傳感器實(shí)驗(yàn)1.【實(shí)驗(yàn)?zāi)康摹?、了解紅外熱釋電傳感器的原理和使用方法;2、掌握在Z-STACK協(xié)議中添紅外熱釋電傳感器檢測(cè)人體活動(dòng)的方法。3、掌握在Z-STACK任務(wù)中添加事件的方式; 4、掌握周期性事件的處理方法。 2【實(shí)驗(yàn)設(shè)備】1、裝有IAR8.10軟件的PC機(jī)一臺(tái);2、CC2530仿真器一臺(tái);3、物聯(lián)網(wǎng)教學(xué)實(shí)驗(yàn)平臺(tái)試驗(yàn)箱一臺(tái)。3【實(shí)驗(yàn)要求】1、編程要求:按照實(shí)驗(yàn)步驟實(shí)現(xiàn)應(yīng)用程序; 2、實(shí)現(xiàn)功能:傳感器檢測(cè)到人體活動(dòng)后,能都將狀態(tài)發(fā)送給網(wǎng)關(guān),靜止后,也能將狀態(tài)發(fā)送給網(wǎng)關(guān)。4.【實(shí)驗(yàn)原理】在自然界,任何高于絕對(duì)溫度(-273度)時(shí)物體都將產(chǎn)生紅外光譜,不同溫度的物體,其釋放的紅外能量的波長是不一樣的,因此紅外波長與溫度的高低是相關(guān)的。在紅外探測(cè)器中有兩個(gè)關(guān)鍵性的元件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論