ZigBee长地址的使用

    xiaoxiao2021-04-17  49

    通过已知的IEEE地址获得该节点的网络地址:

    1、将某终端的IEEE地址保存至数组(与用SmartRF Flash读出的长地址顺序相反)

    uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};

    2、在应用层调用查询网络地址函数:

    DP_NwkAddrReq(pDestination,ZDP_ADDR_REQTYPE_SINGLE,0,0);

    3、消息会以广播的形式发给网络中所有未休眠的节点,拥有该IEEE地址的终端收到请求后会将网络地址发回给请求方,请求方可以在ZDO层的处理函数中进行处理。在case NWK_addr_rsp下调用消息解析函数ZDO_ParseAddrRsp(); 提取出消息中的短地址:

    ZDApp_ProcessOSALMsg();->case ZDO_CB_MSG:   ZDApp_ProcessMsgCBs();

    case NWK_addr_rsp:

    {            

     ZDO_NwkIEEEAddrResp_t  *My_pAddrRsp= ZDO_ParseAddrRsp(inMsg);

     mu_addr=My_pAddrRsp->nwkAddr; //把短地址保存起来

     break;    

     }

    目前已实现用IEEE地址获取休眠节点的网络地址,并进行通讯。

    直接使用IEEE地址进行发送数据:

    1、将某终端的IEEE地址保存至数组(与用SmartRF Flash读出的长地址顺序相反)

    uint8 pDestination[] ={0x34,0xB1,0xC4,0x08,0x00,0x4B,0x12,0x00};

    2、创建地址结构体并进行填充:

    afAddrType_t SampleApp_IEEE_DstAddr;   //长地址发送

    SampleApp_IEEE_DstAddr.addrMode = (afAddrMode_t)Addr64Bit; //长地址发送

    SampleApp_IEEE_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; 

    osal_memcpy( &(SampleApp_IEEE_DstAddr.addr.extAddr),pDestination,8); 

    3、调用AF函数对数据进行发送:

    AF_DataRequest(&SampleApp_IEEE_DstAddr,&SampleApp_epDesc,SAMPLEAPP_P2P_CLUSTERID,4,data,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS )

    PS:此方法只能用于与子节点的通讯。

    转载请注明原文地址: https://ju.6miu.com/read-673828.html

    最新回复(0)