zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言
上次实验,我们介绍了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学习之路(十四):基于协议栈的无线数据传输的更多相关文章
- zigbee学习之路(十五):基于协议栈的按键实验
一.前言 经过上次的学习,相信大家已经初步学会使用zigbee协议进行发送和接受数据了.今天,我们要进行的实验是按键的实验,学会如何在协议栈里实现按键中断. 二.实验功能 在协议栈上实现按键中断,BU ...
- zigbee学习之路(十二):zigbee协议原理介绍
一.前言 从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack 是TI ZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T ...
- zigbee学习之路(十):串口(接收)
一.前言 上次我们学习了串口的发送,今天我们要学习串口的接收,要实现的功能是接收电脑发来的数据,控制LED 灯闪烁,而且将收到的数据发回给电脑显示出来.而且要采用不占用cpu资源的中断. 二原理与分析 ...
- 学习之路十四:客户端调用WCF服务的几种方法小议
最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...
- 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i ) 定义原子变量v并初始化为i atomic_read(v) 返回原子变量 ...
- IOS学习之路十四(用TableView做的新闻客户端展示页面)
最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...
- Linux学习总结(十四)—— 查看CPU信息
文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...
- 设计模式学习(二十四):Spring 中使用到的设计模式
设计模式学习(二十四):Spring 中使用到的设计模式 作者:Grey 原文地址: 博客园:设计模式学习(二十四):Spring 中使用到的设计模式 CSDN:设计模式学习(二十四):Spring ...
- 我的MYSQL学习心得(十四) 备份和恢复
我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
随机推荐
- python logging usage
python中,logging模块主要是处理日志的. 所谓日志,可理解为在软件运行过程中,所记录的的一些运行情况信息 软件开发人员可以根据自己的需求添加日志,日志可以帮助软件开发人员 了解软件的运行信 ...
- https://blog.helong.info/blog/2015/03/13/jump_consistent_hash/
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- 《阿Q正传》读后感
kindle大法好. 利用坐车的时间阅读完了鲁迅先生写的<阿Q正传>, 心中感慨良多, 记下等以后翻看这些摸不着的回忆吧. 我没看过实体书版, 电子书版的<阿Q正传>注解很详细 ...
- JAVASE02-Unit09: 多线程基础
Unit09: 多线程基础 * 线程 * 线程用于并发执行多个任务.感官上像是"同时"执行 * * 创建线程有两种方式. * 方式一: * 继承线程并重写run方法来定义线程要执 ...
- Nexus安装及部署(含如何在Tomcat中部署)
1. Nexus价值 1)方便-节约带宽-快 2)便于统一管理 3)持续集成需要 2.Nexus下载 http://www.sonatype.org/nexus/go 3.Nexus启动 解压后进入\ ...
- JS限制input输入的为数字并且有小数的时候最多保留两位小数
JS限制input用户输入的为数字并且有小数的时候最多保留两位小数,代码如下: html部分: <input type="number" onkeypress="r ...
- 向指定URL发送GET方法获取资源,编码问题。 Rest风格
http编码.今天遇到获取网页上的数据,用HTTP的GET请求访问url获取资源,网上有相应的方法.以前一直不知道什么事rest风格,现在我想就是开一个Controller,然后使人可以调用你的后台代 ...
- MFC工程资源相对路径
Project->Properties->Configuration Properties->Debuging->Working Directory改为$(ProjectDir ...
- SQLServer中系统存储过程sp_spaceused
sp_spaceused 执行sp_spaceused存储过程的时候可以不用带参数,直接执行,或者exec sp_spaceused都可以,返回两个结果集: 列名 数据类型 描述 database_n ...
- maven打包日志输出优化-去掉泛型与过时的警告
pom.xml配置 1.使用eclipse编译 <!-- Eclipse编译代码时,使用的是自带的JDT(Java Development Tools), 而Maven默认使用的是JAVA_HO ...