注意:以下所有内容均以TI公司的CC2530和Z-Stack为硬软件平台为实验背景讲述。

在一般的ZigBee教程中,子节点如何向协调器发送消息已经被描述的非常清楚了:即子节点直接使用API向地址为0x0000的协调器发送消息即可。用到的函数如下:

afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID,uint8 options, uint8 radius )

其中第一个参数dstAddr即为目标节点的地址。例如做一个点对点的通信,向协调器发数据,则dstAddr应该这样实例化:

afAddrType_t Point_To_Point_DstAddr;//点对点通信
Point_To_Point_DstAddr.addrMode = (afAddrMode_t)afAddr16Bit;//点播
Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
Point_To_Point_DstAddr.addr.shortAddr = 0x0000;//发送给协调器,0x0000是协调器的地址

要使协调器向子节点发送数据,只需要知道子节点的地址即可。在许多深入讲解ZigBee通信协议的书中,对ZigBee网络节点的地址分配机制都做了详细的介绍,依据一些公式和描述该网络拓扑结构的参数可以计算出每个节点的地址。这也就似乎意味着如果一个网络拓扑结构固定的ZigBee网络,则其节点的地址也是固定的,大可以通过事先计算将节点地址算出来,再进行通信,则就没有一点问题。但是在项目开发阶段,我们很难做到这一点:固定拓扑结构。而且这需要修改ZigBee协议栈中关于网络拓扑结构类型的预先定义。所以,比较可靠的方法是:当ZigBee子节点加入网络后的第一时间,即向协调器发送一条消息,告诉协调器它的地址及认为给它加上的编号。这样,在协调器端,则会形成一个编号和短地址的对应表,协调器根据这张表向相应的子节点发送数据。
具体实现过程可以是这样的:
在子节点端,在SampleApp_ProcessEvent函数中,处理节点网络状态改变的分支中,可以开启一个定时器,在处理定时器计时完成的代码中向协调器发送该节点的短地址。

 case ZDO_STATE_CHANGE:SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status);if ( (SampleApp_NwkState == DEV_ZB_COORD)|| (SampleApp_NwkState == DEV_ROUTER)|| (SampleApp_NwkState == DEV_END_DEVICE)//|| (SampleApp_NwkState == DEV_NWK_DISC)  ){            // Start sending the periodic message in a regular        interval.osal_start_timerEx( SampleApp_TaskID,SEND_ADDR_MSG_EVT,SEND_ADDR_STEP_TIMEOUT);}else{// Device is no longer in the network}break;

在处理SEND_ADDR_MSG_EVT事件中,可以这样做:

if (events & SEND_ADDR_MSG_EVT){HalUARTWrite(0,"开始发送",4);if (AF_DataRequest( &Point_To_Point_DstAddr, &SampleApp_epDesc,SAMPLEAPP_POINT_TO_POINT_CLUSTERID,4,sendAddr,&SampleApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS){HalUARTWrite(0,"成功发送",4);}else {HalUARTWrite(0,"发送失败",4);}

其中sendAddr为一个uint8类型的数组,存储了该节点的编号(人为编号)。这样,当协调器收到这个数据包时,即可以知道这个节点的短地址(数据包中自带)和编号(来自数据包中的数据体)。
这样,在协调器端,就知道了这个节点的短地址,接下来利用这个短地址就可以向这个节点发送数据了。

ZigBee中协调器如何向子节点发消息?相关推荐

  1. ZigBee协调器向子节点发消息

      在一般的ZigBee教程中,子节点如何向协调器发送消息已经被描述得非常清楚了,即子节点直接使用API向地址为0x0000的协调器发送消息即可.用到的函数如下: afStatus_t AF_Data ...

  2. Zigbee协调器主动使终端节点退网

    我使用ZDP_MgmtLeaveReq()这个函数来让已知短地址的终端退网,代码如下:我这样使用的结果是,可以将节点退网,节点上也需要做一些配置.我在函数里禁止节点重连,但是节点退网后会获取到新的短地 ...

  3. tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners

    TensorFlow的Session对象是支持多线程的,可以在同一个会话(Session)中创建多个线程,并行执行.在Session中的所有线程都必须能被同步终止,异常必须能被正确捕获并报告,会话终止 ...

  4. mesh 协调器 路由器_关于Mesh网络中,协调器和路由器之间的几个问题?

    1,由于我所搭建的整个网络是Mesh网络,不牵涉到低功耗的情况,所以网络中只有两种类型的设备:协调器和路由器即:1个协调器+N个路由器 2,为了防止协调器在掉电的情况下路由器去维持整个网络,这样协调器 ...

  5. zigbee-无线点灯-协调器节点

    开发环境:IAR 8.10 Z-stack 2.5 功能:协调器与终端节点组网,实现点对点通信.终端向协调器发送"D1",协调器LED灯闪烁. 流程图: 具体代码: 定义所需要的变 ...

  6. JS中event.target事件委派遇到多重子节点的元素导致子节点遮挡父节点事件的解决方法

    1.问题描述 事件委派在重复给多个子节点添加相同方法时或者即时添加子节点时很优秀,但如果子节点中还含有自己的子节点,就会发生遮挡. 2.问题分析 event.target会找到使绑定节点执行该事件的触 ...

  7. ZigBee中的技术问题以及解决方案

    1.组网后,怎样获取新加入的Endpoint的地址? 答:     现在有一个最常见的场景,我有一个100个节点的网络同时发送数据给协调器,我很想知道那个地址对应那个节点.其实楼上的就想知道那个,以前 ...

  8. JavaScript基础12-day14【DOM查询(获取元素节点、获取元素节点的子节点)、全选练习、DOM增删改、DOM添加删除记录、Window对象方法】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  9. echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解

    1 设备树(device tree)简介DTSpec定义一个devicetree的约束来描述硬件设备,boot引导程序将设备树传递给用户程序的内存空间中,并传递给用户相应设备树的指针.设备树为一个树形 ...

  10. php查找文件内元素,如何查看当前文档某个元素的子节点?有几种方法

    本篇文章给大家带来的内容是关于如何查看当前文档某个元素的子节点?有几种方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 源代码: Hello 方式一://直接在html文档中嵌入j ...

最新文章

  1. Window 2000 网络操作命令全释
  2. hibernate多对多映射拆成2个一对多映射(注解)
  3. insertion Sort List (链表的插入排序) leecode java
  4. PMCAFF微课堂|前codefollow运营女神:深剖女性社群电商的心理需求和特征
  5. Utility Manager 的一些百度不了的操作
  6. springboot打war包汇总
  7. 关于Unity中的Mesh Collider碰撞器
  8. JavaScript笔记-使用反引号格式化字符串
  9. 前端JS笔试面试题目
  10. 服务器系统怎么写,服务器操作系统语言写的
  11. html5的q标签,HTML 5 q 标签 - HTML 参考手册
  12. JAVA 多用户商城系统b2b2c- 服务消费者(rest+ribbon)
  13. word修改或删除脚注或尾注分隔符
  14. cordova media插件
  15. matplotlib显示宋体和Times New Roman
  16. 跳马周游c++_c++广搜法跳马问题(队列)
  17. 认真的雪歌词的c语言编码,薛之谦《认真的雪》歌词
  18. linux系统制作qcow2,centos7.6下qcow2镜像制作方法
  19. iOS开发之AVPlayer的精彩使用---网易新闻视频播放界面的另类实现
  20. Linux服务器下搭建SFTP服务

热门文章

  1. j和jk是有区别的_科普向,大家都说jk,jk是什么意思呢?
  2. 【杂谈】为了子孙后代,请不要逃离大城市或者龟缩在三四线小城市
  3. PS的30个实用技巧大全
  4. IDM 扩展安装版本冲突解决(Chrome尝试对扩展程序进行降级处理)
  5. word文档怎样删除最后一页空白页
  6. HTML5 webSQL动态查询应用截图
  7. Tableau计算同比和环比任意天数据
  8. 全自动微信淘宝客推广赚钱方式大揭秘
  9. 根据输入数字显示对应的英文星期名称缩写
  10. 【论文解读 KDD 2018 | HEER】Easing Embedding Learning by Comprehensive Transcription of HIN