English | 中文

The article is released under license CC BY-NC-ND 4.0

IoT Boot Camp系列课程是由TorchIoTBootCamp团队发起,广大IoT领域的爱好者共同参与的项目。旨在高效率、高质量地传播IoT领域的相关知识,以促进物与物,人与人,人与信息的连接。
点击这里,观看博主更多有趣视频教程
点击这里,学习更多知识


1. 简介

1.1. 实验内容

Zigbee快速入门——新兵训练营培训的实验环节将涵盖以下四个部分。我们通过这四个部分来向大家逐步展示,如何从零开始构建一个Zigbee应用。

本文档中的实验是“Zigbee快速入门——新兵训练营”系列中的第三部分。

  • 第一部分,由Light构建网络,并使用install code将Switch加入到这个网络。
  • 第二部分,在设备上使用API发送,接收和处理On-Off命令。
  • 第三部分,在Switch端用一个周期事件来执行自定义代码,在我们的实验中是控制LED闪烁。
  • 第四部分,在Switch端使用非易失性存储器来存储自定义数据。

1.2. 目的

在之前的实验“建网入网”和“发送On/Off命令”中,我们学习了如何组建基本的集中式Zigbee网络和入网,以及如何控制网络中的Switch节点向Light节点发送on-off命令。
在本实验中,我们将提供详细的步骤,以演示如何利用Zigbee协议栈的事件机制在Switch节点上设定事件。
下图列出了该动手实验的流程。

注意:实验前,请确保硬件和软件均已准备就绪,可以进行开发。请参阅前两个实验的第二章“基本步骤”,以获取更多详细信息。

2. 事件的使用

Zigbee应用框架及其关联的cluster 代码通过利用Zigbee协议栈事件机制来设定事件,从而可以在指定的时间间隔运行某段代码。对于更上层,事件机制提供了一个集中入口,所有周期性的动作都可以被用户输入、无线指令或者设备初始化来触发或者取消。这个机制使得Zigbee应用框架能够准确的知道下一个周期性动作将在何时触发。对于需要准确知道何时必须醒来以执行某些操作的睡眠设备,或者由于某些事件正在进行而无法休眠的睡眠终端设备,尤为重要。使用Zigbee事件机制的另一个好处是减少了RAM和Flash占用空间。

Zigbee应用框架的事件有两种类型:自定义事件和cluster事件。自定义事件由用户创建,并且可以在应用程序中随意使用。cluster事件由Zigbee应用框架插件中的cluster实现方式决定。

自定义事件包括两部分:事件处理函数(在事件触发时调用)和EmberEventControl结构体(用于设定事件)。Zigbee应用程序框架和AppBuilder提供了一个图形化界面,用于创建自定义事件并将其添加到应用程序中。

步骤1:创建自定义事件
AppBuilder提供了一种向应用程序添加任何自定义事件的方法。
基本来说,需要两点:

  • 事件控制器–事件的结构体
  • 事件处理程序–事件触发函数

打开AppBuilder - > Includes 选项卡。将自定义事件命令ledBlinkingEventControl和回调函数ledBlinkingEventHandler分别添加到 Event Configuration窗口。参见下图。


图2-1 在AppBuilder中添加自定义事件

第2步:启用MainInit回调
事件应当在代码中的某个位置被启用,我们可以在应用程序开始的位置调用相应的函数将其启用。Main Init回调函数将被应用程序的*main()*函数调用,它使应用程序有机会在系统启动时进行所需的任何初始化。可以把它理解为 “ main()”函数里面在while(true) ” 前面的函数。
双击Zigbee_Switch_ZR.isc文件以使用AppBuilder打开它,然后在AppBuilder的“Callbacks”选项卡中启用此回调。参见下图。

图2-2 启用Main Init回调函数

保存并点击”Generate”生成项目。

步骤3:设定事件
如前所述,回调函数emberAfMainInitCallback()应被添加到Zigbee_Switch_ZR_callbacks.c文件中并设定事件。
相关代码段应类似于以下内容。有关如何使用API设定事件的更多信息,请参阅API文档。

// Using-event: Step 3
EmberEventControl ledBlinkingEventControl;void emberAfMainInitCallback(void)
{emberEventControlSetDelayMS(ledBlinkingEventControl, 5000);
}void ledBlinkingEventHandler(void)
{// First thing to do inside a delay event is to disable the event till next usageemberEventControlSetInactive(ledBlinkingEventControl);halToggleLed(1);//Reschedule the event after a delay of 2 secondsemberEventControlSetDelayMS(ledBlinkingEventControl, 2000);
}

需要注意的一点是,应在事件触发函数开始执行后立即将其设置为非活动状态,并在执行完成后重新设定事件。

3. 测试项目

编译应用程序,然后将image烧录到Switch设备。按下WSTK上的Reset(复位)按钮,将会看到板上的LED1在延迟几秒钟后打开,然后以2s的间隔闪烁。

4. 结论

在本实验中,学习了如何创建自定义事件,定义事件函数和事件控制结构体,实现了设定LED闪烁事件的事件函数。

实验3:Zigbee事件处理机制 - 新兵训练营(5)相关推荐

  1. step by step 3000 3_实验3:Zigbee事件处理机制 - 新兵训练营(5)

    English| 中文 The article is released under license [CC BY-NC-ND 4.0] IoT Boot Camp系列课程是由TorchIoTBootC ...

  2. Zigbee预备课程 - 新兵训练营(0)

    English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...

  3. 避免成为新兵训练营毕业生的错误

    So you just finished a coding bootcamp, and you're about to get your career in tech started. 因此,您刚刚完 ...

  4. 实验4:Zigbee使用非易失性存储器来存储自定义数据 - 新兵训练营(6)

    English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...

  5. 实验1:Zigbee的建网和加网 - 新兵训练营(3)

    English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...

  6. 实验2:Zigbee发送灯的开关命令 - 新兵训练营(4)

    English | 中文 The article is released under license CC BY-NC-ND 4.0 IoT Boot Camp系列课程是由TorchIoTBootCa ...

  7. Zigbee 新兵训练营入口

    Zigbee 新兵训练营 The article is released under license CC BY-NC-ND 4.0 The IoT Boot Camp series course i ...

  8. [转载] 新兵训练营系列课程——海量数据存储基础

    原文: http://weibo.com/p/1001643874615465508614 微博平台研发作为微博的底层数据及业务支撑部门,已经经历了5年的发展历程.伴随着从数据及业务暴发式增长,我们在 ...

  9. 新浪微博新兵训练营系列课程——平台RPC框架介绍

    新浪微博新兵训练营系列课程--平台RPC框架介绍 课程大纲 1.RPC简介 1.1 什么是RPC 1.2 RPC与其他远程调用方式比较 2.Motan RPC框架 2.1 RPC服务框架 2.2 Mo ...

最新文章

  1. 最新的INTEL FPGA时序分析资料
  2. 工作108:vue里面wangEdit编辑器使用
  3. C#LeetCode刷题-深度优先搜索
  4. oracle中varchar与varchar2的区别
  5. android ctrl 左键鼠标左键直接打开xml文件夹,设置Android Studio通过Ctrl+左键查看源码...
  6. 机器学习笔记(《统计学习方法》李航and《机器学习》周志华)
  7. WIN7 安装VS2005
  8. 二元logistic模型案例_logistic回归分析案例
  9. 设置桌面上计算机的图标更改,电脑如何修改桌面应用的图标
  10. Visual Odometry技术 (Of VSLAM)
  11. Round 2—算法的复杂度
  12. 【工具】URLEncode
  13. 【历史上的今天】9 月 9 日:C 语言之父诞生;阿里巴巴成立
  14. 中南林业科技大学Java实验报告八:包与接口
  15. Kubeenetes Dashboard admin-kubeconfig
  16. c语言数组文曲星猜数游戏编程,关于文曲星上猜数字游戏的c编程方法
  17. fatal error C1189: #error : Building MFC application with /MD[d]
  18. 咸鱼之王攻略及Mac M1 M2 系统电脑挂机解决无法登录的问题
  19. Wireshark抓取TCP三次握手包
  20. PTA(三十)面向对象程序设计 第五章 作业 7-1 复数的比较 (30 point(s))

热门文章

  1. 2018年下半年软件设计师下午真题试题(案例分析)及答案
  2. 求具有隔热材料的外围护结构墙体的温度分布得Python程序
  3. 计算机游戏发烧型装配方案,游戏发烧级电脑配置 十核i9-7900X配GTX1080Ti独显diy水冷电脑主机(2)...
  4. Poser pro 2014 在windows10上的安装和破译
  5. 推荐系统的主要算法(2)
  6. Opencv快速入门(C++版),新手向
  7. HTML文档的常用标记
  8. MplayerX 安装
  9. 汽车发动机进气温度传感器和氧传感器原理
  10. 热视觉2:使用Python和OpenCV从图像中测量温度