Z-stack协议栈简单知识:

IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee 联盟定义了 NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范ZigBee 协议栈就是将各个层定义的协 议都集合在一起 ,以函数的形式实现,并供给用户提供 API( 应用层) ,用户可以直接调用。

用zigbee协议栈使用协调器和节点之间传输数据实验:

在ZZApp.c中对协调器和节点初始化设置

         case ZDO_STATE_CHANGE:ZZApp_NwkState = (devStates_t)(MSGpkt->hdr.status);//          if ( (ZZApp_NwkState == DEV_ZB_COORD)//              || (ZZApp_NwkState == DEV_ROUTER)//              || (ZZApp_NwkState == DEV_END_DEVICE) )//          {//            // Start sending "the" message in a regular interval.//            osal_start_timerEx( ZZApp_TaskID,//                                ZZApp_SEND_MSG_EVT,
//                              ZZApp_SEND_MSG_TIMEOUT );
//          }if (ZZApp_NwkState == DEV_ZB_COORD){LCD_Init();                     LCD_CLS();LCD_P8x16Str(4, 0, "COORD");//D1 P1_0P1SEL &= ~0x01;P1DIR |= 0x01;//D2 P1_1P1SEL &= ~0x02;P1DIR |= 0x02;//D3 P0_4P0SEL &= ~0x10;P0DIR |= 0x10;//P1_0 = 1;P1_1 = 1;P0_4 = 0;}if (ZZApp_NwkState == DEV_END_DEVICE){LCD_Init();                     LCD_CLS();LCD_P8x16Str(4, 0, "END");//D1 P1_0P1SEL &= ~0x01;P1DIR |= 0x01;//D2 P1_1P1SEL &= ~0x02;P1DIR |= 0x02;//D3 P0_4P0SEL &= ~0x10;P0DIR |= 0x10;//P1_0 = 1;P1_1 = 1;P0_4 = 0;}break;}

导入入按键中断源文件

 #include<iocc2530.h>#include "ZZApp.h"extern unsigned char ZZApp_TaskID;#include "OSAL_Timers.h"void KeysIntCfg(){P0SEL &=~0X02;P0DIR &=~0X02;IEN1|=0x20;P0IEN|=0x02;PICTL|=0x01;//设置P0_1为下降沿P2SEL &=~0X01;P2DIR &=~0X01;IEN2|=0x02;P2IEN|=0x01;PICTL|=0x08;//设置P2_0为下降沿EA=1;      //开总中断
}
#pragma vector=P0INT_VECTOR
__interrupt void Key3_ISR() //P0_1
{if(P0IFG & 0X02){         osal_start_timerEx(ZZApp_TaskID,ZZApp_MY_EVT,25);}P0IFG =0;P0IF=0;
}
#pragma vector=P2INT_VECTOR
__interrupt void Key4_ISR()//P2_0
{if(P2IFG & 0X01){ osal_start_timerEx(ZZApp_TaskID,ZZApp_MY_EVT,25);}P2IFG =0;P2IF=0;
}

导入按键中断的头文件

 #ifndef ZH_KEY_H#define ZH_KEY_Hvoid KeysIntCfg();#endif

Zmain.c中声明按键中断头文件

 #include "ZZ_Key.h"

Zmain.c中初始化按键中断配置

 KeysIntCfg();

光这样还不行,zigbee协议栈中默认初始化了P0和P2口的中断,就和我们定义的中断产生了冲突,因此要先把默认初始化给注释掉才可以正常使用(HAL/Target/CC2530EB/Drivers/hal_key.c)

导入OLED的库文件和头文件,因为OLED的型号不同,这里就不贴了,以免产生误导

发送端(节点):

ZZApp.h中定义事件

 #define ZZApp_MY_EVT 0x0002

ZZApp.c中应用事件

   if ( events & ZZApp_MY_EVT ){if(P0_1 == 0)//S1按键按下{char theMessageData[] = "HELLO WORLD!";ZZApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;ZZApp_DstAddr.addr.shortAddr = 0x0000;//接受端地址,协调器默认是0x0000// Take the first endpoint, Can be changed to search through endpointsZZApp_DstAddr.endPoint = 1;//接受端的端口AF_DataRequest( &ZZApp_DstAddr, &ZZApp_epDesc,0x0001,//接受端的簇(byte)osal_strlen( theMessageData ) + 1,//发送字符串的长度(byte *)&theMessageData,&ZZApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );P1_0 = ~P1_0;//D1灯取反表示数据已发送}if(P2_0 == 0)//S2按键按下{char theMessageData[] = "hello world!";ZZApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;ZZApp_DstAddr.addr.shortAddr = 0x0000;//接受端地址,协调器默认是0x0000// Take the first endpoint, Can be changed to search through eddpointsZZApp_DstAddr.endPoint = 2;//接受端的端口AF_DataRequest( &ZZApp_DstAddr, &ZZApp_epDesc,0x0001,//接受端的簇(byte)osal_strlen( theMessageData ) + 1,//发送字符串的长度(byte *)&theMessageData,&ZZApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );P1_1 = ~P1_1;//D2灯取反表示数据已发送}return (events ^ ZZApp_MY_EVT);}

接收端(协调器):

ZZApp.c中定义端点1和端点2

   // Fill out the endpoint description.ZZApp_epDesc.endPoint = 1,//ZZApp_ENDPOINT;ZZApp_epDesc.task_id = &ZZApp_TaskID;ZZApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&ZZApp_SimpleDesc;ZZApp_epDesc.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &ZZApp_epDesc );// Fill out the endpoint description.ZZApp_epDesc1.endPoint = 2,//ZZApp_ENDPOINT;ZZApp_epDesc1.task_id = &ZZApp_TaskID;ZZApp_epDesc1.simpleDesc= (SimpleDescriptionFormat_t *)&ZZApp_SimpleDesc;ZZApp_epDesc1.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &ZZApp_epDesc1 );

ZZApp.c中编写接收函数

 void ZZApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ){//  switch ( pkt->clusterId )//  {//    case ZZApp_CLUSTERID://      // "the" message//#if defined( LCD_SUPPORTED )//      HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );//#elif defined( WIN32 )
//      WPRINTSTR( pkt->cmd.Data );
//#endif
//      break;
//  }if(pkt->endPoint==1){switch(pkt->clusterId){case 0x0001:LCD_P8x16Str(8, 2, pkt->cmd.Data);//D1  P1_0P1SEL &= ~0x01;P1DIR |= 0x01;P1_0 = ~P1_0;break;}}if(pkt->endPoint==2){switch(pkt->clusterId){case 0x0001:LCD_P8x16Str(8, 2, pkt->cmd.Data);//D2 P1_1P1SEL &= ~0x02;P1DIR |= 0x02;P1_1 = ~P1_1;break;}}
}

现象:

协调器显示COORD表示已创建协调器网络

节点显示END表示已加入协调器创建的网络

节点按键S1按下时出现大写HELLO WORLD!

节点按键S2按下时出现小写hello world!

Zigbee协议栈单播收发字符字符串相关推荐

  1. CC2530下ZigBee协议栈中添加BH1750数字光照传感器

    项目里需要获得光照强度,之前用的是光敏电阻,但是光敏电阻实在不精确,换用BH1750数字光照传感器.网上购买后,送的资料都是单片机的,移植到ZigBee协议栈里面,时序有些问题,在网上找的一些资料,很 ...

  2. zigbee协议栈初使用(五)点播无线通讯

    zigbee协议栈初使用(五)点播无线通讯 点播:点对点通讯,即两个设备间通讯,不容许第三个设备接收数据信息. 在AF.h中 有如下定义 typedef enum {afAddrNotPresent ...

  3. ZIGBEE通讯-7.ZigBee协议栈简介

    想要学习协议栈,必须先知道协议是什么.协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发,而协议栈是协议的具体实现形式,通俗的理解为用代码实现的函数库,以便于开发人员调用. ...

  4. ZStack通信(Zigbee协议栈通信)

    ZStack通信-Zigbee协议栈通信 一.注册端点 二.发送数据函数 三.接收数据 一.注册端点 应用都是建立在端点ZDO(Zigbee Device Object)之上的, 所以要实现通信首先要 ...

  5. CC2530 ZigBee协议栈 学习心得

    最近一直在学习研究cc2530这款单片机,感觉自己的C语言水平还是不够有得提升的空间,但还是有不少收获.    CC2530是一款支持ZigBee无线组网协议的低功耗单片机,cc2530主要的应用场景 ...

  6. zigbee协议栈学习(二)

    协议栈规范的 ID号可以通过查询设备发送的 beacon 帧获得.在设备加入网络之前,首先 需要确认协议栈规范的 ID."特定网络"规范 ID号为0: ZigBee协议栈规范的 I ...

  7. c-style字符字符串_C字符串-能力问题与解答

    c-style字符字符串 C programming String Aptitude Questions and Answers: In this section you will find C Ap ...

  8. Java字符字符串类

    Java字符字符串类 Character 类 Character 类用于对单个字符进行操作.Character 类在对象中包装一个基本类型 char 的值在实际开发过程中,我们经常会遇到需要使用对象, ...

  9. C语言 数字与字符/字符串的相互转换

    C语言 数字与字符/字符串转换 数字转字符 ASCII码操作 只能将数字转为字符,方法为将要转换的数字直接加上数字0的ASCII码,如9转换为9 + '0' 数字转字符串 itoa函数 itoa函数不 ...

最新文章

  1. Ubuntu 安装软件的三种方式
  2. 掌握这些 Redis 技巧,百亿数据量不在话下!
  3. datetimepicker 时间不更新_iOS 14.2 正式版推送:新增人体检测,这些功能值得更新...
  4. data.frame 转化为数值型_DataFrame(3):DataFrame的创建方式
  5. MFC之COleVariant类
  6. 探索Julia(part14)--学生得分描述性统计案例
  7. 第7步 mybatis-generator dao层生成器
  8. Linux下main函数启动过程【程序员自我修养笔记】【自用】
  9. 电子助力方向机控制模块_17款路虎揽胜:偶发性电子助力失效
  10. 软件工程-构建之法 团队
  11. [转载] numpy.minimum
  12. Win10开启Linux调试adb(从此告别虚拟机)
  13. 方维P2P添加富友金账户接口实例
  14. 阿里云发生故障,网友炸了,官方回应道歉。对此事你怎么看?
  15. 2020 EBC徒步功课做好 好好工作心态
  16. Android开发项目--跑腿APP-跑儿
  17. 简单易用的Python爬虫,批量下载P站照片
  18. 【海神】各种工作特色比照和介绍
  19. php云盘实现上传下载,文件上传功能-PHP通过数据库实现在线网盘管理文件上传下载-PHP中文网教程...
  20. 计算机专业中的一些术语

热门文章

  1. Chrome| 汇总
  2. 纯 js 实现上传文件支持拖拽
  3. wordcloud词云图(python)
  4. 开源! ROS2阿克曼开发平台方案
  5. OpenGL ES之glRotatef旋转详解
  6. 计算机毕业设计(15)python毕设作品之校园教室图书馆座位预约系统
  7. golang安装protobuf 2022最新安装教程(windows)
  8. tensorflow分类任务——TFRecord制作自己的数据集
  9. 更改repo的python版本
  10. Python基础五 字典(dic)