zigbee学习总结docWord格式文档下载.docx

上传人:b****2 文档编号:4113562 上传时间:2023-05-02 格式:DOCX 页数:12 大小:20.70KB
下载 相关 举报
zigbee学习总结docWord格式文档下载.docx_第1页
第1页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第2页
第2页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第3页
第3页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第4页
第4页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第5页
第5页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第6页
第6页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第7页
第7页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第8页
第8页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第9页
第9页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第10页
第10页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第11页
第11页 / 共12页
zigbee学习总结docWord格式文档下载.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

zigbee学习总结docWord格式文档下载.docx

《zigbee学习总结docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《zigbee学习总结docWord格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。

zigbee学习总结docWord格式文档下载.docx

在ZigBee网络中大多是这两种设备,网络中结点数理论上最多可达65,536个,可以组成三种类型网络:

星型、网状型和树型。

星状网络由一个PAN协调器和多个终端设备组成,只存在PAN协调器与终端的通讯,终端设备间的通讯都需通过PAN协调器的转发。

树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输。

网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表实现消息的网状路由。

星型,如果用星型网络的话,在房间内的节点是否能够穿墙,与房间外的协调器进行正常通信。

RFD的应用非常简单,容易实现,就好像一个电灯的开关或者一个红外线传感器,由于RFD不需要发送大量的数据,并且一次只能同一个FFD连接通信,因此,RFD仅需要使用较小的资源和存储空间,这样,就可以非常容易地组建一个低成本和低功耗的无线通信网络

Zigbee2007协议栈主要应用领域有:

家庭自动化,商业楼宇自动化,自动读表系统。

IEEE802.15.4(Zigbee)工作在ISM(industrial,Scientific,medical即工业,科学,医疗)频段,定义了两个频段,2.4GHz频段和896/915MHz频段。

在IEEE802.15.4中共规定了27个信道:

在2.4GHz频段,共有16个信道,信道同学速率为250Kbps;

在915MHz频段,共有10个信道,信道通信速率为40Kbps

在896MHz频段,共有1个信道,信道通信速率为20Kbps

协议栈的工作原理,这个东西将是我们以后接触得最多的东西,从学习到项目开发,你不得不和他打交道。

由于我们的学习平台是基于TI公司的,所以讲述的当然也是TI的Z-STACK。

ZigBee协议栈已经实现了ZigBee协议,用户可以使用协议栈提供的API进行应用程序的开发,在开发过程中完全不必关心ZigBee协议的具体实现细节,要关心的问题是:

应用层的数据是使用哪些函数通过什么方式把数据发送出去或者把数据接收过来的。

所以最重要的是我们要学会使用ZigBee协议栈。

举个例子,用户实现一个简单的无线数据通信时的一般步骤:

1、组网:

调用协议栈的组网函数、加入网络函数,实现网络的建立与节点的加入。

2、发送:

发送节点调用协议栈的无线数据发送函数,实现无线数据发送。

3、接收:

接收节点调用协议栈的无线数据接收函数,实现无线数据接收。

Zigbee设备工作流程:

Zigbee协议栈采用任务轮训的方式工作,他会查找发生的事件然后调用相应的事件执行函数。

如果没有事件登记要发生,那么就进入睡眠模式

网络启动流程图

篇二:

ZigBee学习电子笔记

第二讲

1.cc2530通用I/O口有21个:

P0/P1/口个8个;

P2口5个,其中,P1_0、P_1有20mA的驱动能力,其余只有

4mA

2.IO口配置相关的寄存器(3个)

PxSEL:

P0SEL、P1SEL、P2SEL,每个寄存器是1byte,分别用来设定3个口的工作模式。

IO的两种工作模式:

1.普通IO口模式:

点灯、监测按键输入

2.片上外设模式:

作为串口或者其他非普通IO口

PxDIR:

P0DIR/P1DIR/P2DIR,每个寄存器占一个字节,用来设定IO口作为输入还是输出

PxINP:

P0INP/P1INP/P2INP:

输入情况下,注意P2INP寄存器后3位的用法(见下图):

输出示例(以P0_0为例):

1)设置P0_0为普通IO口工作模式,非片上外设:

P0SEL=0xFE

2)让P0_0作为输出用,非输入监测用:

P0DIR=0x01

3)输出(如P0_0=0或P0_0=1等)。

输入示例(让P1_2作为输入):

1)设置P1_2为普通IO口工作模式,非片上外设:

P1SEL=0xfd

2)让P1_2作为输入检测用,非输出用P1DIR=0xfd

3)选择上拉、下拉或三态中的一种输入(因为上电的时候寄存器默认为0,所以IO口都默认工作在普通IO口输入、上下拉模式)

4)检测用:

If(P1_2==0or1)

{

}

Else

总结:

由此可见,当芯片上电初始化后,3组IO口默认工作在普通IO口下的输入监测、上拉输入模式。

自己编程示例:

篇三:

zigbee学习心得——实例分析

网易

新闻微博邮箱相册阅读有道摄影爱拍优惠券云笔记闪电邮手机邮印像派网易识字

更多

博客

手机博客博客搬家博客VIP服务

LiveWriter写博word写博邮件写博短信写博

群博客博客油菜地博客话题博客热点博客圈子找朋友

发现

小组

风格

网易真人搭配社区iStyle

玩摄影,玩LOFTER

玩胶片,玩LOFTER

玩绘画,玩LOFTER

创建博客登录

加关注

显示下一条|关闭

温馨提示!

由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!

立即重新绑定新浪微博》|关闭

豪醒的博客

不只是一个人的旅程

导航

首页

日志

相册

博友

关于我

zigbee学习心得2——协议栈任务

Fork-VFork一张图说明区别

zigbee学习心得——实例分析(温湿度采集及控制)

2012-08-0516:

58:

58|分类:

zigbee|标签:

cc2430zigbe

e温湿度cc2430|字号大中小订阅

就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。

我这里面只用到了voidwenshi_receive;

一个函数,然后将函数和其中所用到的两个变量TH,RH,分别代表温度和湿度设为全局变量。

先打开SimpleSensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:

那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。

找到与绑定相关的函数:

voidzb_BindConfirm

if)

myAppState=APP_BOUND;

//Startreportingsensorvalues

myApp_StartReporting;

else

//Continuetodiscoveracollector

osal_start_timerEx;

直接点,若绑定成功,就会返回一个ZB_SUCCESS的状态,此时方会调用myApp_StartReporting;

函数,否则就继续搜索节点。

对于myApp_StartReporting;

voidmyApp_StartReporting

HalLedSet;

直观地从函数看上去也就相当于添加一个周期性的任务;

从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。

过程是这样的:

主函数:

ZSEGintmain——/*系统初始化*/osal_init_system;

——osalInitTasks;

/*任务初始化*/

——SAPI_Init;

/*用户自定义任务函数,他的任务ID为taskID*/?

——

/*其中的一个等式*/sapi_TaskID=task_id;

也就是说可以通过osal_start_timerEx添加一个周期性的任务,其周期为XXXPeriod,比如片内温度采集:

myTempReportPeriod,电压测量myBatteryCheckPeriod,那XXXEVT,也就相当于一个任务Task里面一个独立的事件Event了。

那么我们也可以这么添加自己的事件:

再看看XXXEVT和XXXPeriod的定义:

//Applicationosaleventidentifiers

//Bitmaskofevents

#defineMY_START_EVT0x0001

#defineMY_REPORT_TEMP_EVT0x0002

#defineMY_REPORT_BATT_EVT0x0004

#defineMY_FIND_COLLECTOR_EVT0x0008

自己跟着做:

#defineMY_REPORT_WENDU_EVT0x0010

#defineMY_REPORT_SHIDU_EVT0x0020

这里说一下为什么要这么做

因为等下调用任务处理函数zb_HandleOsalEvent;

的时候判断语句是这种形式的:

if

按位与,所以..

顺便说一下,我最初做这个东西看漏了这条语句,传输过程会突然断开连接,这个bug搞了我十多天。

周期时间:

(对照范例)

staticuint16myStartRetryDelay=10000;

//milliseconds

staticuint16myTempReportPeriod=5000;

//milliseconds

添加:

staticuint16myWENDUReportPeriod=6000;

staticuint16mySHIDUReportPeriod=7000;

这样子(这里的周期是毫秒级的,比如5000代表的就是5秒传一次MCU的温度)

再回到刚才的myApp_StartReporting添加:

这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:

接下来:

而Sensor.c里面有一个Handle函数用于处理时间的:

见介绍和实体:

/*****************************************************************************

*@fnzb_HandleOsalEvent

*

*@briefThezb_HandleOsalEventfunctioniscalledbytheoperating

*systemwhenataskeventisset

*@paramevent-Bitmaskcontainingtheeventsthathavebeenset

*@returnnone

*/

voidzb_HandleOsalEvent

uint8pData[2];

//用于存放数据和分类信息的

zb_StartRequest;

//这不就是从上面介绍的osal_start_timerEx;

函数set的事件么?

//Readandreporttemperaturevalue

pData[0]=TEMP_REPORT;

//类型存放在pData[0]里面

pData[1]=myApp_ReadTemperature;

//读出来的温度值存到pData[1],myApp_ReadTemperature;

是读取温度值的函数

zb_SendDataRequest;

//发送出去

//再设这样一个时间,无限循环

------------------------------------------------------------------------------------------------------------------------------

这里再说一下发送的过程,首先从刚才osal_start_timerEx;

设一个发送温度值的系统事件,在一个myTempReportPeriod的周期之后,通过zb_HandleOsalEvent的调用,再通过if的条件判断执行温度值发送的事件pData[0]用于告诉协调器是温度报告,pData[1]用于告诉协调器节点报告出来的温度值是多少,再通过zb_SendDataRequest函数发送出去,而发送的形式是通过0xFFFE,绑定的形式发送字长为2个unsignedchar类型,发送完毕后再继续调用osal_start_timerEx添加一个相同的温度采集系统事件,不断地重复这个过程。

if//道理和上面一样

//Readbatteryvalue

//Ifbatterylevellow,reportbatteryvalue

pData[0]=BATTERY_REPORT;

pData[1]=myApp_ReadBattery;

//Findandbindtoacollectordevice

zb_BindDeviceNULL);

先添加自己刚设的事件:

if

pData[0]=WENDU_REPORT;

//相当于添加一个可以让协调器识别你发过去的是什么的标签

receive;

//调用wenshi.c里面的全局函数receive;

wenshi.c是我自己写的一个C

pData[1]=TH;

//代表温度

//回调

这样子

额,pData[0]=WENDU_REPORT;

,既然说这个是要让协调器识别的,那么协调器里面也要有相同的参数。

#defineTEMP_REPORT0x01

#defineBATTERY_REPORT0x02

#defineWENDU_REPORT0x04

#defineSHIDU_REPORT0x08

再分析回原来的事件处理部分:

都有调用zb_SendDataRequest;

函数

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2