一.前言

上次实验,我们介绍了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. 《linux内核设计与实现》读书笔记第十七章

    第17章 设备与模块 四种内核成分 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对象:内核数据结构中支持面向 ...

  2. 用Arduino剖析PWM脉宽调制

    PWM(Pulse Width Modulation)简介 PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号,也就是方波信号.多用于在数字电路中驱动负载随时间变化的电子元件,如LED,电机等. ...

  3. flot - jQuery 图表插件(jquery.flot)使用

    Flot是纯Javascript实现的基于jQuery的图表插件,主要支持线状图和柱状图的绘制(通过插件也可以支持饼状图). 特别注意Flot使用的是UTC时间,最好修改flot.js去掉所有的UTC ...

  4. java 使用map返回多个对象组装

    Object json=JSONObject.fromObject("{}"); List<Object> list = new ArrayList<Object ...

  5. 怎么搭建DC+SCCM 域环境(一)

    需要的软件: 1. SCCM 2012 SP1 2. SQL Server 2012 3. System ISO 4. ADK 环境搭建顺序: 1. 安装DC和SCCM 机器,并配置需要的IP.DNS ...

  6. SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法

    一般备份文件选择的目录为磁盘根目录或备份所选分区未授予sqlserver用户读写权限时会出现此错误. 解决办法就是给sqlserver用户授予权限: 选择要备份的文件夹 ,右键-->属性--&g ...

  7. scp使用

    从82服务器复制文件 scp -P 50028 -r root@***.**.**.82:/data/upload.tar / -P:指定非ftp22端口

  8. Spring操作指南-AOP基本示例(基于XML)

  9. cursor or set-based

    标题可能和正文不太相符.我主要是记录工作中遇到使用游标的语句改成普通set-based operation,执行时间快了很多. 1.游标语句 declare @startDate dateTime d ...

  10. C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度

    一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等 ...