【ZigBee】协调器广播&终端节点单播

  • 实验简介
  • 实验环境
  • 实验准备
    • 1.下载基本工程文件
    • 2.打开工程文件
    • 3.尝试编译
  • 协调器
  • 查看完整原文

实验简介

任务6:

协调器周期性以广播的形式向终端节点发送数据(每隔5s广播一次),终端节点接收数据后,使开发板上的LED灯状态翻转,
同时向协调器发送字符串“EndDevice1 received!”(按组网节点数编号),协调器收到终端节点发回的数据后,通过串口输出到PC机,用户可以通过串口调试助手查看该信息。

实验环境

  • Win10 1909
  • IAR 10.30
  • Z-Stack
  • VScode

实验准备

1.下载基本工程文件

首先下载最基本的工程文件,我们在这个的基础上进行代码修改。

  • 下载地址:https://www.lanzous.com/i7j1gtc
  • 密码:1024

2.打开工程文件

解压你第一步下载的基本工程的压缩包,路径是“…\Texas Instruments\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Samples\GenericApp\CC2530DB”文件夹下的GenericApp.eww

双击使用最新版IAR打开它。刚打开的时候IAR会多次提示你版本不兼容信息,不必理会,直接一路点击Ok就行。

3.尝试编译

上一步完成后,先不改动任何地方。直接点击rebuild图标或者按下F7。也就是下图的箭头指向的图标。

先看是否报错。如果报错,先参考这里【IAR-10.30.1】最新版本IAR常见编译问题总结。

按照这篇博客的方法解决问题即可。

协调器

协调器要做的事情只有三个,一个是广播消息,另一个是如果收到终端节点的消息就把消息打印到串口,第三就是同时翻转LED状态。

我们来理清一下思路:当协调器组件网络后就开始发送广播消息。那么我们就在GenericApp_ProcessEvent() 函数里添加ZDO_STATE_CHANGE的case即可。在那个case里我们需要闪烁一个LED,同时设置一个5秒的定时把SEND_TO_ALL_EVENT事件写到任务列表。

UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events )
{afIncomingMSGPacket_t *MSGpkt; //MSGpkt用于指向接收消息结构体的指针if ( events & SYS_EVENT_MSG ){//osal_msg_receive()从消息队列上接收消息MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt ){switch ( MSGpkt->hdr.event ){case AF_INCOMING_MSG_CMD:HalLedSet(HAL_LED_2,HAL_LED_MODE_OFF);HalLedBlink(HAL_LED_1,0,50,500);GenericApp_MessageMSGCB( MSGpkt );break;case ZDO_STATE_CHANGE:  //建网后GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_NwkState==DEV_ZB_COORD){HalLedBlink(HAL_LED_2,0,50,500);    //LED2 闪烁 osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);}break;default:break;}// Release the memoryosal_msg_deallocate( (uint8 *)MSGpkt );//接收到的消息处理完后,释放消息所占的存储空间// NextMSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}if(events&SEND_TO_ALL_EVENT)//数据发送事件{GenericApp_SendTheMessage();//每隔5s 向终端节点发送数据函数osal_start_timerEx(GenericApp_TaskID,SEND_TO_ALL_EVENT,5000);return (events^SEND_TO_ALL_EVENT);    }// Discard unknown eventsreturn 0;
}

假定协调器发来消息,那么就去了AF_INCOMING_MSG_CMD这个case里,在那里我们需要把LED状态翻转,并通过串口输出到PC,我们可以通过串口调试助手查看该信息。

提示;上面的图片是我使用的其他图床,不是csdn的。如果图片查看不了,请移步到我的博客查看。地址是:https://stefancharles.xyz/

查看完整原文

这里不提供全文。需要全文查看请移步我的自搭建博客

Stefan的博客

本文地址在这里

协调器周期性以广播的形式向终端节点发送数据(每隔5s广播一次),终端节点接收数据后,使开发板上的LED灯状态翻转, 同时向协调器发送字符串“EndDevice1 received!”(按组网节点数编号相关推荐

  1. STM32F103C8T6核心开发板下,采用串口DMA方式向上位机连续发送数据的实例详解

    STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 文章目录 STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据 前言 一.DMA应用初步 ...

  2. 使用esp8266 wifi芯片和DFRduino开发板(Arduino也可以),向自己的服务器发送请求(尽可能详细的说明)

    研究过嵌入式方面的人都应该了解 esp8266 wifi芯片,前段时间接触一个小竞赛,需要一块传输数据给服务器的模块,毫不犹豫选择了esp8266,可能是自己孤陋寡闻吧...  进入正题 1. 开发环 ...

  3. 【平头哥RVB2601开发板试用体验】AT解析器和通过w800 AT命令接入阿里云生活物联网平台

    作者:niu 在RVB2601开发板上,CH2601主芯片通过SPI接口和W800 WIFi/BLE模块通信,W800芯片在此接口上提供AT命令的方式供主芯片使用W800的功能. 根据<W800 ...

  4. Linux开发板怎么用madplay,Linux中madplay 音乐播放器移植步骤

    madplay 音乐播放器移植步骤 madplay版本: madplay-0.15.2 交叉编译器版本: arm-linux-gcc 3.4.1 操作系统平台: Linux -- Red Hat 9. ...

  5. 痞子衡嵌入式:飞思卡尔Kinetis开发板OpenSDA调试器那些事(上)- 背景与架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis MCU开发板板载OpenSDA调试器(上篇). 众所周知,嵌入式软件开发几乎离不开调试器,因为写一个稍有代码规模 ...

  6. 基于Basys2开发板的简易电子琴和音乐播放器设计

    背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...

  7. Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/119991329 长期持续带来更多项目与技术分享,咨询请 ...

  8. 使用外部调试器仿真LPC845-BRK开发板

    NXP这款新的LPC845-BRK开发板的一个好处就是它可以与任何标准的SWD / JTAG调试器一起使用,因为它板载了一个10针的调试插头.默认情况下没有焊接,因为LPC845-BRK开发板已包含了 ...

  9. arduino向串口发送数据时掉包_[技术]清楚简单,一种串口触摸屏的开发流程和方法介绍...

    1.什么是串口触摸屏 触摸屏是工业控制上很常见的人机交互部件,很多设备.系统都在使用它,它至少有两个功能:显示,触摸控制. 串口触摸屏是采用串行数据通信协议进行数据交换的触摸屏,具有简单.可靠.易于操 ...

  10. 网络——在网络上发送,接收数据

    问题 创建并加入一个网络会话是一回事,但如果不能发送或接收任何数据那么网络会话有什么用呢? 解决方案 当玩家连接到会话时,你可以在一个PacketWriter流中存储所有想要发送的数据.完成这个操作后 ...

最新文章

  1. 矩阵相乘原理与C实现(实矩阵)
  2. PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重
  3. mysql的extract_mysql中json_extract函数的使用?作用是什么?
  4. 如何快速获取properties中的配置属性值
  5. Ubuntu 18.4 镜像
  6. Julia 语言可重用性高竟源于缺陷和不完美?
  7. 第12章 正则表达式与文件格式化处理
  8. shell 传递参数
  9. Atitit图像识别的常用特征大总结attilax大总结
  10. BZOJ1812: [Ioi2005]riv(树形dp)
  11. 磁共振中的T1, T2 和 T2*的原理和区别
  12. Python:实现zellers congruence泽勒一致算法(附完整源码)
  13. 电脑ppt录制微课软件哪个好 电脑ppt录制微课的方法
  14. 如何顺利接手一个中途的项目
  15. s:if test标签出错,内容不显示
  16. matlab筛选excel数据统计,#excel筛选数据#如何用excel表格中的数据制图
  17. suma服务器 硬盘安装,[Server] HP DL380 G6更新esxi6.0 SATA 硬盘掉线问题
  18. 关于Autodesk软件安装问题
  19. Arcmap转nc文件为TIFF格式(以逐月降水量数据集转年均数据为例)
  20. HPE DL380 Gen10 服务器远程升级ESXi6.0到ESXi6.7

热门文章

  1. 如何设置word的有效期
  2. 敏捷项目管理术语大全
  3. python中字符串以什么结尾_python判断字符串以什么结尾的实例方法
  4. 【数据仓库与OLAP技术】期末复习+考题
  5. 小程序中的image标签
  6. 5G和4G有那些区别
  7. 新安装的Eclipse,出现英文乱码,标题窗口英文乱码,打开的Java类窗口显示名称出现乱码
  8. python中复选框取消修改_Python tkinter复选框双重检查/取消选中(Python tkinter Checkboxes double check/uncheck)...
  9. dlna android播放器,dlna音乐播放器app
  10. 虚拟光驱传文件到服务器,虚拟光驱服务器