开发环境:IAR 8.10 Z-stack 2.5
功能:协调器与终端节点组网,实现点对点通信。终端向协调器发送“D1”,协调器LED灯闪烁。
流程图:

具体代码:

  1. 定义所需要的变量
  • 端点描述符
endPointDesc_t GenericApp_epDesc;
  • 任务ID,应用层的优先级
byte GenericApp_TaskID;
  • 定义简单端点描述符

SimpleDescriptionFormat_t 是一个结构体,我们可以具体分析一下,这里是它的定义:

const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{GENERICAPP_ENDPOINT,              //端口号GENERICAPP_PROFID,                //Profile的IDGENERICAPP_DEVICEID,              //设备IDGENERICAPP_DEVICE_VERSION,        //设备版本号,只占前四位GENERICAPP_FLAGS,                 //预留位,只占前四位GENERICAPP_MAX_CLUSTERS,         //输入命令数(cId_t *)GenericApp_ClusterList,  //输入命令地址0,                                //输出命令数(cId_t *)NULL                   //输出命令地址
};

由于在本次实验中协调器节点角度(被命令的一方)所以要求是输入命令

  • 定义输入命令集列表
const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
{GENERICAPP_CLUSTERID    //命令号
};
  1. 重新定义一些函数
  • 初始化函数 void GenericApp_Init( byte task_id )
    在这个函数里只做了三件事 保存系统分配的任务ID、填充端口描述符和注册端点描述符
//任务初始化函数, 系统初始化时会被调用
void GenericApp_Init( byte task_id )
{GenericApp_TaskID = task_id;  // Fill out the endpoint description.//填充端点描述符GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id = &GenericApp_TaskID;GenericApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq = noLatencyReqs;   //这个是固定的,不需要修改// Register the endpoint description with the AF//注册端点描述符, 如果没有,不能使用OSAL提供的服务afRegister( &GenericApp_epDesc );
}
  • 任务处理函数 UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
//应用层事件函数,系统自动调用
UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
{afIncomingMSGPacket_t *MSGpkt;   //消息包指针if ( events & SYS_EVENT_MSG )    //判断是否是系统事件{//从消息队列中读取(接收)当前任务的消息MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt )  //循环处理消息{switch ( MSGpkt->hdr.event ){AF_INCOMING_MSG_CMD是用来不同设备之间通讯的原语,目的是用来收到报文时的处理case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB( MSGpkt );break;default:break;}// Release the memoryosal_msg_deallocate( (uint8 *)MSGpkt );// Next  再次读取当前任务的消息MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}//用户事件// Discard unknown eventsreturn 0;
}
{afIncomingMSGPacket_t *MSGpkt;   //消息包指针if ( events & SYS_EVENT_MSG )    //判断是否是系统事件{//从消息队列中读取(接收)当前任务的消息MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt )  //循环处理消息{switch ( MSGpkt->hdr.event ){case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB( MSGpkt );break;default:break;}// Release the memoryosal_msg_deallocate( (uint8 *)MSGpkt );// Next  再次读取当前任务的消息MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}//用户事件// Discard unknown eventsreturn 0;
}
  • 接收到射频消息处理函数(回调函数)
//接收到射频消息处理函数(回调函数)
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{uint8 buffer[10];switch ( pkt->clusterId )  //得到命令号{case GENERICAPP_CLUSTERID:    //终端节点的消息osal_memcpy(buffer, pkt->cmd.Data, 2);if(buffer[0] == 'D' && buffer[1] == '1')  //判断消息是否是D1{//接收到了"D1"//LED1闪烁HalLedBlink(HAL_LED_1, 0, 50, 1000);}break;default:break;}
}

Coordinator.h

#ifndef COORDINATOR_H_
#define COORDINATOR_H_#define GENERICAPP_MAX_CLUSTERS 1    //输入簇的个数#define GENERICAPP_CLUSTERID 0001 //输入簇的ID#define GENERICAPP_ENDPOINT     10            //端点ID
#define GENERICAPP_PROFID       0x0F04       //规约ID
#define GENERICAPP_DEVICEID     0x0001       //设备ID
#define GENERICAPP_DEVICE_VERSION   0       //版本号
#define GENERICAPP_FLAGS            0       //保留位UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events );
void GenericApp_Init( byte task_id );#endif

注意:

  1. 函数名必须和OSAL_Genericapp.c里面一致,要修改初始化函数名和事件处理函数名必须也要修改OSAL_Genericapp.c里面的相应的函数名。

本文是看里B站视频做的笔记,这里是链接:https://www.bilibili.com/video/av54057090?p=22

zigbee-无线点灯-协调器节点相关推荐

  1. Zigbee应用开发 协调器控制多个终端

    协调器控制多个终端 功能要求: 协调器通过串口向终端发送控制命令 发送1 则终端1 的D8灯亮 发送 2 则 终端2 的灯亮 发送 0 则 俩个终端都灭 实现过程: 当网络状态发生改变时,通过串口打印 ...

  2. ZigBee无线点灯示例

      light_switch.c代码详解:无论你看哪个实验的代码,首先要找的就是main函数: void main ( void ) {uint8 appMode = NONE; /* 不设置模块的模 ...

  3. Zigbee无线网络在线心电监测系统

    在我国,随着计算机网络和通信技术的不断发展,基于固定电话网.卫星电话以及Internet等远程心电监护系统相继出现,在目前的情况下,无线通信网络在传输方面已经具有很高的可靠性,使得基于无线网络的心电监 ...

  4. ZigBee无线传感网络家庭自动化设计

    0 引言 近年来,智能家居这一概念随着物联网新技术的推动,逐渐走入人们的视野,市场需求发展空间巨大.这类新技术包括以ZigBee数传为代表的无线传感器网络,在此次智能家居系统里面将看到ZigBee数传 ...

  5. mesh 协调器 路由器_路由器和终端设备组成的简单zigbee网状网络

    ZigBee mesh 结构 图 1 描述了常见的网络拓扑类型, 即. 星, 树和网. 该图显示了 zigbee 元素 (例如协调器, 路由器和终端设备)如何在这些不同的网络拓扑类型中连接. 通常在网 ...

  6. 读取cc2530节点的设备类型、协调器、路由器、终端。

    建立网络.加入网络流程分析 协调器节点:在1-10  实验8 网络通信实验2 组播通信中 while(MSGpkt) { switch(MSGpkt->hdr.event) { case ZDO ...

  7. zigbee协议与开发-ZStack中之协调器数据包解析

    这几天在读书,边读边分析TI Sniffer抓到的包,这个对包结构的分析对协议工作过程很重要. 结果记录如下:首先我只启动一个Collector,即路由节点,开机后,TI Packet Sniffer ...

  8. mesh 协调器 路由器_关于zigbee协调器(单播方式)传输数据给网络中的多个路由器丢失数据包的问题?...

    问题描述:建立一个mesh网络,网络中只存在协调器和路由器节点,并不存在Endevice终端节点.整个网络大概存在20多个路由节点,一个协调器. 路由器节点和协调器都加入和NV存储,所以路由节点掉电后 ...

  9. ZigBee无线DCS现场控制站设计

    0 引 言 DCS(集散控制系统)综合了计算机.自动控制.通信等技术,具有大规模数据处理.信息管理及较强数据通信能力等特点而成为目前主导的自动化控制系统.目前,DCS 系统在过程控制级与控制管理级之间 ...

最新文章

  1. 皖西学院微型计算机原理期末试卷,皖西学院 电气微机原理试卷A
  2. XP+UBUNTU双系统上重装XP后修复GRUB方法
  3. 用shell脚本实现MongoDB数据库自动备份
  4. Swift学习字符串、数组、字典
  5. 【深搜】 棋盘 【NOIp普及组 2017 第三题】 (luogu 3956/ssl 2851)
  6. Codeforces Round #485 (Div. 2)
  7. Android中最常用也是最难用的控件——ListView
  8. windows 禁用ipv6服务_Win7电脑禁用ipv6协议的方法是什么?
  9. spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入...
  10. BLOCK_TYPE_US_VALID(pHead-nBlockUse)
  11. 高级维修电工实训装置
  12. POJ2387 ————最短路
  13. 悉尼大学计算机硕士健康科技,悉尼大学健康科学学院
  14. sm专用计算机是啥意思,计算机CPU的主频代表的是什么意思
  15. 【ARCore 入门开发课程系列】ARCore 打造沉浸式体验全过程
  16. 云服务优缺点_云服务是什么,它有哪些优缺点?
  17. oreo另一个意思_孑孓、仄亾、片爿…看起来天生一对的字,意思竟然大不同
  18. java 打印菱形和空心菱形
  19. 多表联查--01---LEFT JOIN 实现多表联查
  20. 战地之王大逃杀手机吃鸡

热门文章

  1. android 苹果支付,谷歌Android M借鉴苹果?新增移动支付功能Android Pay
  2. Android NFC卡实例详解
  3. 笔记与心得:《人人都是产品经理 V2.0》--概念:提出与筛选
  4. javaweb基于SSH开发医院人事管理系统+论文+PPT 课程设计 毕业设计源码
  5. EMQ2.3 开启wss、映射去掉端口号
  6. node.js服务器代理
  7. mac 界面以及界面浏览器等显示不全
  8. XP sp2安装office2010全过程
  9. win10 使用 toolkit 2.6.4 版,激活office2016 失败
  10. 佳域G3移植优米X1乐蛙ROM稳定版 卡刷包