zigbee数据的发送和接收

合集下载

zigbee课程设计

zigbee课程设计

zig bee课程设计一、课程目标知识目标:1. 学生能够理解ZigBee技术的基本概念,包括其起源、特点和应用领域。

2. 学生能够掌握ZigBee网络的体系结构,了解其物理层、媒体访问控制层和网络层的工作原理。

3. 学生能够了解ZigBee协议栈的组成及其在无线传感器网络中的应用。

技能目标:1. 学生能够运用ZigBee模块进行基本的无线通信编程,实现数据发送和接收。

2. 学生能够设计并实现一个小型的ZigBee无线传感器网络系统,进行数据采集和监控。

3. 学生能够通过实验和项目实践,掌握ZigBee网络的配置、调试和维护方法。

情感态度价值观目标:1. 学生能够认识到ZigBee技术在物联网和智能生活领域的广泛应用,增强对物联网技术的兴趣和热情。

2. 学生能够在学习过程中培养团队合作意识,提高沟通与协作能力。

3. 学生能够养成积极探索、动手实践的学习习惯,培养创新思维和问题解决能力。

课程性质:本课程为信息技术课程,旨在让学生了解和掌握ZigBee技术的基本原理和应用,培养实际操作能力和创新意识。

学生特点:学生为初中生,具备一定的信息技术基础,对新鲜事物充满好奇心,喜欢动手实践。

教学要求:结合课程性质和学生特点,教学过程中应注重理论与实践相结合,鼓励学生动手实践,培养其解决问题的能力。

同时,注重培养学生的团队合作意识和创新思维。

通过分解课程目标为具体学习成果,为教学设计和评估提供依据。

二、教学内容1. 引入ZigBee技术:介绍ZigBee的起源、发展历程、特点及其在物联网中的应用。

- 教材章节:第一章 ZigBee概述- 内容:ZigBee的发展背景、关键技术、与其他无线通信技术的对比。

2. ZigBee网络体系结构:讲解ZigBee物理层、媒体访问控制层、网络层的工作原理。

- 教材章节:第二章 ZigBee网络体系结构- 内容:各层的作用、协议栈结构、ZigBee设备类型。

3. ZigBee协议栈与应用:介绍ZigBee协议栈的组成,及其在无线传感器网络中的应用。

ZigBee(紫蜂)技术讲解

ZigBee(紫蜂)技术讲解
APS 安全 管理模块
SPA 服务接入点
应用

对象 1

端点 1 服务接入点
APS 应用支持子层
APS 信息 分析模块
网络层

ZDO



端点 0 服务接入点
SAP

网络

管理模块



ZDO 管理 平面
SAP
网络安全 管理模块
网络信息 分析模块
SAP 服务接入点

路由 管理模块
网络 管理模块
务 接 入
如下图所示。在这种网络结构中设备之间传输 数据时,可以通过路由器转发,即多跳的传输 方式,以增大网络的覆盖范围。网形拓扑结构 具有强人功能。
网状拓扑
网络拓扑
ZigBee网络的拓扑结构
ZigBee的协议架构
1. zigbee网络协议栈概述
应用程序框架
应用层
ZDO
应用 对象 240
端点 240 服务接入点
1. 紫蜂技术(ZigBee) 简介
ZigBee这个名字来源于 蜂群的通信方式:蜜蜂之 间通过跳Zigzag形状的舞 蹈来交互消息,以便共享 食物源的方向、位置和距 离等信息。借此意义 Zigbee作为新一代无线通 讯技术的命名。
紫蜂是一种高可靠的无线数传网络,类似于 CDMA和GSM网络。ZigBee数传模块类似于 移动网络基站。
2.帧定界符(SFD)为11100101,一个字节,用来标示 同步码的结束和数据包的开始。
3.物理层帧首部由一个字节组成,最高位保留,后七 位用来表示有效载荷的数据长度。
4.PSDU域是物理层携带的有效载荷,长度为0到127 字节。长度为5字节时为MPDU(确认帧),长度大于7 字节时为MAC层的有效帧,其余长度的作为保留。

Zigbee通讯方式

Zigbee通讯方式

4
2.2 Zigbee 发送数据
Zigbee 发送数据时调用函数 AF_DataRequest(),只需要了解函数的参数,就可非常灵
活的以各种方式来发送数据。
afStatus_t
AF_DataRequest( afAddrType_t *dstAddr,//发送目的地址+端点地址和传送模式 endPointDesc_t *srcEP,//源终端的描述(如:操作系统任务 ID) uint16 cID, //用于接收器识别的标号(簇 ID) uint16 len, //发送数据长度 uint8 *buf, //发送数据缓冲区(即发送的数据) uint8 *transID, //任务 ID 号 uint8 options, //有效位掩码的发送选项 uint8 radius ); //最大传送跳数
数中的簇 ID 一致),取出数据并串口显示,代码如下。
SampleApp_MessageMSGCB (afIncomingMSGPacket_t *pkt) {…
switch ( pkt->clusterId ) {
case SAMPLEAPP_PERIODIC_CLUSTERID: //簇 ID len = (char)pkt->cmd.DataLength; //读取数据的长度 for(n=0;n<len;n++) UartTX_Send_String(&pkt->cmd.Data[n],1); //串口显示数据 … } … }
osal_memcpy( SampleApp_, "Group 1", 7 );//组名 aps_AddGroup(SAMPLEAPP_ENDPOINT, &SampleApp_Group);//添加新组

zigbee无线通信模块通信流程

zigbee无线通信模块通信流程

zigbee无线通信模块通信流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!Zigbee无线通信模块的通信流程详解Zigbee,一种基于IEEE 802.15.4标准的低功耗、短距离、无线通信技术,广泛应用于物联网、智能家居等领域。

zigbee 协议栈

zigbee 协议栈

zigbee 协议栈Zigbee是一种基于IEEE 802.15.4标准的无线通信协议,它是一种低功耗、短距离的无线网络协议,可以用于物联网中各种设备的通信。

Zigbee协议栈是指一套软件的层次结构,用于实现Zigbee协议的功能和特性。

Zigbee协议栈由四个层次组成:应用层,网络层,MAC层和物理层。

应用层是Zigbee协议栈的最高层,它提供了应用程序与其他网络层之间的接口。

应用层负责处理数据的收发,以及定义数据的格式和协议。

应用层也负责处理设备与设备之间的通信,例如传感器与控制器之间的通信。

网络层是Zigbee协议栈的中间层,它负责网络的发现和路由选择。

网络层的主要功能是将数据传输到目标设备,以及维护网络拓扑结构。

网络层使用一种叫做AODV(Ad-hoc On-Demand Distance Vector)的路由选择算法来决定数据的传输路径。

MAC层是Zigbee协议栈的第二层,它负责实现对数据的传输和控制。

MAC层的主要功能包括数据的处理、帧的编码和解码、对信道的管理等。

MAC层使用CSMA-CA(Carrier Sense Multiple Access with Collision Avoidance)协议来控制数据的传输,并通过BEACON帧来管理设备之间的通信。

物理层是Zigbee协议栈的最底层,它负责将数据从电子信号转换为无线信号,并传输到接收设备。

物理层的主要功能包括信号的调制和解调、信道编码和解码、信号的传输和接收等。

Zigbee协议栈还支持一种叫做ZDO(Zigbee Device Object)的设备对象。

ZDO是一个与设备相关的软件模块,提供了设备的管理和控制功能。

ZDO负责设备的发现、加入网络、离开网络、重置等操作,并通过指定的应用程序接口来与设备进行通信。

总的来说,Zigbee协议栈是一个非常复杂的系统,包含了多个层次和各种功能。

它通过不同的层次和模块来实现Zigbee协议的各种特性和功能,从而使得物联网设备之间可以方便地进行通信和控制。

zigbee串口接受发送流程

zigbee串口接受发送流程

zigbee串口接受发送流程前面学会了如何使用串口,但是仅仅学会使用串口远远不够,这两天把串口相关代码又看了一遍,不能说是全部弄清楚,至少能够从总体把握了。

串口接受DMA模式:data--U0DBUF--DMA--rxBuf--(通过调用回调函数)HalUARTRead()读取rxBUf中的数据--设置事件发生标志--调用相关的处理函数串口接收中断模式:data--U0DBUF-中断--rxBuf--(通过调用回调函数)--HalUARERead()读取rxBuf数据--设置事件发生标志--调用相关的处理函数下面较为详细的说明以上两种方法:中断:中断函数把U0DBUF数据放入rxBuf()存储空间去,大概每过200ms后调用polllsr()函数,得到未被读取的字节个数,然后返回HalUARTpoll()进行下一步处理。

如果触发以下三种事件:rxBuf()接收满,rxBuf接收超时,rxBuf()接收到预设值,则调用回调函数,读取数据。

其中回调函数完成以下事情读取缓冲区的数据,设置事件发生标志,特别注意如果mt中回调函数没有编译,则回调函数在应用层中,因此可以直接在应用层处理。

如果mt回调函数有编译则设置mt中的任务,调用其中的任务处理函数。

dma:主要区别就是将中断服务程序改为dma模式,其余一样。

(关于dma方式毛毛老师已经说的很清楚了,有需要的同学可以参考《Zstack中串口操作的深度解析dma(一》)注意事项:对于大量的数据发送,当接受缓冲区的数据达到一定数量,将触发接收满,超时,达到预设值三个事件,通过硬件终止pc与串口的数据传送。

当数据取完后,再通过软件将硬件打开,继续传输数据。

还是有些细节没有弄明白,必须通过实验来验证。

欢迎各位来交流。

zigbee 原理

zigbee 原理

zigbee 原理
Zigbee是一种无线通信协议,专门用于低功耗、短距离通信。

它基于IEEE 802.15.4标准,并且通过射频通信进行数据传输。

Zigbee的原理如下:
1. 网络拓扑:Zigbee网络由一个或多个设备组成,这些设备可以是传感器、控制器、终端设备等。

这些设备按照不同的拓扑结构组成网络,常见的拓扑结构包括星型、网状和树状结构。

2. 节点角色:在Zigbee网络中,不同的设备扮演不同的角色。

其中,协调器(Coordinator)是网络的核心,负责管理网络节
点和协调通信。

路由器(Router)用于转发数据,扩展网络范围。

终端设备(End Device)通常是最简单的设备,用于与其
他设备进行通信。

3. 数据通信:Zigbee使用无线射频通信方式,在2.4GHz频段
进行数据传输。

通信过程中,设备通过发送和接收数据帧进行交互。

数据帧中包含了一些必要的信息,如发送者、接收者、数据内容等。

4. 网络组建:Zigbee网络的组建过程通常包括扫描、加入和路由等步骤。

设备首先进行扫描,查找网络中可用的节点。

然后,设备可以加入到网络中,成为网络的一部分。

路由器设备可以通过建立多个路径,实现节点之间的数据传输。

5. 低功耗设计:Zigbee在设计上非常注重低功耗,以满足无线传感器网络的需求。

设备可以进入睡眠模式以节省能源,并且
可以通过唤醒信号来重新激活。

总的来说,Zigbee的原理是基于低功耗、短距离的无线通信,通过网络拓扑、节点角色、数据通信和低功耗设计等要素,实现设备之间的数据传输和协作。

zigbee技术介绍

zigbee技术介绍

zigbee技术介绍ZigBee作为用于个人网络的短距离无线通信协议,已变得越来越知名。

Zigbee是一种适用于短距离无线通信的低成本,低功耗,低速的新技术,可以嵌入各种电子设备中。

该技术主要设计用于低速通信网络。

它的最大特点是低功耗和联网功能,尤其是具有路由功能的联网功能。

从理论上讲,ZigBee覆盖的通信领域可以无限扩展。

ZigBe包含3种节点类型,即:协调器,路由节点和终端节点。

●协调器——启动网络和维护网络●路由节点——转发数据包●终端节点——发送和接收数据。

在实际的Zigbee网络中,仅支持两种无线设备:全功能设备和简化功能设备。

FFD可以提供所有IEEE802.15.4协议服务,不仅可以发送和接收数据,还可以具有路由功能;最终节点负责收集数据,然后将其发送到协调点或路由节点进行处理。

这三种类型的节点使ZigBee支持三种网络拓扑:星形结构,树形结构和网状结构Zigbee协议无线通信技术的特点:●低速率:数据传输速率在10Kb/s〜250Kb/s之间●低功耗:在低功耗待机模式下,两节普通5号电池可以使用6到24个月●成本低:Zigbee数据传输速率低,协议简单,大大降低了成本●网络容量大:网络可容纳65,000个设备●短延迟:典型的搜索设备延迟为30ms,睡眠激活延迟为15ms,活动设备通道访问延迟为15ms。

数据安全性:Zigbee提供数据完整性检查和声音功能,采用AES-128加密算法,并且每个应用程序都可以灵活确定其安全属性基于ZigBee技术的应用数字家庭ZigBee模块可以安装在电视,门禁系统,空调系统和其他家用电器中。

通过ZigBee终端设备,可以收集各种家庭信息并将其传输到中央控制设备,或者可以使用远程控制来实现远程控制的目的,从而提供家庭生活自动化,联网和智能化。

自动抄表读数通过ZigBee网络直接发送到提供天然气,水和电的公司。

利用ZigBee技术,天然气或水电公司可以直接向用户发送用水、用电、用气等信息,十分方便。

Zigbee接收数据流程图

Zigbee接收数据流程图

Zigbee接收数据流程图Zigbee协议利用一个13192的接收中断处理接收事件void interrupt IRQIsr(void) >>>>>>>>>>>>>>>>>>>>>>>对13192的中断处理事件if ((u16StatusContent & RX_IRQ_MASK) != 0) //接收中断事件{RTXENDeAssert(); /* Forces the MC13192 to idle. */if (((u16StatusContent & CRC_VALID_MASK) == 0) && ((gsPhyOptions.Bits.u1PromiscuousMode == FALSE))) {/* If an invalid CRC, restart receiver. *//* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register */SPIDrvWrite(MODE_ADDR, u16StatusContent);RTXENAssert(); /* Forces the MC13192 to enter the receive mode. */return;}else {/* Read received packet length register and mask off length bits */u8DataLength = (UINT8) (SPIDrvRead(RX_PKT_LEN) & 0x7F);if (u8DataLength < 5) /* Rx_pkt_length is bad when <5because of CRC and byte codes. */{/* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register. */SPIDrvWrite(MODE_ADDR, u16StatusContent);/* Forces the MC13192 to enter the receive mode. */RTXENAssert();return;}/* Test the Byte Codes */u16Temp = SPIDrvRead2(RX_PKT); /* Get the code bytes */if ((u16Temp != 0xFF7E) && ((gsPhyOptions.Bits.u1PromiscuousMode == FALSE))) {/* Read the MC13192 trx register. Timer trigger off. */u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F);/* Update the trx register. */SPIDrvWrite(MODE_ADDR, u16StatusContent);/* Forces the MC13192 to enter the receive mode. */RTXENAssert();return;}/* A valid packet has been received. */ //一个有效的数据包被读取gu8RTxMode = IDLE_MODE; /* Set the rtx_state to idle */SPIDrvWrite(T1_HI_ADDR, 0x8000); /** Disables TC1 and clears the* IRQ.*/SPIDrvWrite(T1_LO_ADDR, 0x0000);psDrvRxPacket->u8DataLength = u8DataLength;psDrvRxPacket->u8Status = SUCCESS;PDDataIndication(); /* Notify PHY that there is data available. */ SOF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>PDDataIndication()函数原型void PDDataIndication(){/* Read the Data only if it is a good packet. */if (psDrvRxPacket->u8Status == SUCCESS){RAMDrvReadRx(psDrvRxPacket); /** Read data from MC13192,* check status*/ SOF>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >RAMDrvReadRx(psDrvRxPacket);UINT8 RAMDrvReadRx(tRxPacket *psRxPkt){UINT8 i, u8TempByte; /* Temporary counters. */UINT8 u8T empValue; /** Used by SPIClearRecieveDataReg to* flush SPI1D register during readUINT8 u8Status = 0; /* Holder for the return value */UINT16 u16RxLength;u16RxLength = SPIDrvRead(RX_PKT_LEN); /** Read the RX packet length* register contents*/u16RxLength &= 0x007F; /* Mask out all but the RX packet length *//* MC13192 reports length with 2 CRC bytes and 2 Code bytes,* remove them.*/if (u16RxLength >= 5) {psRxPkt->u8DataLength = u16RxLength - 4; /** Less byte code* and CRC*/}else {psRxPkt->u8DataLength = 0;}if ((psRxPkt->u8DataLength >= 1) && \(psRxPkt->u8DataLength <= psRxPkt->u8MaxDataLength)) { /** If <5, the packet* is garbageSPIClearRecieveStatReg(); /* Clear status register (SPRF, SPTEF) */SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/MC13192DisableInterrupts(); /* Necessary to prevent double SPI access */AssertCE(); /* Enables MC13192 SPI */SPISendChar(RX_PKT | 0x80); /* SPI RX ram data register */ SPIWaitTransferDone(); /* For this bit to be set, SPTED* MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain MSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*/SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/SPIClearRecieveDataReg(); /** Clear receive data register.* SPI entirely ready for read or write*//* Byte codes */SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/u8TempValue = SPIRead(); /* Read first code byte */SPISendChar(u8TempValue); /** Dummy write. Receive register of SPI will* contain LSB garbage for first read*/SPIWaitTransferDone(); /* For this bit to be set, SPTED MUST be set.*/u8TempValue = SPIRead(); /* Read second code byte */u8TempByte = 0; /* Byte counter for *contents *//* Word loop. Round up. Deduct CRC. */for (i=0; i<((u16RxLength-1)>>1); i++) {SPISendChar(u8TempValue);/** Dummy write. Receive register of SPI* will contain MSB*/SPIWaitTransferDone(); /** For this bit to be set, SPTED MUST be* set. Get MSB*//* For a trailing garbage byte, just read and discard */if ((u8TempByte + 3) == u16RxLength) {SPIClearRecieveDataReg(); /* Discard */}else {psRxPkt->pu8Data[u8TempByte + 1] = SPIRead(); /* Read MSB */}SPISendChar(u8TempValue);/* //就是把值赋给SPID寄存器* Dummy write. Receive register of SPI* will contain LSB*/SPIWaitTransferDone(); /** For this bit to be set, SPTED MUST be* set. Get LSB*/psRxPkt->pu8Data[u8TempByte] = SPIRead(); /* Read LSB */ u8TempByte = u8T empByte + 2; /* Increment byte counter */ }DeAssertCE(); /* Disables MC13192 SPI */psRxPkt->u8Status = SUCCESS;MC13192RestoreInterrupts(); /* Restore MC13192 interrupt status */}/* Check to see if a larger packet than desired is received. */ if (psRxPkt->u8DataLength > psRxPkt->u8MaxDataLength) { psRxPkt->u8Status = OVERFLOW;}return u8Status;}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >RAMDrvReadRx(psDrvRxPacket);EOF}EnableInterrupts; /* Allow system interrupts within the IRQ handler */MCPSDataIndication(psDrvRxPacket);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>MCPSDataIndication(psDrvRxPacket);函数原型 SOFvoid MCPSDataIndication(tRxPacket *gsRxPacket){UINT8 i=0;/** Place your code here to handle a mac layer data indication.* RX packet is in the global structure* gsRxPacket.dataLength and gsRxPacket.data*/if (gsRxPacket->u8Status == SUCCESS){/* Packet received *///if (gsRxPacket->pu8Data[0] == 'A' && gsRxPacket->pu8Data[1] == 'C' && gsRxPacket->pu8Data[2] == 'K')// {// if (gi8AppStatus== WAITING_FOR_ACK)// {// gi8AppStatus= RECEIVER_ALWAYS_ON; /* go back to rx_mode. */// }// } else /* Not an ACK */// {// LCDWriteString(1, &gsRxPacket->pu8Data[0]);for(i=0;iu8DataLength;i++) //在包接收模式下依次读取接收包中的数据{// SCITransmitStr(&gsRxPacket->pu8Data[0]);// SCITransmitStr(&gsRxPacket->pu8Data[1]);SCITransmitStr(&gsRxPacket->pu8Data[i]);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void SCITransmitStr2函数原型 SOFvoid SCITransmitStr2(UINT8 *pStr){UINT16 i;UINT16 nStrLen=1;for (i=0; i{SCIStartTransmit(pStr[i]);>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>SCIStartTransmit函数原型 SOFvoid SCIStartTransmit(UINT8 cData){while (!SCIS1_TDRE); /* ensure Tx data buffer empty */SCID = cData; /* load data to SCI2 register */while (!SCIS1_TC); /* wait for Tx complete */}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>SCIStartTransmit函数原型 EOF}}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void SCITransmitStr2函数原型 EOF// SCITransmitStr(&gsRxPacket->pu8Data[4]);}// gi8AppStatus = TRANSMIT_ACK; //原程序// SCITransmitStr(&gsRxPacket->pu8Data);gi8AppStatus =RECEIVER_ALWAYS_ON; //修改后接收完毕不需要应答直接进入接收状态// }}// if (gsRxPacket->u8Status == TIMEOUT) //不需要处理超时事件// {/* Received TIMEOUT */// gi8AppStatus = TIMEOUT_STATE;// }}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>MCPSDataIndication(psDrvRxPacket);函数原型 EOF}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>PDDataIndication()函数原型EOFreturn; }}}。

ZigBee技术介绍

ZigBee技术介绍

精简功能设备(RFD):RFD只能传送信息给FFD或从FFD接收信息。

附带有限的功能来控制成本和复杂性,在网络中通常用作终端设备。

ZigBee网络定义了三种节点类型:协调器和路由器必须是全功能器件(FFD: Full function device),终端设备可以是全功能器件,也可以是简约器件(RFD: reduce function device)。

协调点是一个特殊的FFD,它具有较强的功能,是整个网络的主要控制者,它根据网络的最大深度(nwkMaxDepth),每个路由器能最多连接子设备的数目(nwkMaxChildren),每个路由器能最多连接子路由器的数目(nwkMaxRouters)等参数建立新的网络、发送网络信标、管理网络中的节点以及存储网络信息等。

RFD的应用相对简单,例如在传感器网络中,它们只负责将采集的数据信息发送给它的协调点,不具备数据转发、路由发现和路由维护等功能。

RFD占用资源少,需要的存储容量也小,在不发射和接收数据时处于休眠状态,因此成本比较低,功耗低。

FFD除具有RFD功能外,还需要具有路由功能,可以实现路由发现、路由选择,并转发数据分组。

一个FFD可以和另一个FFD或RFD通信,而RFD只能和FFD通信,RFD之间是无法通信的。

一旦网络启动,新的路由器和终端设备可以通过路由发现、设备发现等功能加入网络。

当路由器或终端设备加入ZigBee 网络时,设备间的父子关系(或说从属关系)即形成,新加入的设备为子,允许加入的设备为父。

一个简单的ZigBee网络父子关系如图3-a中的A、B。

ZigBee中每个协调点最多可连接255个节点,一个ZigBee网络最多可容纳65535个节点。

3.2 网络拓扑ZigBee网络的拓扑结构主要有三种,星型网、网状(mesh)网和混合网,见图3。

星型网(图3-c)是由一个协调点和一个或多个终端节点组成的。

协调点必须是FFD,它负责发起建立和管理整个网络,其它的节点(终端节点)一般为RFD,分布在协调点的覆盖范围内,直接与协调点进行通信。

2、自己理解zigbee有关的数据的发送和接收

2、自己理解zigbee有关的数据的发送和接收

哎呀研究这个数据的发送和收发研究了2天了。

今天终于把困扰我很久的一个问题给解决了。

问题:终端节点启动会为什么会自动的发送数据呢?解决过程:这个过程可是异常的艰辛。

要解决这个问题。

咱们先聊聊这个整个zigbee协议栈的工作流程。

程序肯定都是从main函数开始的,这个肯定也不例外。

大家查看一下main函数主要就是关闭中断,检查电源电压是否够高,还有就是初始化了,什么物理层,mac层等等。

而我们在这里关注2个函数就好了。

第一个是:osal_init_system();第二个:osal_start_system();第一个osal_init_system()函数就是初始化与系统运行相关的一些东西如:初始化内存分配系统,初始化消息队列,初始化定时器,初始化电源管理系统,初始化第一块堆,最后一个就是我们要讲的一个非常重要的函数:osalInitTasks();初始化任务函数void osalInitTasks( void )//系统任务初始化函数{uint8 taskID = 0;//这个指针指向了所有任务空间的首地址tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);//这个tasksEvents指针总共有多少个数据空间,其实总共有多少任务就有多少个空间。

osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));macTaskInit( taskID++ ); //mac层的任务是0nwk_init( taskID++ ); //网络层的任务是1Hal_Init( taskID++ ); //物理层的任务号是2#if defined( MT_TASK )MT_TaskInit( taskID++ );//串口的任务#endifAPS_Init( taskID++ );#if defined ( ZIGBEE_FRAGMENTATION )APSF_Init( taskID++ );#endifZDApp_Init( taskID++ );#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )ZDNwkMgr_Init( taskID++ );#endifGenericApp_Init( taskID );//应用程序的初始化。

ZigBee无线传感器网络设计实战第五章

ZigBee无线传感器网络设计实战第五章

XXGC
终端节点
协调器
无线数据传输原理图
实训 5-1 无线数据发送和接收 知识链接
1 设备类型
在ZigBee无线网络中,存在3种逻辑设备类型, 即:协调器(Coordinator)、路由器(Router) 和终端节点(End-device)。 ZigBee网络通常由一个协调器以及多个路由器和 多个终端设备组成,绿色节点为协调器,蓝色节 点为路由器,橙色节点为终端设备,如右图所示。
afAddrType_t *dstAddr:该参数包含了目 的节点的网络地址以及发送数据的格式。 endPointDesc_t *srcEP:该参数的作用就 是指定端口号。 uint16 cID:这个参数描述的是命令号。 uint16 len:该参数标识了发送数据的长度。 uint8 *buf:该参数是指向发送数据缓存区的 指针。
/* Coordinator Settings */ -DZDO_COORDINATOR -DRTR_NWK
//开启协调器功能 //开启路由器功能
不同的是,如果路由器和终端节点的 ZDAPP_CONFIG_PAN_ID值设置为非0xFFFF 值,则会以ZDAPP_CONFIG_PAN_ID值作为 PANID。
实训 5-1 无线数据发送和接收
如果协调器的PANID的设置值为小于等于 0x3FFF的有效值,协调器就会以这个特定的 PANID值建立网络。但是,如果在默认的信道 上已经有了该PANID值的网络存在,则协调器 会继续搜寻其他的PANID,直到找到网络不冲 突为止。
ZigBee网络示意图
实训 5-1 无线数据发送和接收
协调器是整个网络的核心,它最主要的作用是启 动网络,其方法是选择一个相对空闲的信道,形 成一个PANID(网络编号)。它也会协助建立 网络中的安全层及处理应用层的绑定。当整个网 络启动和配置完成之后,它的功能就退化为一个 普通路由器。

zigbee网络通讯实验(单播、组播、广播)

zigbee网络通讯实验(单播、组播、广播)

其中 Group_DstAddr 我们之前已经定义,我们在 SampleApp.h 中加入 WEBEE_GROUP_CLUSTERID 的定义如下(图 15 所示):
#define WEBEE_GROUP_CLUSTERID 4 //传输编号
图 14
11
WeBee 团队
Zigbee 组网实验教程
图 15 接下来为了测试我们的程序,我们把“1 小时实现数据传输”中 SampleApp.c 文件中的 SampleApp_SendPeriodicMessage();函数替换成我们刚刚建立的组 播发送函数 SampleApp_SendGroupMessage();;这样的话就能实现周期性组播发 送数据了(图 16 所示)。
uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( & Group_DstAddr,
&SampleApp_epDesc, WEBEE_GROUP_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. } }
uint8 data[10]={0,1,2,3,4,5,6,7,8,9}; if ( AF_DataRequest( &Point_To_Point_DstAddr,
&SampleApp_epDesc, SAMPLEAPP_POINT_TO_POINT_CLUSTERID, 10, data, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { } else { // Error occurred in request to send. } }

ZIGBEE 技术

ZIGBEE 技术
endPointDesc_t *srcEP: typedef struct { //端点号 byte endPoint; //那一任务的端点号 byte *task_id; SimpleDescriptionFormat_t *simpleDesc;//简单的端点描述 afNetworkLatencyReq_t latencyReq; } endPointDesc_t;
Page 8
基本概念
Z-stack寻址 向ZIGBEE节点发送数据时,使用AF_DataRequest()函数,该函 数需要一个afAddrType_t类型的目标地址作为参数。 在ZIGBEE协议中,数据包可以单点传送(Unicast) ,多点传送 (multicast)或者广播传送,所以必须有地址模式参数。
Page 12
基本概念
afAddrType_t *dstAddr: typedef struct { union { uint16 shortAddr; //短地址 } addr; //传送模式 afAddrMode_t addrMode; byte endPoint; //端点号 } afAddrType_t;
Page 15
内容摘要
基础知识
无线发送和接收原理 流程
Page 16
Page 17
Zigbee 协议栈串口
Page 18
深圳市讯方通信技术有限公司
讯方学院教学资源部
Page 13
基本概念
SimpleDescriptionFormat_t: typedef struct { byte EndPoint; //EP uint16 AppProfId; //应用规范ID uint16 AppDeviceId; //特定规范ID 的设备类型 byte AppDevVer:4; //特定规范ID 的设备的版本 byte Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4. byte AppNumInClusters; //输入簇ID 的个数 cId_t *pAppInClusterList; //输入簇ID 的列表 byte AppNumOutClusters; //输出簇ID 的个数 cId_t *pAppOutClusterList; //输出簇ID 的列表 } SimpleDescriptionFormat_t;

zigbee无线载波方案

zigbee无线载波方案

Zigbee无线载波方案引言随着物联网技术的发展,无线通信技术的应用越来越广泛。

Zigbee作为一种低功耗、短距离、低数据速率的无线通信技术,被广泛应用于家庭自动化、工业自动化、智能电网等领域。

本文将介绍Zigbee无线载波方案,包括其基本概念、架构、工作原理以及应用。

1. 基本概念1.1 Zigbee技术Zigbee是一种基于IEEE 802.15.4标准的低功耗无线通信技术,专门用于距离较短、数据量较小的应用场景。

它采用了2.4GHz、915MHz或868MHz等频段作为无线载波,具有低功耗、短延迟、低数据速率等特点。

Zigbee技术主要包括网络拓扑、通信协议和应用层协议三个方面。

1.2 无线载波无线载波是指在无线通信中传输数据的载体,它可以是电磁波、声波或其他无线信号。

在Zigbee无线通信中,常用的无线载波包括2.4GHz频段和915MHz频段。

通过调制和解调技术,将数据信号转换成相应的无线载波信号进行传输。

2. 架构Zigbee无线载波方案主要由三个部分组成,分别是节点设备、协调器和网关。

2.1 节点设备节点设备是指使用Zigbee技术的终端设备,例如智能家居中的温度传感器、照明控制器等。

它们通过无线载波与协调器进行通信,实现数据的接收和发送。

2.2 协调器协调器是Zigbee网络中的核心设备,负责组织和管理整个网络。

它可以与多个节点设备进行通信,并实现节点设备间的数据传输。

协调器一般设置为电源供应稳定的设备,具有较高的性能和较大的存储空间。

2.3 网关网关是将Zigbee网络与其他网络(如WiFi、以太网等)连接起来的设备。

它可以实现Zigbee网络与外部网络之间的数据交换,从而实现与外部系统的联动。

3. 工作原理Zigbee无线载波方案的工作原理可以分为网络组建、数据传输和网络管理三个过程。

3.1 网络组建在网络组建过程中,协调器与节点设备之间进行通信,建立起一个Zigbee网络。

zigbee协议栈

zigbee协议栈

zigbee协议栈Zigbee协议栈是一种基于IEEE 802.15.4无线技术的低功耗通信协议,用于构建无线传感器网络和物联网设备。

它由几个层次的协议组成,包括物理层、MAC层、网络层和应用层。

物理层是Zigbee协议栈的最底层,负责无线信号传输和接收。

它定义了无线模块和设备的硬件要求,包括频率、调制方式、传输速率等。

在物理层之上是MAC层,负责网络节点之间的数据传输和管理。

它提供了一系列函数,用于数据包的发送和接收,以及网络节点的寻址和路由。

网络层位于MAC层之上,负责整个网络的拓扑结构和数据路由。

每个节点都有一个唯一的网络地址,用于标识和寻址。

网络层使用路由算法决定最佳的数据传输路径,以确保数据的可靠传输。

最上层是应用层,这是开发人员编写应用程序的层次。

它提供了一系列应用程序程序接口(API),用于数据的发送和接收。

开发人员可以利用这些API实现各种应用程序,如传感器数据采集、远程控制等。

Zigbee协议栈具有以下几个特点。

第一,低功耗。

由于无线传感器网络和物联网设备通常是由电池供电,因此低功耗是一个非常重要的设计考虑。

Zigbee协议栈通过最小化数据传输以及使用睡眠和唤醒机制来实现低功耗。

第二,短距离通信。

Zigbee协议栈的设计目标是用于部署在短距离范围内的网络,通常不超过100米。

这使得它非常适用于家庭自动化、智能电网等场景。

第三,高可靠性。

Zigbee协议栈支持多路径数据传输,以确保数据能够在网络中快速可靠地传输。

此外,它还支持自动路由和包重传机制,以应对网络中节点的故障或丢失。

第四,安全性。

Zigbee协议栈支持数据加密和身份验证功能,确保数据在传输过程中的保密性和完整性。

这对于保护物联网设备和网络免受黑客攻击非常重要。

总的来说,Zigbee协议栈是一种可靠、低功耗、安全的通信协议,适用于构建无线传感器网络和物联网设备。

它的设计目标是满足家庭自动化、智能电网等应用场景中的通信需求。

zigbee实验报告

zigbee实验报告

zigbee实验报告Zigbee实验报告引言无线通信技术的快速发展已经改变了我们的生活方式和工作方式。

随着物联网的兴起,越来越多的设备需要无线通信来实现互联互通。

Zigbee作为一种低功耗、短距离通信的无线技术,被广泛应用于家庭自动化、智能城市和工业控制等领域。

本文将对Zigbee进行实验研究,探讨其在物联网应用中的优势和应用场景。

一、实验背景在开始实验之前,我们需要了解Zigbee的基本原理和特点。

Zigbee是一种基于IEEE 802.15.4标准的无线通信技术,它采用了低功耗、低数据速率和短距离传输的特点。

Zigbee网络由一个协调器和多个终端节点组成,协调器负责网络的管理和控制,终端节点负责数据的传输和接收。

二、实验目的本次实验的主要目的是通过搭建一个简单的Zigbee网络,了解其通信原理和网络拓扑结构。

同时,我们还将探索Zigbee在家庭自动化中的应用,比如智能照明、温度监测等。

三、实验步骤1. 实验器材准备:我们需要准备一台Zigbee协调器、多个Zigbee终端节点、一台电脑和相应的软件开发工具。

2. 网络搭建:首先,我们将协调器和终端节点连接到电脑上,并通过软件开发工具进行配置。

然后,我们按照一定的拓扑结构将终端节点连接到协调器上,形成一个Zigbee网络。

3. 通信测试:在网络搭建完成后,我们可以进行通信测试。

通过发送和接收数据包,我们可以验证网络的可靠性和稳定性。

同时,我们还可以通过改变节点之间的距离和障碍物的影响,来观察Zigbee网络的传输性能。

四、实验结果与分析在实验过程中,我们成功搭建了一个Zigbee网络,并进行了通信测试。

实验结果显示,Zigbee网络具有较高的可靠性和稳定性,即使在节点之间存在一定的障碍物,数据传输的成功率也很高。

此外,我们还观察到Zigbee网络的传输距离较短,适用于室内环境或者小范围的应用场景。

根据实验结果,我们可以得出以下结论:1. Zigbee网络适用于低功耗、短距离传输的应用场景,比如家庭自动化、智能城市等。

zigbee串口通信课程设计

zigbee串口通信课程设计

zigbee串口通信课程设计一、课程目标知识目标:1. 学生能够理解Zigbee无线通信技术的原理及其在串口通信中的应用。

2. 学生能够掌握Zigbee模块的配置和使用,并了解其通信协议。

3. 学生能够了解串口通信的基本概念,包括串行通信接口、波特率、数据位等。

技能目标:1. 学生能够运用Zigbee模块进行串口通信,实现数据的发送和接收。

2. 学生能够通过编程解决串口通信过程中的常见问题,如数据丢失、校验错误等。

3. 学生能够独立完成Zigbee串口通信系统的搭建和调试。

情感态度价值观目标:1. 学生通过学习,培养对无线通信技术的兴趣,提高对物联网领域的好奇心。

2. 学生能够认识到团队协作的重要性,提高沟通能力和解决问题的能力。

3. 学生能够认识到科技发展对社会进步的推动作用,增强对科技创新的热情。

课程性质:本课程为实践性较强的课程,结合课本知识,通过实际操作培养学生的动手能力和解决问题的能力。

学生特点:学生具备基本的电子知识和编程能力,对新技术充满好奇心,喜欢动手实践。

教学要求:教师需提供详细的操作指导,引导学生掌握Zigbee串口通信技术,注重培养学生的实际操作能力和团队协作能力。

在教学过程中,关注学生的个体差异,给予个性化指导。

通过课程学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。

二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地学习和掌握Zigbee 串口通信相关知识。

1. 理论知识:- 串口通信基本原理及接口标准- Zigbee无线通信技术及其特点- 串口通信协议及其配置方法2. 实践操作:- Zigbee模块的安装与配置- 串口通信程序设计及调试- 数据发送与接收功能的实现3. 教学大纲安排:- 第一章:串口通信概述,介绍串口通信的基本原理、接口标准及在物联网中的应用。

- 第二章:Zigbee无线通信技术,讲解Zigbee协议、模块特点及其在串口通信中的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据的发送和接收一、数据的发送在ZStack2006的协议栈中,我们只需调用函数AF_DataRequest()即可完成数据的发送。

afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID, uint8 options,uint8 radius )而我们在使用AF_DataRequest() 函数时只需要了解其参数便可以非常灵活的以各种方式来发送数据。

AF_DataRequest()函数参数说明如下:*dstAddr---------------------发送目的地址、端点地址以及传送模式*srcEP -----------------------源端点cID ---------------------------簇IDlen ---------------------------数据长度*buf -------------------------数据*transID --------------------序列号options ----------------------发送选项radius -----------------------跳数*dstAddr决定了消息发送到那个设备及那个endpoint,而簇ID(cID)决定了设备接收到信息如何处理。

簇可以理解为是一种约定,约定了信息怎么处理。

重要参数说明:1、地址afAddrType_ttypedef struct{union{uint16 shortAddr; //短地址}addr;afAddrMode_taddrMode; //传送模式byteendPoint; //端点号}afAddrType_t;2、端点描述符endPointDesc_ttypedef struct{byteendPoint; //端点号byte*task_id; //那一个任务的端点号SimpleDescriptionFormat_t*simpleDesc;//简单的端点描述afNetworkLatencyReq_tlatencyReq;}endPointDesc_t;3、简单描述符SimpleDescriptionFormat_ttypedef struct{byte EndPoint; //EPuint16 AppProfId; //应用规范IDuint16 AppDeviceId; //特定规范ID 的设备类型byte AppDevVer:4; //特定规范ID 的设备的版本byte Reserved:4; //AF_V1_SUPPORTusesforAppFlags:4.byte AppNumInClusters; //输入簇ID 的个数cId_t *pAppInClusterList; //输入簇ID 的列表byte AppNumOutClusters; //输出簇ID 的个数cId_t *pAppOutClusterList; //输出簇ID 的列表}SimpleDescriptionFormat_t;4、簇ID cIDClusterID--具体应用串ID5、发送选项options发送选项有如下选项#defineAF_FRAGMENTED 0x01#defineAF_ACK_REQUEST 0x10#defineAF_DISCV_ROUTE 0x20#defineAF_EN_SECURITY 0x40#defineAF_SKIP_ROUTING 0x80其中AF_ACK_REQUEST为发送后需要接收方的确认6、半径、条数radius传输跳数或传输半径,默认值为10数据发送模式说明:在协议栈数据发送模式有以下几种:单播、组播、广播和直接发送四种模式。

广播发送广播发送可以分为三种,如果想使用广播发送,则只需将dstAddr->addrMode 设为AddrBroadcast,dstAddr->addr->shortAddr设置为相应的广播类型即可。

具体的定义如下:NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)——数据包将被传送到网络上的所有设备,包括睡眠中的设备。

对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时。

NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)——数据包将被传送到网络上的所有接收机的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。

NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)——数据包发送给所有的路由器,包括协调器。

组播发送如果设备想传输数据到某一组设备,那么只需将dstAddr->addrMode设为AddrGroup,dstAddr->addr->shortAddr设置为相应的组ID 即可。

代码如下://Setupfortheflash command's destinationaddress-Group1SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddrGroup;SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr=SAMPLEAPP_FLASH_GROUP;根据上面代码的配置,然后使用AF_DataRequest()函数来进行组播发送。

单播发送单播发送需要知道目标设备的短地址,需要将dstAddr-> addrMode 设为Addr16Bit,dstAddr->addr->shortAddr设置为目标设备的短地址即可。

代码如下:SampleApp_Flash_DstAddr.addrMode=(afAddrMode_t)afAddr16Bit; SampleApp_Flash_DstAddr.endPoint=SAMPLEAPP_ENDPOINT; SampleApp_Flash_DstAddr.addr.shortAddr=0x00;根据上面代码的配置,然后使用AF_DataRequest()函数来进行点对点发送。

绑定发送绑定发送目标设备可以是一个设备、多个设备、或者一组设备,由绑定表中的绑定信息决定。

绑定发送,需要将dstAddr->addrMode设为AddrNotPresent,dstAddr->addr->shortAddr设置为无效地址0xFFFE。

代码如下:ZDAppNwkAddr.addrMode = AddrNotPresent;ZDAppNwkAddr.addr.shortAddr = 0xFFFE;根据上面代码的配置,然后使用AF_DataRequest()函数来进行绑定发送。

二、数据的接受在Zstack中,如当接收到OTA信息后,将触发SYS_EVENT_MSG事件下的AF_INCOMING_MSG_CMD事件。

我们只需处理AF_INCOMING_MSG_CMD 便可。

数据收发实例:在SampleApp工程中Zstack要周期性的向网络所有设备广发送一个信息,其具体代码如下:程序代码:void SampleApp_SendPeriodicMessage( void ){if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,SAMPLEAPP_PERIODIC_CLUSTERID,1,(uint8*)&SampleAppPeriodicCounter,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) {}else{// Error occurred in request to send.}}在这个函数中调用了函数AF_DataRequest()完成数据的发送,发送地址为SampleApp_Periodic_DstAddr,即SampleApp周期信息地址,该地址为0xFFFF,具体参见SampleApp。

而簇ID为SAMPLEAPP_PERIODIC_CLUSTERID。

在接受端触发了目标设备的AF_INCOMING_MSG_CMD事件。

具体程序代码如下:程序代码:uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ){……case AF_INCOMING_MSG_CMD:SampleApp_MessageMSGCB( MSGpkt )break;……}在对事件AF_INCOMING_MSG_CMD进行处理时,Zstack又调用了函数SampleApp_MessageMSGCB( MSGpkt ),其代码如下:程序代码:void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){uint16 flashTime;switch ( pkt->clusterId ){case SAMPLEAPP_PERIODIC_CLUSTERID:break;case SAMPLEAPP_FLASH_CLUSTERID:flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );break;}}在函数SampleApp_MessageMSGCB( MSGpkt )中会根据接收到信息的簇ID的不同,进行相关的处理,也就是上面提及的簇是一种约定,约定了信息将如何处理。

这个实例中Zstack对周期信息的处理就是什么都没有做,可以根据实际需要用户自己添加相关代码。

说明:在Zstack协议栈中数据的发送函数为AF_DataRequest(),但是在SimpleApp实例中,Zstack调用了函数zb_SendDataRequest ()进行数据的发送,其实在函数zb_SendDataRequest ()中最终还是调用了AF_DataRequest()对数据进行的发送。

相关文档
最新文档