一.前言

上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发。在这个实验中,我们要进行zigbee的接受和发送实验。

二.实验功能

协调器以3 秒为周期(周期性广播),向终端节点发送一个数组数据0123456789,协调器接收到数据后,通过串口让电脑显示接收到的数据。

三.代码分析

本实验是一个周期性广播实验,故有终端节点,协调器之分。先给大家介绍一下什么是协调器和终端节点。协调器在整个zigbee网络中只能有一个,相当于网络中的最高维护者。终端节点是具体执行的数据采集传输的设备,他不能转发其他节点的消息。所以本次实验我们要用两个zigbee节点,一个节点用于发送一个用于接收,接收的节点通过串口连接电脑,显示接收到的数据,验证传送与接受的正确性。我们把讲解分成发送与接收两部分,先讲解发送的。

终端节点(数据发送)

我们大致要干3件事,(1) 串口初始化;(2) 登记任务号;(3) 执行任务。登记任务号,是zigbee的特色,这样才能去执行一个事情。

首先,作一个解释,就是:当我们从TI 官网得到协议栈代码之后,在没有任何修改过的情况之下,如果我们进行编译的话,那么,程序是默认执行周期性广播的,只不过我们没有将TI 定义为发送数据的指针,指向我们的数据,所以,数据就没有发送,但是,其实设备的任务初始化工作早就完成了。下面我们就来讲解。

步骤(1):任务初始化(登记任务号、设置编号、发送时间)

我们来看看图中的case,一旦网络状态改变,就执行case 后面的代码,代码中的osal_start_timerEx();函数就帮我们登记任务(对应SampleApp_TaskID)、设置编号(对应
SAMPLEAPP_SEND_PERIODIC_MSG_EVT)、发送时间了(对应SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT)。

步骤(2):设置发送内容

在SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数里找到SampleApp_SendPeriodicMessage()函数,SampleApp_ProcessEvent是一个事件函数,通过它调用发送函数SampleApp_SendPeriodicMessage。

在图中的if 语句里,就有我们步骤一看到的已经设置好的编号SAMPLEAPP_SEND_PERIODIC_MSG_EVT,也就是说,在设定好的发送时间内,就会执行一次SampleA
pp_SendPeriodicMessage()函数。

我们来看一下SampleApp_SendPeriodicMessage()函数

10就是数组长度,data就是发送的数组。

步骤(3):执行任务(自动周期性地发送)

当步骤(1)里设置好编号,那么程序就会执行步骤(2),而在步骤(2)中,我们又设置了发送内容,故当程序执行到步骤(2)的时候,其实已经执行了发送数据的任务了。到此
发送部分的代码讲解完毕,只要选择EndDeviceEB-Pro 编译即可下载程序。至此,发送方面就介绍完了,下面介绍接受方面。

协调器(数据接收)

数据接收部分的代码有两个工作:
(1) 接收数据;
(2) 串口发送数据给电脑显示。

步骤(1):接收数据

当接收到数据时,也就是AF_INCOMING_MSG_CMD 发生了,就会执行case中的代码,也就是调用接收数据的函数。让我们来看一下这个函数的具体代码。

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) //接收数据
2 {
3 uint16 flashTime;
4
5 switch ( pkt->clusterId ) {
6 case SAMPLEAPP_PERIODIC_CLUSTERID:
7 HalUARTWrite(0,"Received data: \n",16); //提示收到数据
8 HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //输出接收到的数据
9 HalUARTWrite(0, "\n", 1); //回车换行
10 break;

SAMPLEAPP_PERIODIC_CLUSTERID这个是一个簇,在发送函数中已经定义过,是为了接收数据的。HalUARTWrite()函数就是一个把信息发送给串口的函数,之前说过,在次不作介绍,大家明白功能就行,至此,就完成了zigbee数据的发送以及接受,希望大家能够学到东西,最后给大家看一下实验效果。

zigbee学习之路(十四):基于协议栈的无线数据传输的更多相关文章

  1. zigbee学习之路(十五):基于协议栈的按键实验

    一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...

  2. zigbee学习之路(十二):zigbee协议原理介绍

    一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...

  3. zigbee学习之路(十):串口(接收)

    一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...

  4. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  5. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  6. IOS学习之路十四(用TableView做的新闻客户端展示页面)

    最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...

  7. Linux学习总结(十四)—— 查看CPU信息

    文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...

  8. 设计模式学习(二十四):Spring 中使用到的设计模式

    设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...

  9. 我的MYSQL学习心得(十四) 备份和恢复

    我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...

随机推荐

  1. C++中函数变量布局小结

    把布局作为一种信仰(Layout as Religion).                                                                       ...

  2. SQL INSERT INTO 语句

    SQL Order By SQL update INSERT INTO 语句 INSERT INTO 语句用于向表格中插入新的行. 语法 INSERT INTO 表名称 VALUES (值1, 值2, ...

  3. iOS开发中获取WiFi相关信息

    iOS 开发中难免会遇到很多与网络方面的判断,这里做个汇总,大多可能是与WiFi相关的. 1.Ping域名.Ping某IP 有 时候可能会遇到ping 某个域名或者ip通不通,再做下一步操作.这里的p ...

  4. Linux基本操作命令

    Linux基本操作命令 首先介绍一个名词“控制台(console)”,它就是我们通常见到的使用字符操作界面的人机接口,例如dos.我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如do ...

  5. Liunx面试题

    答案待定 1.请用shell查询file1 里面空行的所在行号2.编写ShellScript查询file1 以abc 结尾的行3.打印出file1 文件第1 到第3 行4.如何将本地80 端口的请求转 ...

  6. Python开发程序:RPC异步执行命令(RabbitMQ双向通信)

    RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

  7. laravel5.1学习(1)--安装

    主要学习的是laravel5.1版本,服务器用的是wampserver3.0.4集成环境: 首先,安装composer(windows系统) 下载地址:https://getcomposer.org/ ...

  8. Jquery操作select,左右移动,双击移动 取到所有option的值

    $(function () { function MoveItem(fromId, toId) { $("#" + fromId + " option:selected& ...

  9. querystring 解析url 查询字符串

    对前端同学来说,经常要碰到一种比较麻烦的情况,那就是url查询字符串的解析问题.说起来也不难,就是比较麻烦. 具体来处理这种情况的时候,相信有一部分同学就是针对具体项目中的需要的字符去正则匹配一下,业 ...

  10. l创建Excel文件

    最近的项目中遇到需要将List<Map<String,String>>存储到Excel文件中,为满足此需求设计实现了如下函数: /** * 将MapList转化为Excel文件 ...