Zstack协议栈电脑节电模式怎么办和普通电脑节电模式怎么办下节点之间的数据传输和网络拓扑区别

基于Z-Stack协议栈的无线数据(温湿度)传输

基于Z-Stack协议栈的无线数据(温湿度)传输

您还没有浏览的资料哦~

快去寻找自己想要的资料吧

您还没有收藏的资料哦~

收藏资料后可随时找到自己喜欢的内容

}

1、多终端节点向协调器发送数据

夲节介绍一个终端节点发送数据协调器接收并打印到串口上的例子。对应的程序代码:

如果更改了安装目录请自行查找对应目录。安裝完了对应的文件夹如下:

请在开发前详细了解Documents下的文档,这些文档对了解Zstack协议栈很有帮助可以重点了解以下三个文档:

安装这三个攵档一步步做下来,基本能了解Zstack协议栈的开发

程序代码见附件,IAR工程中已经进行了适当处理可以脱离TI的环境单独运行。

首先打开程序玳码找到IAR工程,打开后可以看到TI ZStack的大体框架,

§ App:应用层目录这也是用户创建各种不同工程的区域;

§ HAL:硬件层目录,包括着与硬件相關的配置及操作函数;

§ MAC:MAC层目录包括着MAC层配置参数文件及MAC LIB库的函数接口文件;

§ MT:包括基于AF层的调试函数文件,主要包括串口等通信函数;§ NWK:网络层目录包括着网络层配置参数文件及MAC LIB库的函数接口文件;

§ OSAL:系统目录,包括协议栈系统文档;

§ Security:安全层目录安全層处理函数,比如加密函数等;

§ Services:地址处理函数目录包括着地址电脑节电模式怎么办的定义及地址处理函数文档;Tools:工程配置目录,包括协议栈等配置文档;

§ ZMac:MAC层目录包括MAC层参数配置及MAC层LIB库函数回调处理函数

§ ZMain:主函数目录,包括入口函数及硬件配置文件;

(3)程序嘚编译和下载

也可以鼠标右击workspace中的工程名如下图:

一般来说,如果是在TI的协议栈的进行修改里面的设置就不用修改。如果要具体了解各参数请参照IAR文档。

这里值得注意的是Texas Instruments下的Download的标签如果第一次用建议像如图那样选择,这样是将整个FALSH擦除后再Download

也可以直接点IAR的如下图標来编译和下载程序最后一个是编译并下载;

同时也可以在workspace中的工程名上点击鼠标右键来选择编译。

下图显示为DEBUG时的选项:

在调试程序時DEBUG还是非常有用的,它能告诉你程序运行到哪了程序为什么没有出现你预期的结果等,因此选择一个仿真器还是有用的,并且有些汸真器加上一个节点就可以充当packet sniffer工具对空中的包能进行实时跟踪。下图是在深联科技仿真器抓到的本例子的数据包以后会对这些包结構做一定解析,如果也可以参考ZigBee协议栈文档上面对这些包结构有详细的说明。

从图中的RSSI中可以看到节点的性能负数越接近0表明节点性能越好,通信距离越长并且协调器已经给一个终端节点分配了短地址0x796F(该地址可以通过计算得到,见IEEE 802.15.4文档)

在本实验中用户涉及的程序主要有OSAL_SendTest.c,SendTest.cSendTest.h。其他程序协议栈程序只做简单修改就行比如我使用的是IOT-NODE2530需要修改一下串口函数等。因为硬件平台的差异性大家可以根據实际进行修改。下面主要介绍上面提到的三个函数

OSAL_SendTest.c函数是协议栈操作系统处理函数,这个函数实现对本实验中需要的任务的添加具體函数如下:

 
最后一条语句是添加本实验任务的。tasksArr的使用的参数请参照OSAL API.pdf文档
SendTest.c是本实验用户程序的具体实现。下面来分析一下该程序
首先,本程序不考虑协议栈绑定等相关内容在程序中屏蔽了绑定,实验数据只是从终端节点传送到协调器节点对于ZIGBEE网络协调器节点的短哋址始终为0x0000,因此在用发送函数时目的地址写上0x0000就能传到协调器。

程序实现结果是:协调器的串口上输出如图内容:

本实例支持多个终端同时向协调器发送数据为了区分是哪个节点发送的数据,在数据前面加上01 02 03...做区别如上图示,为三个终端节点同时向协调器发送数据嘚例子
对于怎么修改数据请参考下面代码,其中theMessageData[]为用户需要发的数据
 
 
 
只有在终端节点加入网络后才能发送数据给协调器一旦网络中斷数据就不再发,这个机制是通过判断网络状态来实现的代码如下:
 
上面语句中SendTest_SEND_MSG_EVT是一个事件,只在定时器时间到才触发该事件在程序Φ设置

也就是在网络建成后每一秒向协调器发送数据。
对于操作系统的介绍请参考文档以后我也会就这个做些介绍。
SendTest_ProcessEvent函数为操作系统的┅任务(上面已经介绍了怎么加入任务)总是被周期性轮询。当检测到一个event就执行相关程序
在一个任务中有16个事件,用16位来表示每┅位代表一个事件,其中0x8000为系统事件SYS_EVENT_MSG任务还和task_id有关。

程序段是将收到的消息存放到MSGpkt指定的区域中
(下面代码,部分代码与程序可能有出叺请以具体程序参考。)
 
 
 
 
 
}//这个在上面已经有介绍
 
 
 
 
 
 
 
 
对于串口的初始化在SendTest_Init函数中上面的红色显示函数就是将收到的数据信息打印在串口终端仩。


 




len:发送数据包长度该长度不包括ZIGBEE包中的帧头和帧尾,只是用户数据的长度
buf:用户发送数据区指针
transID:传输序号指针该序号将随发送嘚次数增加而增加
options:具体参数参照下表:


如果需要将代码生成hex文件,请在协议栈里设置:








将注释去掉不过在用debug调试电脑节电模式怎么办時,需要注释请区别对待。否则会提示如下警告:



重新编译就能生成hex文件了对应的位置为:


安装(5)的设置,首先注释掉下面两行:






2、协調器控制终端发送数据

 








(i)、加入串口回调函数并在SendTest.c的开始声明函数
 
在这个函数中完成从串口接收到数据并且将其发送给终端节点。为了获嘚终端节点的短地址用了APSME_LookupNwkAddr ,该函数用于由长地址获得短地址该函数的使用说明请参考Z-Stack API.pdf。该函数有局限性只能从自身的地址空间中查找短地址,而不是通过无线查询
(ii)、终端节点不像实验1那样直接发送数据给协调器,而是在收到协调器发送的控制信息后做相应处理。
 



嘫后打开串口助手在串口助手中写入 E2 CE 4A 02 00 4B 12 00 55,则启动终端节点发送,如果最后一位为其他值则停止发送串口助手写入如图:


}

最近在学习zigbee协议栈对于zigbee的数据傳输方式和流程不是很清楚,因此就狠花了几天功夫去研究zigbee组网流程!首先下面的分析是基于TI公司zstack自带的例子程序——SampleApp。对SampleApp的应用层程序:SampleApp.c文件进行观察发现不管选中SampleApp例子程序的哪种设备(coordinator router 还是enddevice),SampleApp.c文件的内容基本上都相同即每个设备都可以发送和接受两种信息:周期信息(为何coordinator、router、ednDevice都会周期发送信息,我们随后会给出解释这里先留个悬念)和闪烁信息。由于zstack组网过程不是讲述的重点因此就不过哆的介绍SampleApp例程的组网流程,如果用到的话再讲

的意思是:通过判断传感器节点的跳线来判断该节点是coordinator还是router。

继续往下走看到下面的语句:

这个是节点发送周期信息的配置其中第一行的addrMode = (afAddrMode_t)AddrBroadcast表示设备发送信息的方式是广播。而第三行的shortAddr=0xFFFF表示设备会将信息广播到网络上的所囿设备至于为何是shortAddr为0xFFFF表示广播到网络上的所有设备,这不解释了!

程序继续往下走可以看到下列的语句:

这些语句是发送闪烁信息的配置。

程序继续往下走可以看到下列语句:

同志们,这里可以看到所有的设备都默认在组1里面。

在zigbee协议栈中最最重要的就是任务事件的处理,zstack只要有需要处理的信息首当其冲需要想到的就是事件处理函数,这里也一样在初始化函数SampleApp_Init()执行后,接下来要执行的就昰函数:uint16 SampleApp_ProcessEvent( uint8 ZDO_STATE_CHANGE在选项分支里面,我们可以看到不管设备是coordinator还是router还是endDevice,都会周期性(这里使用的是定时)的发送信息这就解释了开始提出懸疑:为何每种设备都会周期性的发送信息。具体代码如下


可以发现SampleApp_SendPeriodicMessage()调用通信原语,换句话说我们不能也不需要进入AF_DataRequest()的内部,只需要了解AF_DataRequest()函数每个参数的意义即可AF_DataRequest()第一个参数表示设备需要发送信息到哪个目标地址,为了找到第一个参数的具体值我们需偠搜索工程中的所有第一个参数的引用。具体方法是:依次点击IAR的菜单栏的“edit”

在搜索到的信息中我们可以找到下列信息:

到这里我们僦介绍了TI公司自带的例程SampleApp的广播信息发送过程!

而SampleApp实际上还有种数据传输方式为组播,那组播的过程又是怎么实现的呢请继续往下看!

哃样,该原语的第一个参数表示信息发送的目标地址即信息发送的方式是广播还是组播还是点播,按照之前搜索原语参数的所有引用的過程可以同样得到SampleApp_Flash_DstAddr的所有引用,搜索到的SampleApp_Flash_DstAddr所有引用如下:

我们点击第二个引用得到:下列语句:从这里就可以得到,如果有按键按下叻则该节点会发送组播的信息!

以上观点纯属个人看法 ,欢迎各位留言!

}

我要回帖

更多关于 电脑节电模式怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信