zigbee单播通信
# 一、单播通信理论(1)Zigbee网络通信方式有4种:单播,广播,组播,绑定(MAC)。
(2)单播通信的特点:在Zigbee网络里,模块之间要进行通信,发射模块要明确知道接收模块的网络地址。
(3)Zigbee模块的地址特点:模块在加入网络的时候,父节点随机分配网络地址给子节点。但是协调器模块在)网络里的地址永远都是0x00。
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210528085917.png)
**单播发送数据需要明确的信息**:
(1)目标地址
(2)目标端点与簇
(3)要发送的数据大小
**应用任务层数据发送函数**
该函数在GenericApp.c里的GenericApp_SendTheMessage函数里:
```c
AF_DataRequest(
&GenericApp_DstAddr, //目标的网络地址指针
&GenericApp_epDesc,//端点描述符指针
GENERICAPP_CLUSTERID,//目标簇
(byte)osal_strlen( theMessageData ) + 1,//发送数据的大小
(byte *)&theMessageData,//发送数据缓冲区的地址
&GenericApp_TransID,//这是个全局变量,用来保存发送的次数
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );//发送路径,don't care
```
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210529101718.png)
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210528090054.png)
**网络地址结构体**
网络地址结构体就是定义在GenericApp.c前面的一个结构体变量,该类型为afAddrType_t,系统已经默认定义了一个网络地址结构体变量GenericApp_DstAddr,我们可以在GenericApp_Init()函数中,对网络地址结构体变量的成员进行赋值。
```c
//网络地址结构体:
typedef struct
{
union
{
uint16 shortAddr;//网络地址
ZLongAddr_t extAddr; //MAC地址
} addr;
afAddrMode_t addrMode;//通信模式
byte endPoint; //指定的端点
uint16 panId;//don't care
} afAddrType_t;
```
```c
//通信模式枚举类型:
typedef enum
{
afAddrNotPresent = AddrNotPresent,//当前不确定
afAddr16Bit = Addr16Bit,//单播通信模式
afAddr64Bit = Addr64Bit,//MAC通信模式
afAddrGroup = AddrGroup,//组播通信模式
afAddrBroadcast= AddrBroadcast//广播通信模式
} afAddrMode_t;
```
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210529102118.png)
# 二、端点与簇
## 1.端点
(1)通常发送的数据要明确该数据是给接收模块的哪个任务层用的,而这个就是用端点来指定的
(2)端点是一个字节的编号,通常为定义在GenericApp.h中的一个宏。端点必须要与任务层绑定,而这个就是用端点描述符来实现的。
(3)端点描述符是一个结构体变量,该变量定义在GenericApp.c开头,我们也可以定义新的端点描述符。该结构体的类型为 endPointDesc_t,系统也默认定义了一个端点描述符GenericApp_epDesc。
(4)我们可以在 GenericApp_Init()函数中,把新的端点描述符变量赋值,使新的端点与某个任务层绑定。
```c
//端点结构体类型:
typedef struct
{
byte endPoint;//端点的值
byte *task_id;//与端点绑定的任务层ID
SimpleDescriptionFormat_t *simpleDesc;//端点的描述信息,don’t care
afNetworkLatencyReq_t latencyReq;//don’t care
} endPointDesc_t;
```
## 2.簇
(1)在接收模块中,每个任务层可以对不同种类的数据采取不同的处理方式,这里的数据种类就是簇(CLUSTER)
(2)在发送模块中,簇是定义在GenericApp.h中的一个宏,我们也可以定义新的簇。
(3) 系统也默认定义了一个簇 GenericApp_CLUSTERID,在GenericApp.h中
# 三、 应用任务层数据发送接收API
(1)该函数为GenericApp.c中的void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210529115258.png)
(2)在switch语句中可以定义对不同的簇采用不同的方式处理数据
(3)该函数中的pkt->cmd.Data就是接收数据的首地址
!(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20210528090956.png) 来学习一下通信标准,不错。 观摩学习。。打卡 太复杂了,纯原理的真的感觉很难上手。
不知道zigbee有没有8266这样的模块化产品可以直接使用呢?
页:
[1]