(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑940911)
上一节中我们详细讲述了单播通信的第一种方式——16位地址模式。本节中,我们将讲述单播通信的第二种方式——64位地址模式。
(仅描述与16位地址方式不同之处)
上一节中实现了对16位短地址已知的ZigBee协调器(固定为0x0000)单播控制功能,即无线点灯等;下面我们来实现对16位短地址未知、但64位MAC地址已知的ZigBee设备的单播控制功能;这边我们为了获得目标设备的64位MAC地址,可以将目标设备用仿真下载器连接到电脑,在电脑端Flash Programmer软件中点击“Read IEEE”直接获取,如下图所示:
1、64位地址单播发送函数,声明及定义如下:
2、实验验证......static void ProjectApp_SendUnicast64( void );
......static void ProjectApp_SendUnicast64( void ){ char theMessageData[ ] = "Unicast data 64\r\n"; uint8 DestMac[8]={0xA1,0XBD,0X38,0X12,0X00,0X4B,0X12,0X00};//00 12 4B 00 12 38 BD A1 ProjectApp_DstAddr.addrMode = (afAddrMode_t)Addr64Bit; ProjectApp_DstAddr.endPoint = PROJECTAPP_ENDPOINT; //ProjectApp_DstAddr.addr.shortAddr = NWK_PAN_COORD_ADDR;//NWK_BROADCAST_SHORTADDR_DEVALL; memcpy(ProjectApp_DstAddr.addr.extAddr,DestMac,8); AF_DataRequest( &ProjectApp_DstAddr, &ProjectApp_epDesc, PROJECTAPP_CLUSTERID, (byte)osal_strlen( theMessageData ) + 1, (byte *)&theMessageData, &ProjectApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );}相信这个函数的定义大家一眼就能看明白了~
(1)调用单播发送函数
(2)实验现象static void ProjectApp_HandleKeys( uint8 shift, uint8 keys ){ ...... if ( keys & HAL_KEY_SW_2 ) {// HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE); ProjectApp_SendUnicast64(); } ......}两个ZigBee设备分别上电后,会发现,无论按下哪个ZigBee设备上的KEY2,路由器(或终端设备)上的LED1状态都会取反,同时协调器的串口每次都会打印出“Unicast data 64”;
(配套源码、软件、开发板等资源,可移步博客同名QQ群:拿破仑940911)