一.前言

上次实验,我们介绍了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. pdb调试技巧

    1.先import pdb 在适当的位置加上pdb.set_trace(),在cmd中运行脚本,就可以看到调试的提示符 2.常用的调试命令 h(elp),会打印当前版本,pdb可用的命令,如果要查询某 ...

  2. new一个JAVA对象的时候,内存是怎么分配的?

    new 对象的时候 在内存中 建立一个 内存区域 就是堆内存 用来存放对象的属性,当new完对象把对象的地址赋给对象的引用变量 这个时候 又在内存中建立一个区域 叫栈内存 用来存储 引用变量 引用变量 ...

  3. leetcode 383. Ransom Note

    
Given
 an 
arbitrary
 ransom
 note
 string 
and 
another 
string 
containing 
letters from
 all 
th ...

  4. ms-sql关联表操作

    1.创建数据库employee : create database employee;2.创建员工表EMP:use employee;create table EMP( id int,sex varc ...

  5. E-Business Suite 12.2 startCD 50 Install Fails with Fatal Error: TXK Install Service oracle.apps.fnd.txk.config.ProcessStateException: OUI process failed Cannot install Web Tier Utilities

    在rhel7.2上,使用startCD 50安装ebs r12.2的使用,安装到38%的时候就报错,遇到了和以下文章类似的问题: http://www.cnblogs.com/abclife/p/49 ...

  6. CSS深入理解之overflow

    CSS深入理解之overflow 前言 这是跟着张鑫旭重学CSS的overflow篇 基本属性 overflow有以下五个基本属性: 1.visible : 默认值,具体表现为,应用此属性后,子元素超 ...

  7. Drawable和Bitmap区别

    Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565.RGB888.作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低.我们理解为一种存储对象比较好 ...

  8. 使用git

    原文出处: 涂根华的博客 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候 ...

  9. mysqldump导出

    mysqldump -u user -p dbname table1 table2 > db.sql mysql执行sql mysql –uroot –p -Dtest < 1.sql

  10. cassandra.yaml介绍

    cluster_name 集群的名字,默认情况下是TestCluster.对于这个属性的配置可以防止某个节点加入到其他集群中去,所以一个集群中的节点必须有相同的cluster_name属性. list ...