亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Z—Stack的ZigBee協(xié)議的實(shí)現(xiàn)

        2017-11-03 12:15:29殷松瑜
        物聯(lián)網(wǎng)技術(shù) 2017年10期

        殷松瑜

        摘 要:文中基于ZigBee2007協(xié)議棧設(shè)計開發(fā)了一個應(yīng)用層ZigBee協(xié)議,實(shí)現(xiàn)了協(xié)調(diào)器和終端模塊之間雙向傳輸預(yù)設(shè)格式的數(shù)據(jù)。ZigBee協(xié)議通過對無線模塊內(nèi)的各種硬件資源標(biāo)準(zhǔn)化編碼,實(shí)現(xiàn)了使用統(tǒng)一的方法來訪問控制模塊內(nèi)部的相關(guān)資源。串口控制協(xié)議提供了對模塊有效的控制訪問途徑,用戶設(shè)備可通過統(tǒng)一的串口協(xié)議對無線通信進(jìn)行控制,訪問相關(guān)設(shè)備,傳遞各種測量控制數(shù)據(jù)等。

        關(guān)鍵詞:紫蜂;協(xié)議棧;串口通信;傳感器

        中圖分類號:TP39;TN925 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2017)10-00-05

        0 引 言

        ZigBee技術(shù)是一種近距離,擁有低復(fù)雜度、低功耗、低速率、低成本的雙向無線通信技術(shù),主要適合短距離無線通信、組網(wǎng)、自動控制和遠(yuǎn)程控制等領(lǐng)域,同時還可嵌入各種設(shè)備中。ZigBee協(xié)議是專用于ZigBee網(wǎng)絡(luò)的通信協(xié)議,通過好的算法能最大限度節(jié)省網(wǎng)絡(luò)中的能量,可接入大量節(jié)點(diǎn),具有高容錯性,強(qiáng)魯棒性。由傳感器和ZigBee系統(tǒng)組成的ZigBee無線傳感器網(wǎng)絡(luò)可自動采集、分析和處理各個節(jié)點(diǎn)的數(shù)據(jù),同時,ZigBee技術(shù)具有很強(qiáng)的網(wǎng)絡(luò)擴(kuò)展能力,適合于各種自動組網(wǎng)領(lǐng)域,具有廣闊的應(yīng)用領(lǐng)域和較高的研究價值[1]。ZigBee管理系統(tǒng)通信模型如圖1所示。

        文中ZigBee應(yīng)用層協(xié)議的預(yù)期目標(biāo)是能夠在協(xié)調(diào)器和終端模塊之間進(jìn)行雙向傳遞數(shù)據(jù),實(shí)驗(yàn)過程參考了北京賽佰特科技有限公司的相關(guān)設(shè)備資料。實(shí)驗(yàn)環(huán)境的硬件采用ZigBee(CC2530)模塊(4個),ZigBee下載調(diào)試板,USB仿真器,PC機(jī)。軟件采用IAR Embedded Workbench for MCS-51,ZigBee2007協(xié)議棧ZStack-2.3.0-1.4.0。

        1 Z-Stack協(xié)議棧

        本文以Z-Stack協(xié)議棧自帶的SampleApp樣例作為模板,SampleApp實(shí)現(xiàn)了協(xié)調(diào)器自動組建星形網(wǎng),節(jié)點(diǎn)設(shè)備申請加入網(wǎng)絡(luò)后兩者建立無線通信過程。協(xié)調(diào)器終端節(jié)點(diǎn)之間數(shù)據(jù)傳送方式主要為周期性定時自動發(fā)送消息和通過按鍵事件觸發(fā)傳送數(shù)據(jù)。本文協(xié)議實(shí)現(xiàn)采用第一種數(shù)據(jù)傳送方式,即周期定時自動發(fā)送信息。

        2 相關(guān)通信協(xié)議

        傳感器串口通信協(xié)議見表1所列[2]。

        其中,SOF固定為0xEE 0xCC,標(biāo)志一幀的開始,SensorType見傳感器說明,SensorId固定為0x01,CmdId固定為0x01,Data為6 B傳感器數(shù)據(jù)域,見傳感器說明,ExtenData為2 B 擴(kuò)展數(shù)據(jù)域,END固定為0xFF,標(biāo)志一幀的結(jié)束。一幀數(shù)據(jù)為定長16 B。傳感器說明(測量型)見表2所列,傳感器說明(控制型)見表3所列。

        ZigBee通信協(xié)議如下所示:

        uint8DataHeadH; //包頭0xEE

        uint8DataDeadL; //包頭0xCC

        uint8NetID; //所屬網(wǎng)絡(luò)標(biāo)識00(zigbee) 01(藍(lán)牙)02(WiFi)

        03(IPv6)

        uint8NodeAddress[4]; //節(jié)點(diǎn)網(wǎng)絡(luò)地址

        uint8FamilyAddress[4]; //根節(jié)點(diǎn)網(wǎng)絡(luò)地址

        uint8NodeState; //節(jié)點(diǎn)狀態(tài)

        uint8NodeChannel; //ZigBee物理信道(預(yù)留,固定為0x0B)

        uint8ConnectPort; //ZigBee ENDPOINT ID

        uint8SensorType; //傳感器類型編號

        uint8SensorID; //相同類型傳感器設(shè)備號

        uint8SensorCMD; //節(jié)點(diǎn)命令序號

        uint8 Sensordata1; //節(jié)點(diǎn)數(shù)據(jù)1

        uint8 Sensordata2; //節(jié)點(diǎn)數(shù)據(jù)2

        uint8 Sensordata3; //節(jié)點(diǎn)數(shù)據(jù)3

        uint8 Sensordata4; //節(jié)點(diǎn)數(shù)據(jù)4

        uint8 Sensordata5; //節(jié)點(diǎn)數(shù)據(jù)5

        uint8 Sensordata6; //節(jié)點(diǎn)數(shù)據(jù)6

        uint8 Resv1; //保留字節(jié)1

        uint8 Resv2; //保留字節(jié)2

        uint8DataEnd; //節(jié)點(diǎn)包尾0xFF

        其中,一幀數(shù)據(jù)為定長26 B。

        3 ZigBee通信協(xié)議功能實(shí)現(xiàn)代碼

        ZigBee協(xié)議實(shí)現(xiàn)代碼按照數(shù)據(jù)傳輸方向和發(fā)送接受節(jié)點(diǎn)不同,可分為6個不同的數(shù)據(jù)傳送過程,如圖2所示。其中,過程1表示傳感器通過串口把測量數(shù)據(jù)傳送給終端節(jié)點(diǎn);過程2表示終端節(jié)點(diǎn)通過串口把接收的控制數(shù)據(jù)傳送給傳感器;過程3表示協(xié)調(diào)器通過無線射頻把接收的控制數(shù)據(jù)傳送給終端節(jié)點(diǎn);過程4表示終端節(jié)點(diǎn)通過無線射頻把傳感器測量數(shù)據(jù)傳送給協(xié)調(diào)器;過程5表示上位機(jī)通過串口把控制數(shù)據(jù)傳送給協(xié)調(diào)器;過程6表示協(xié)調(diào)器通過串口把接收的測量數(shù)據(jù)傳送給上位機(jī)。

        為了實(shí)現(xiàn)ZigBee通信協(xié)議傳輸數(shù)據(jù),在協(xié)議實(shí)現(xiàn)代碼中添加終端與協(xié)調(diào)器通信相關(guān)的消息處理函數(shù),在SampleApp.c文件中進(jìn)行修改。

        (1)定義所屬網(wǎng)絡(luò)標(biāo)識

        #define ZigBee 0;// 所屬網(wǎng)絡(luò)標(biāo)識

        (2)添加自定義的應(yīng)用程序命令號:

        constcId_tSampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] =

        { SAMPLEAPP_PERIODIC_CLUSTERID,//發(fā)給協(xié)調(diào)器endprint

        SAMPLEAPP_CTRL_CLUSTERID //發(fā)給終端節(jié)點(diǎn)

        };

        (3)由于協(xié)議棧串口通信過程現(xiàn)在正在MT層實(shí)現(xiàn)處理,所以使用ZigBee串口通信要在編譯選項(xiàng)里加入MT層支持ZAPP_P1:

        #if defined (ZAPP_P1)

        MT_UartRegisterTaskID(SampleApp_TaskID);//注冊任務(wù)優(yōu)先級

        MT_UartZAppBufferLengthRegister(100);//注冊緩存區(qū)長度

        #end if

        (4)當(dāng)設(shè)備加入到網(wǎng)絡(luò)后,其設(shè)備狀態(tài)就會發(fā)生變化,對所有任務(wù)觸發(fā)ZDO_STATE_CHANGE事件,開啟一個定時器。定時時間到,觸發(fā)廣播Periodic消息事件,相應(yīng)任務(wù)為SampleApp_TaskID,事件處理函數(shù)處理SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,調(diào)用函數(shù)SampleApp_SendPeriodicMessage()來周期性自動發(fā)送信息。

        (5)ZigBee協(xié)議功能實(shí)現(xiàn)代碼中添加與協(xié)調(diào)器終端相互通信相關(guān)的消息處理函數(shù)。

        SampleApp_ProcessEvent()事件處理函數(shù)代碼如下:

        /* 根據(jù)不同的事件調(diào)用相應(yīng)的事件處理函數(shù) */

        uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )

        { afIncomingMSGPacket_t *MSGpkt;//指向接收消息結(jié)構(gòu)體的指針

        (void)task_id; // 任務(wù)優(yōu)先級由OSAL分配

        if ( events & SYS_EVENT_MSG )

        {//從消息隊(duì)列接收消息,其中包含接收到的無線數(shù)據(jù)包的指針

        MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );

        while ( MSGpkt )

        {switch ( MSGpkt->hdr.event )//對接收的事件進(jìn)行判斷

        {case AF_INCOMING_MSG_CMD://接收無線數(shù)據(jù)

        SampleApp_MessageMSGCB(MSGpkt);//接收消息處理函數(shù)

        break;

        #if defined (ZAPP_P1)

        case SPI_INCOMING_ZAPP_DATA://接收到串口數(shù)據(jù)

        SampleApp_ProcessMTMessage(MSGpkt);//監(jiān)控調(diào)試層串口消息處理函數(shù)

        MT_UartAppFlowControl (MT_UART_ZAPP_RX_READY);//串口流控制

        break;

        #end if

        case ZDO_STATE_CHANGE://節(jié)點(diǎn)設(shè)備類型發(fā)生變化

        SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //讀取節(jié)點(diǎn)設(shè)備類型

        if ( (SampleApp_NwkState == DEV_ZB_COORD)//協(xié)調(diào)器

        || (SampleApp_NwkState == DEV_ROUTER)//型路由器

        || (SampleApp_NwkState == DEV_END_DEVICE) )//終端節(jié)點(diǎn)

        {HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);//LED_1點(diǎn)亮

        if(SampleApp_NwkState == DEV_ZB_COORD) //設(shè)備類型協(xié)調(diào)器

        {//周期定時發(fā)送消息

        osal_start_timerEx( SampleApp_TaskID,

        SAMPLEAPP_COORD_AUTO_SEND_MSG_EVT,

        COORD_AUTO_MSG_TIMEOUT);

        } }

        else

        ……

        }

        //處理完接收的消息,需釋放消息占用的堆內(nèi)存,防止內(nèi)存泄漏

        osal_msg_deallocate( (uint8 *)MSGpkt );

        ……

        }

        //定時器當(dāng)預(yù)設(shè)時間到達(dá)之后設(shè)置周期性消息發(fā)送事件

        if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )

        {SampleApp_SendPeriodicMessage();// 定時發(fā)送周期性消息

        // 設(shè)置發(fā)送消息時間為固定周期再附加隨機(jī)時間延遲,防止訪問碰撞沖突

        osal_start_timerEx(SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,(SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );

        ……

        }/*協(xié)調(diào)器自動發(fā)送消息事件*/

        if ( events & SAMPLEAPP_COORD_AUTO_SEND_MSG_EVT )

        { osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_COORD_AUTO_SEND_MSG_EVT,COORD_AUTO_MSG_TIMEOUT);endprint

        SampleApp_atuo_send_msg();//自動發(fā)送信息

        ……

        }

        ……

        }

        SampleApp_MessageMSGCB()接收消息處理函數(shù)代碼如下:

        /* 對接收到的消息調(diào)用相應(yīng)的消息處理函數(shù) */

        void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

        { switch ( pkt->clusterId )//判斷發(fā)給不同應(yīng)用領(lǐng)域特定對象的命令

        { case SAMPLEAPP_PERIODIC_CLUSTERID://發(fā)給協(xié)調(diào)器

        ……

        SampleApp_ProcessAFMessage(pkt);//調(diào)用應(yīng)用層消息處理函數(shù)

        break;

        case SAMPLEAPP_CTRL_CLUSTERID://發(fā)給終端節(jié)點(diǎn)

        ……

        SampleApp_ProcessCtrMessage(pkt);//調(diào)用傳感器控制消息處理函數(shù)

        break; }

        }

        SampleApp_ProcessMTMessage()監(jiān)控調(diào)試層串口通信處理函數(shù)代碼如下:

        /*實(shí)現(xiàn)協(xié)調(diào)器通過無線信道接收終端節(jié)點(diǎn)16 B傳感器數(shù)據(jù)包后,提取出傳感器測量數(shù)據(jù),構(gòu)造ZigBee通信協(xié)議數(shù)據(jù)包,再通過串口向上位機(jī)發(fā)送測量數(shù)據(jù);協(xié)調(diào)器從串口接收上位機(jī)發(fā)送的ZigBee協(xié)議格式數(shù)據(jù)包,數(shù)據(jù)包內(nèi)容是傳感器控制數(shù)據(jù),通過無線信道發(fā)送給相應(yīng)的終端節(jié)點(diǎn)*/

        void SampleApp_ProcessMTMessage( afIncomingMSGPacket_t *pckt )

        { uint8 len;//數(shù)據(jù)包長度

        uint16 FamilyAddr;//根節(jié)點(diǎn)16位短地址

        unsigned char * buf = ((unsigned char *)pckt+2);//接受 應(yīng)用層發(fā)送的消息

        unsigned char data[16];//存放終端節(jié)點(diǎn)發(fā)送給協(xié)調(diào)器消息的發(fā)送緩沖區(qū)

        len = pckt->hdr.status; //接收的消息長度

        unsigned char data_buf[26]; //發(fā)送給協(xié)調(diào)器消息的發(fā)送緩沖區(qū)

        osal_memcpy(data_buf,buf,26); //復(fù)制應(yīng)用層消息到協(xié)調(diào)器消息的緩沖區(qū)

        if(SampleApp_NwkState != DEV_ZB_COORD){// 終端節(jié)點(diǎn)接收串口傳來的傳感器數(shù)據(jù)

        //檢驗(yàn)傳感器數(shù)據(jù)包的長度,包頭,包尾是否正確

        if((len == 14)&&(buf[0]==0xEE)&&(buf[1]==0xCC)&&(buf[13]==0xFF)){

        osal_memcpy(data,buf,14); //獲取傳感器的數(shù)據(jù)

        FamilyAddr=NLME_GetCoordShortAddr();//獲取協(xié)調(diào)器的16位地址

        data[14]=FamilyAddr>>8; //協(xié)調(diào)器16位短地址的低8位

        data[15]=FamilyAddr; //協(xié)調(diào)器16位短地址的高8位

        len = 16; //發(fā)送數(shù)據(jù)包的長度

        //設(shè)置單播模式和設(shè)備16位短地址

        SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;

        //通信節(jié)點(diǎn)端口號

        SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;

        //發(fā)送目的地是協(xié)調(diào)器地址0x0000

        SampleApp_Periodic_DstAddr.addr.shortAddr = 0x0000;

        //Z-Stack協(xié)議棧提供的數(shù)據(jù)發(fā)送函數(shù)AF_DataRequest()

        if ( AF_DataRequest( &SampleApp_Periodic_DstAddr,

        //目的地地址

        &SampleApp_epDesc,//設(shè)備節(jié)點(diǎn)描述符

        SAMPLEAPP_PERIODIC_CLUSTERID,//周期自動發(fā)送消息命令

        len,//數(shù)據(jù)包長度

        data,//數(shù)據(jù)緩沖區(qū)指針

        &SampleApp_TransID,//數(shù)據(jù)發(fā)送序列號

        AF_DISCV_ROUTE,//數(shù)據(jù)發(fā)送路由

        AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

        {//向協(xié)調(diào)器周期性發(fā)送消息成功}

        else

        {//發(fā)生錯誤發(fā)送消息不成功}

        HalLedBlink( HAL_LED_2, 2, 50, (1000 / 4) );

        } }

        //協(xié)調(diào)器接受到從串口傳送過來的上位機(jī)控制數(shù)據(jù)

        if(SampleApp_NwkState == DEV_ZB_COORD)

        {//檢驗(yàn)控制數(shù)據(jù)包的長度,包頭,所屬網(wǎng)絡(luò)標(biāo)識,包尾是否正確

        if((len== 26)&&(buf[0]==0xEE)&&(buf[1]==0xCC)&&(buf[2]==0x0)&&(buf[25]==0xFF))endprint

        { SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;

        SampleApp_Periodic_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;

        //根據(jù)傳送傳感器數(shù)據(jù)的終端節(jié)點(diǎn)地址反向確定控制消息發(fā)送的目的地地址

        SampleApp_Periodic_DstAddr.addr.shortAddr = BUILD_UINT16(buf[6], buf[5]);

        if (AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,//傳送傳感器控制數(shù)據(jù)簇命令

        SAMPLEAPP_CTRL_CLUSTERID,len,buf,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

        {//向終端節(jié)點(diǎn)周期性發(fā)送消息成功}

        else

        { //發(fā)生錯誤發(fā)送消息不成功}

        HalLedBlink( HAL_LED_2, 2, 50, (1000 / 4) );} }}

        SampleApp_ProcessAFMessage()應(yīng)用層消息處理函數(shù)代碼如下:

        /*協(xié)調(diào)器通過無線信道接受終端節(jié)點(diǎn)16 B傳感器數(shù)據(jù)包后,從中提取出傳感器測量數(shù)據(jù),構(gòu)造ZigBee通信協(xié)議數(shù)據(jù)包,再通過串口向上位機(jī)傳送測量數(shù)據(jù)*/

        void SampleApp_ProcessAFMessage( afIncomingMSGPacket_t *pckt )

        {unsigned char buffer[16]={0x00};//接受緩沖區(qū)

        int i=0;unsigned char uartbuf[26]={0x00};//串口發(fā)送緩沖區(qū)

        osal_memcpy(buffer, pckt->cmd.Data, 16);//接受到消息數(shù)據(jù)復(fù)制到接受緩沖區(qū)

        uartbuf[0]=0xEE;//包頭0xEE

        uartbuf[1]=0xCC;//包頭0xCC

        uartbuf[2]=ZigBee; //所屬網(wǎng)絡(luò)標(biāo)識00(ZigBee)

        //發(fā)送消息的終端節(jié)點(diǎn)的源地址(16位短地址)高8位

        uartbuf[5]=HI_UINT16(pckt->srcAddr.addr.shortAddr);

        //發(fā)送消息的終端節(jié)點(diǎn)的源地址(16位地址)低8位

        uartbuf[6]=LO_UINT16(pckt->srcAddr.addr.shortAddr);

        uartbuf[9]=buffer[14];//根節(jié)點(diǎn)16位短地址的高8位

        uartbuf[10]=buffer[15];//根節(jié)點(diǎn)16位短地址的低8位

        uartbuf[11]=0X01; //節(jié)點(diǎn)狀態(tài)在線(01)

        uartbuf[12]=0X0B;//ZigBee物理信道(預(yù)留,固定為0x0B)

        uartbuf[13]=pckt->endPoint; //ZigBee通信節(jié)點(diǎn)的對應(yīng)端點(diǎn)號

        //傳感器測量數(shù)據(jù)復(fù)制到ZigBee通信協(xié)議數(shù)據(jù)發(fā)送緩沖區(qū)相對應(yīng)的位置

        for(i=14;i<26;i++)

        {uartbuf[i]=buffer[i-12];}

        //協(xié)調(diào)器通過串口向上位機(jī)傳送ZigBee通信協(xié)議數(shù)據(jù)包

        HalUARTWrite(0,uartbuf,26);

        }

        SampleApp_ProcessCtrMessage()傳感器控制消息處理函數(shù)代碼如下:

        /*終端節(jié)點(diǎn)通過無線信道接受協(xié)調(diào)器26 B數(shù)據(jù)包后,提取出控制型傳感器相關(guān)數(shù)據(jù)14 B,構(gòu)造串口通信協(xié)議數(shù)據(jù)包,在通過串口向傳感器傳送控制數(shù)據(jù),完成控制任務(wù)。*/

        void SampleApp_ProcessCtrMessage(afIncomingMSGPacket_t *pckt )

        {unsigned char uartbuf[14];// //構(gòu)造ZigBee通信協(xié)議數(shù)據(jù)包長度26 B

        uartbuf[0]=0xEE;//包頭0xEE

        uartbuf[1]=0xCC; //包頭0xCC

        uartbuf[2]=pckt->cmd.Data[14];//傳感器類型編號

        uartbuf[3]=pckt->cmd.Data[15];//相同類型傳感器設(shè)備號

        uartbuf[4]=pckt->cmd.Data[16];//節(jié)點(diǎn)命令序號

        uartbuf[5]=pckt->cmd.Data[17];//節(jié)點(diǎn)數(shù)據(jù)1

        uartbuf[6]=pckt->cmd.Data[18];//節(jié)點(diǎn)數(shù)據(jù)2

        uartbuf[7]=pckt->cmd.Data[19];//節(jié)點(diǎn)數(shù)據(jù)3

        uartbuf[8]=pckt->cmd.Data[20]; //節(jié)點(diǎn)數(shù)據(jù)4

        uartbuf[9]=pckt->cmd.Data[21];//節(jié)點(diǎn)數(shù)據(jù)5

        uartbuf[10]=pckt->cmd.Data[22]; //節(jié)點(diǎn)數(shù)據(jù)6

        uartbuf[11]=0x00;//保留字節(jié)1endprint

        uartbuf[12]=0x00;//保留字節(jié)2

        uartbuf[13]=0xFF; //節(jié)點(diǎn)包尾0xFF

        HalLedBlink( HAL_LED_2, 2, 50, (1000 / 4) ); // LED燈閃爍指示接受完成狀態(tài)

        HalUARTWrite(0,uartbuf,14);// 終端節(jié)點(diǎn)通過串口向傳感器傳輸控制數(shù)據(jù)包

        }

        SampleApp_atuo_send_msg()協(xié)調(diào)器自動發(fā)送消息函數(shù)代碼如下:

        /*上位機(jī)構(gòu)造26 B通信協(xié)議數(shù)據(jù)包,通過串口發(fā)給協(xié)調(diào)器,周期性自動向外發(fā)布消息*/

        void SampleApp_atuo_send_msg()

        {unsigned char uartbuf[26];//構(gòu)造ZigBee通信協(xié)議數(shù)據(jù)包,長度26 B

        osal_memset(uartbuf,0,sizeof(unsigned char)*26);//自動清除原來的舊數(shù)據(jù)

        uartbuf[0]=0xEE;//包頭0xEE

        uartbuf[1]=0xCC;//包頭0xCC

        uartbuf[2]=ZigBee; //所屬網(wǎng)絡(luò)標(biāo)識00(ZigBee)

        uartbuf[11]=0x01; //節(jié)點(diǎn)狀態(tài)在線(01)

        uartbuf[12]=0x0B; //ZigBee物理信道(預(yù)留,固定為0x0B)

        uartbuf[25]=0xFF; //節(jié)點(diǎn)包尾0xFF

        HalUARTWrite(0,uartbuf,26);// 上位機(jī)通過串口向協(xié)調(diào)器傳輸通信協(xié)議數(shù)據(jù)包

        }

        ZigBee協(xié)議運(yùn)行結(jié)果如圖3所示。

        4 結(jié) 語

        實(shí)驗(yàn)證明,該ZigBee應(yīng)用層協(xié)議運(yùn)行穩(wěn)定可靠,能夠在協(xié)調(diào)器和終端模塊之間快速高效地雙向傳輸預(yù)定格式的數(shù)據(jù)內(nèi)容,充分發(fā)揮了ZigBee強(qiáng)大的網(wǎng)絡(luò)擴(kuò)展能力,可以運(yùn)用到各種自動組網(wǎng)領(lǐng)域,具有很好的應(yīng)用推廣前景。

        參考文獻(xiàn)

        [1]原羿,蘇鴻根.基于ZigBee技術(shù)的無線網(wǎng)絡(luò)應(yīng)用研究[J].計算機(jī)應(yīng)用與軟件,2004,21(6): 89-91.

        [2]北京賽佰特科技有限公司.CBT 模塊通訊協(xié)議V1.2[Z].2014.

        [3]吳清秀.基于ZigBee協(xié)議棧的網(wǎng)絡(luò)管理研究[J].物聯(lián)網(wǎng)技術(shù),2016,6(7):66-67.

        [4]楊諾,胡必玲,黃志煒.基于物聯(lián)網(wǎng)核心技術(shù)的智能考勤系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2016,6(10):85-89.

        [5]查爽.基于ZigBee技術(shù)的無線傳感器網(wǎng)絡(luò)網(wǎng)關(guān)研究與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2007.

        [6]王彤.基于Z-Stack協(xié)議棧的ZigBee網(wǎng)絡(luò)組網(wǎng)研究與實(shí)現(xiàn)[D].保定:河北大學(xué),2012.

        [7]賀東梅.基于ZigBee協(xié)議的無線通信網(wǎng)關(guān)的設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2017,7(1):45-47.

        [8]吳清秀.基于ZigBee協(xié)議棧的PHY服務(wù)研究[J].物聯(lián)網(wǎng)技術(shù),2015,5(6):44-45.endprint

        99精品电影一区二区免费看| 红桃av一区二区三区在线无码av | 亚洲国产都市一区二区| 久久一区二区三区久久久| 色综合久久精品亚洲国产 | 久久视频在线| 日韩亚洲欧美中文高清在线| 国产区高清在线一区二区三区| 久草视频这里只有精品| 激烈的性高湖波多野结衣| 日韩一级特黄毛片在线看| av东京热一区二区三区| 一区二区三区免费看日本| 久久99精品国产麻豆宅宅| 狠狠狠色丁香婷婷综合激情| 久久国产精品一区二区| 一二三区无线乱码中文在线 | 国产精品久久久在线看| 一本一道av无码中文字幕﹣百度| 日本欧美在线播放| 亚洲精品在线观看自拍| 久久久精品午夜免费不卡| 亚洲一区二区三区成人网站| 国产精品日日摸夜夜添夜夜添| 蕾丝女同一区二区三区| 久久久av波多野一区二区 | 亚洲人成人无码www影院| 亚洲成av人最新无码| 久久国产精品一区二区| 日本高清一级二级三级| 国产精品无码av天天爽| 北岛玲日韩精品一区二区三区| 日韩一二三四区在线观看| 东京道一本热中文字幕| 成人欧美在线视频| 国产午夜激情视频在线看| 国产精品成熟老女人| 国产日韩成人内射视频| 亚洲区一区二区三区四| 人妻少妇-嫩草影院| 中文天堂在线www|