• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

    2017-11-03 12:15:29殷松瑜
    物聯(lián)網(wǎng)技術(shù) 2017年10期
    關(guān)鍵詞:串口通信傳感器

    殷松瑜

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

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

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

    0 引 言

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

    文中ZigBee應(yīng)用層協(xié)議的預(yù)期目標(biāo)是能夠在協(xié)調(diào)器和終端模塊之間進(jìn)行雙向傳遞數(shù)據(jù),實(shí)驗(yàn)過(guò)程參考了北京賽佰特科技有限公司的相關(guān)設(shè)備資料。實(shí)驗(yàn)環(huán)境的硬件采用ZigBee(CC2530)模塊(4個(gè)),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)器自動(dòng)組建星形網(wǎng),節(jié)點(diǎn)設(shè)備申請(qǐng)加入網(wǎng)絡(luò)后兩者建立無(wú)線通信過(guò)程。協(xié)調(diào)器終端節(jié)點(diǎn)之間數(shù)據(jù)傳送方式主要為周期性定時(shí)自動(dòng)發(fā)送消息和通過(guò)按鍵事件觸發(fā)傳送數(shù)據(jù)。本文協(xié)議實(shí)現(xiàn)采用第一種數(shù)據(jù)傳送方式,即周期定時(shí)自動(dòng)發(fā)送信息。

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

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

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

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

    uint8DataHeadH; //包頭0xEE

    uint8DataDeadL; //包頭0xCC

    uint8NetID; //所屬網(wǎng)絡(luò)標(biāo)識(shí)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; //傳感器類(lèi)型編號(hào)

    uint8SensorID; //相同類(lèi)型傳感器設(shè)備號(hào)

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

    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ù)為定長(zhǎng)26 B。

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

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

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

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

    constcId_tSampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS] =

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

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

    };

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

    #if defined (ZAPP_P1)

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

    MT_UartZAppBufferLengthRegister(100);//注冊(cè)緩存區(qū)長(zhǎng)度

    #end if

    (4)當(dāng)設(shè)備加入到網(wǎng)絡(luò)后,其設(shè)備狀態(tài)就會(huì)發(fā)生變化,對(duì)所有任務(wù)觸發(fā)ZDO_STATE_CHANGE事件,開(kāi)啟一個(gè)定時(shí)器。定時(shí)時(shí)間到,觸發(fā)廣播Periodic消息事件,相應(yīng)任務(wù)為SampleApp_TaskID,事件處理函數(shù)處理SAMPLEAPP_SEND_PERIODIC_MSG_EVT事件,調(diào)用函數(shù)SampleApp_SendPeriodicMessage()來(lái)周期性自動(dòng)發(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)先級(jí)由OSAL分配

    if ( events & SYS_EVENT_MSG )

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

    MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );

    while ( MSGpkt )

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

    {case AF_INCOMING_MSG_CMD://接收無(wú)線數(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è)備類(lèi)型發(fā)生變化

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

    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è)備類(lèi)型協(xié)調(diào)器

    {//周期定時(shí)發(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 );

    ……

    }

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

    if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )

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

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

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

    ……

    }/*協(xié)調(diào)器自動(dòng)發(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();//自動(dòng)發(fā)送信息

    ……

    }

    ……

    }

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

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

    void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )

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

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

    void SampleApp_ProcessMTMessage( afIncomingMSGPacket_t *pckt )

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

    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; //接收的消息長(zhǎng)度

    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)接收串口傳來(lái)的傳感器數(shù)據(jù)

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

    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ù)包的長(zhǎng)度

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

    SampleApp_Periodic_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;

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

    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,//周期自動(dòng)發(fā)送消息命令

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

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

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

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

    AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )

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

    else

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

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

    } }

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

    if(SampleApp_NwkState == DEV_ZB_COORD)

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

    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ā)生錯(cuò)誤發(fā)送消息不成功}

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

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

    /*協(xié)調(diào)器通過(guò)無(wú)線信道接受終端節(jié)點(diǎn)16 B傳感器數(shù)據(jù)包后,從中提取出傳感器測(cè)量數(shù)據(jù),構(gòu)造ZigBee通信協(xié)議數(shù)據(jù)包,再通過(guò)串口向上位機(jī)傳送測(cè)量數(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)識(shí)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)的對(duì)應(yīng)端點(diǎn)號(hào)

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

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

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

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

    HalUARTWrite(0,uartbuf,26);

    }

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

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

    void SampleApp_ProcessCtrMessage(afIncomingMSGPacket_t *pckt )

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

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

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

    uartbuf[2]=pckt->cmd.Data[14];//傳感器類(lèi)型編號(hào)

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

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

    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)通過(guò)串口向傳感器傳輸控制數(shù)據(jù)包

    }

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

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

    void SampleApp_atuo_send_msg()

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

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

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

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

    uartbuf[2]=ZigBee; //所屬網(wǎng)絡(luò)標(biāo)識(shí)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ī)通過(guò)串口向協(xié)調(diào)器傳輸通信協(xié)議數(shù)據(jù)包

    }

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

    4 結(jié) 語(yǔ)

    實(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)用到各種自動(dòng)組網(wǎng)領(lǐng)域,具有很好的應(yīng)用推廣前景。

    參考文獻(xiàn)

    [1]原羿,蘇鴻根.基于ZigBee技術(shù)的無(wú)線網(wǎng)絡(luò)應(yīng)用研究[J].計(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ú)線傳感器網(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ú)線通信網(wǎng)關(guān)的設(shè)計(jì)[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

    猜你喜歡
    串口通信傳感器
    康奈爾大學(xué)制造出可拉伸傳感器
    簡(jiǎn)述傳感器在物聯(lián)網(wǎng)中的應(yīng)用
    電子制作(2019年22期)2020-01-14 03:16:52
    “傳感器新聞”會(huì)帶來(lái)什么
    跟蹤導(dǎo)練(三)2
    光電傳感器在自動(dòng)檢測(cè)和分揀中的應(yīng)用
    電子制作(2018年9期)2018-08-04 03:30:58
    基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
    串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
    基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
    科技視界(2016年13期)2016-06-13 22:01:19
    基于MSP430單片機(jī)的窄帶無(wú)線數(shù)據(jù)傳輸模塊的設(shè)計(jì)
    基于擴(kuò)展卡爾曼濾波的PMSM無(wú)位置傳感器控制
    慈利县| 芦山县| 木兰县| 阜康市| 华阴市| 元谋县| 大埔区| 时尚| 米林县| 天水市| 阜阳市| 福建省| 金坛市| 保德县| 阳原县| 西乌| 岢岚县| 万源市| 盘锦市| 泰兴市| 鹤庆县| 福鼎市| 昌乐县| 开封县| 寿光市| 石嘴山市| 榆中县| 罗甸县| 临邑县| 北安市| 宁明县| 稷山县| 永善县| 霍山县| 金昌市| 金平| 谷城县| 察隅县| 富平县| 西宁市| 东海县|