从Zigbee协议栈底层添加自己的按键配置精编版

合集下载

zigbee协议栈各层的功能

zigbee协议栈各层的功能

竭诚为您提供优质文档/双击可除zigbee协议栈各层的功能篇一:zigbee协议栈各层分析3.4.2协议栈概况本课题研究的系统zigbee协议栈设计基于msstate_lRwpan。

msstate_lRwpan是由美国密西西比州立大学的Robertb.Reese教授开发的一套zigbee协议的简化实现。

该协议栈可用于多种硬件平台,实现了协调器、路由器和精简功能节点之间的树路由、直接消息传输并用静态绑定方法实现了间接路由[[xxxix]]。

课题在对该协议栈进行深入分析的基础上,根据本课题中使用硬件平台的实际情况进行修改,将其移植到msp430+cc2420的硬件平台上来。

程序使用c语言编写,使用iaR公司的ew430工具作为集成开发环境,编译后下载到目标板的msp430芯片中。

协议栈使用有限状态机(Fsm,Finitestatemachine)的编程方式,在协议的每一层实现单独的有限状态机来跟踪该层的工作状态,整个协议栈采用嵌套调用的方式,上层调用下层的有限状态机,实现完整协议栈的运行。

最顶层的有限状态机是应用程序支持子层(aps)的apsFsm(),需要周期性的调用,以维持整个协议栈正常运行。

经过对msstate_lRwpan协议各层源程序的原理和实现方法进行分析后发现,在将协议栈从一种硬件平台移植到另外一种硬件平台时,需要修改的主要是物理层(phy)和媒体接入控制层(mac),这两层与硬件联系紧密,需要针对节点硬件的实际连接方式作较大的修改,涉及的文件主要有cc2420.c、clockhal.c和halstack.c等。

phy层和mac层屏蔽了硬件的差异,上层协议通过服务接入点(sap,serviceaccesspoint)使用下层协议提供的服务,透明地完成对硬件的控制,所以网络层(nwk)和应用层(aps)等文件要作的改动较小。

3.4.3物理层phy物理层是协议的最底层,承担着和外界直接作用的任务。

ZigBee协议栈中文说明

ZigBee协议栈中文说明

Zigbee协议栈中文说明1.概述1.1解析ZigBee堆栈架构ZigBee堆栈是在IEEE802.15.4标准基础上建立的,定义了协议的MAC和PHY 层。

ZigBee设备应该包括IEEE802.15.4(该标准定义了RF射频以及与相邻设备之间的通信)的PHY和MAC层,以及ZigBee堆栈层:网络层(NWK)、应用层和安全服务提供层。

图1-1给出了这些组件的概况。

ZigBee堆栈层1.1.11.1.1ZigBee每个ZigBee设备都与一个特定模板有关,可能是公共模板或私有模板。

这些模板定义了设备的应用环境、设备类型以及用于设备间通信的簇。

公共模板可以确保不同供应商的设备在相同应用领域中的互操作性。

设备是由模板定义的,并以应用对象(ApplicationObjects)的形式实现(见图1-1)。

每个应用对象通过一个端点连接到ZigBee堆栈的余下部分,它们都是器件中可寻址的组件图1-1zigbe堆栈框架从应用角度看,通信的本质就是端点到端点的连接(例如,一个带开关组件的设备与带一个或多个灯组件的远端设备进行通信,目的是将这些灯点亮)。

端点之间的通信是通过称之为簇的数据结构实现的。

这些簇是应用对象之间共享信息所需的全部属性的容器,在特殊应用中使用的簇在模板中有定义。

图1-1-2就是设备及其接口的一个例子:图1-1-2每个接口都能接收(用于输入)或发送(用于输出)簇格式的数据。

一共有二个特殊的端点,即端点0和端点255。

端点0用于整个ZigBee设备的配置和管理。

应用程序可以通过端点0与ZigBee堆栈的其它层通信,从而实现对这些层的初始化和配置。

附属在端点0的对象被称为ZigBee设备对象(ZD0)。

端点255用于向所有端点的广播。

端点241到254是保留端点。

所有端点都使用应用支持子层(APS)提供的服务。

APS通过网络层和安全服务提供层与端点相接,并为数据传送、安全和绑定提供服务,因此能够适配不同但兼容的设备,比如带灯的开关。

ZIGBEE协议栈OSAL运行机理及任务添加

ZIGBEE协议栈OSAL运行机理及任务添加
ZIGBEE协议栈OSAL运行 机理及任务添加
授课内容

OSAL的调度机制

OSAL任务添加
OSAL的简介

OSAL是一种支持多任务运行的系统资源分配机 制。 OSAL与标准的操作系统有一定的区别,它实现 了类似操作系统的功能,如:任务切换、提供了 内存管理功能等,但OSAL并不是真正意义的操 作系统。
OSAL添加新任务

将事件处理函数的地址加入tasksArr[]数组中:
void osalInitTasks(void) { Uint8 taskID=0; taskEvent=(uint16*)osal_mem_alloc(sizeof(uint16)*task aCnt); Osal_memset(tasksEvents,0,(sizof(uint16)*tasksCnt)) macTaskInit(taskID++); nwk_init(taskID++) ; Hal_Init(taskID++); #if defined(MT_TASK)
}
OSAL添加新任务
GenericApp_ProcessEvent函数添加到了数组的 末尾,GenericApp_Init函数在osalInitTasks中被 调用
taskArr[]数组各事件处理函数的排列顺序与 osalInitTasks函数调用各任务初始化函数的顺序 保持一致; 为了保存osalInitTasks函数所分配的任务ID,给 每个任务定义一个全局变量。
APS_event_loop;
#if defined (ZIGBEE_FRAGMENTATION)
OSAL添加新任务

事件处理函数的地址加入tasksArr[]数组, 代码:

ZIGBEE技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析

ZIGBEE技术规范与协议栈分析篇一:ZigBee知识无线龙1.协议栈工作流程和无线收发控制 LED 实验内容:1. ZigBee 协议栈简介2. 如何使用 ZigBee 协议栈3. ZigBee 协议栈的安装、编译与下载4. 协议栈无线收发控制 LED5. 协议栈工作流程实现现象:协调器、终端上电,组网成功后 D1 灯闪烁 1. ZigBee 协议栈简介什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据发射和接收。

协议栈是协议的具体实现形式,通俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个协议的,进而实现无线数据收发。

图 1 展示了 ZigBee 无线网络协议层的架构图。

ZigBee 的协议分为两部分,IEEE 802.15.4 定义了 PHY(物理层)和 MAC(介质访问层)技术规范;ZigBee联盟定义了NWK(网络层)、APS(应用程序支持子层)、APL(应用层)技术规范。

ZigBee协议栈就是将各个层定义的协议都集合在一直,以函数的形式实现,并给用户提供 API(应用层),用户可以直接调用。

图 1 ZigBee 无线网络协议层 2. 如何使用 ZigBee 协议栈协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用,协议较底下的层与应用是相互独立的。

商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。

你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理;还有系统里的设备之间的通信顺序什么的,当你的应用需要数据通信时,调用组网函数给你组建你想要的网络;当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。

所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。

按键移植修改

按键移植修改

Zigbee协议栈z-stack学习之按键KEY驱动2013-03-08 09:26:28| 分类:Zigbee技术 | 标签:zigbee技术 cc2530 z-stack 按键驱动|举报|字号订阅硬件平台:CC2530DB Zigbee无线通信开发板软件环境:ZStack-CC2530-2.2.2-1.3.0+IAR Embedded Workbench for MCS-51 7.51A开发环境我是在TI公司提供的协议栈的例程(SimpleApp)的基础上修改的,下面通过对代码的注释来描述一下自己的修改过程。

与开发板按键驱动相关的程序为底层驱动抽象层HAL下的hal_key.c和hal_key.h两个文件。

1、hal_key.h中定义了相关键值的宏定义#define HAL_KEY_INTERRUPT_DISABLE 0x00#define HAL_KEY_INTERRUPT_ENABLE 0x01#define HAL_KEY_STATE_NORMAL 0x00#define HAL_KEY_STATE_SHIFT 0x01#define HAL_KEY_SW_1 0x01#define HAL_KEY_SW_2 0x02#define HAL_KEY_SW_5 0x04#define HAL_KEY_SW_4 0x08#define HAL_KEY_SW_3 0x10#define HAL_KEY_SW_6 0x202、hal_key.c定义硬件相关的端口寄存器以及操作函数#define HAL_KEY_RISING_EDGE 0#define HAL_KEY_FALLING_EDGE 1#define HAL_KEY_DEBOUNCE_VALUE 25#define HAL_KEY_POLLING_VALUE 100#define HAL_KEY_CPU_PORT_0_IF P0IF#define HAL_KEY_CPU_PORT_2_IF P2IF下面是对一个独立按键的端口寄存器的相关定义:#define HAL_KEY_SW_6_ENABLE// SW_6的IO端口#define HAL_KEY_SW_6_PORT P0//SW6接到IO端口的位数 P0.5#define HAL_KEY_SW_6_BIT HAL_KEY_BIT5// SW_6的IO端口选择#define HAL_KEY_SW_6_SEL P0SEL// SW_6的IO端口方向#define HAL_KEY_SW_6_DIR P0DIR// SW_6的IO端口中断使能#define HAL_KEY_SW_6_IEN IEN1// SW_6的IO端口中断使能的掩码#define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT5// SW_6的IO端口中断的边沿选择#define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE// SW_6的IO端口边沿掩码#define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT0// SW_6的IO端口总中断#define HAL_KEY_SW_6_ICTL PICTL// SW_6的IO端口总中断掩码#define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT5// SW_6的IO端口中断标志位#define HAL_KEY_SW_6_PXIFG P0IFG按键主要使用的是IO来设置的,这里需要设置的参数主要有按键设置在哪个端口以及掩码、按键中断使能标志以及掩码、引起中断的上升沿还是下降沿以及掩码涉及的主要寄存器有PICTL端口输入中断控制IEN0端口P0总中断使能IEN2端口1和2总中断使能比如需要设置HAL_KEY_SW_6为P0.4为输入下降沿有效中断设置如下:#define HAL_KEY_SW_6_ENABLE#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT HAL_KEY_BIT4#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR#define HAL_KEY_SW_6_IEN IEN1#define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT5#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE#define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT0#define HAL_KEY_SW_6_ICTL PICTL#define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT4#define HAL_KEY_SW_6_PXIFG P0IFG比如需要设置HAL_KEY_SW_6为P2.1为输入上升沿有效中断设置如下:#define HAL_KEY_SW_6_ENABLE#define HAL_KEY_SW_6_PORT P2#define HAL_KEY_SW_6_BIT HAL_KEY_BIT4#define HAL_KEY_SW_6_SEL P2SEL#define HAL_KEY_SW_6_DIR P2DIR#define HAL_KEY_SW_6_IEN IEN2#define HAL_KEY_SW_6_IENBIT HAL_KEY_BIT1#define HAL_KEY_SW_6_EDGE HAL_KEY_RISING_EDGE#define HAL_KEY_SW_6_EDGEBIT HAL_KEY_BIT2#define HAL_KEY_SW_6_ICTL PICTL#define HAL_KEY_SW_6_ICTLBIT HAL_KEY_BIT5#define HAL_KEY_SW_6_PXIFG P2IFG这样设置后就可以正常使用KEY 中断。

ZigBee实验——按键控制开关

ZigBee实验——按键控制开关

此实验的功能是通过实验班上的按键控制 LED 的亮灭。本实验用于熟悉 CC2430的 I/O 端口相 关的寄存器,熟悉寄存器的赋值操作。 无线龙 C51RF-3-PK 实验板的 LED1与 P1.0相连,LED2与 P1.1口相连。按键 S5与 P0.5相连, S6同 P0.6相连。我以前对 PIC 的单片机比较熟悉,CC2430的一些操作同 PIC 相比有些不同, 两者对比下学习,效率比较高。先把实验板附带的代码贴上来。 //CD WXL 电池板开关控制小灯 #include <ioCC2430.h>
#define GLED P1_1
/* 根据原理图,LD2(红)为 P1_1口控制;主扩展板为 GLED;从扩展板为 D3(黄) */
#define K1 P0_4
//K1为扩展板的 CANCEL 键,在 P0_4口
#define K2 P0_5
//K2为扩展板的 OK 键,在 P0_5口
//函数声明
#define uint unsigned int
#define uchar unsigned char
#define ON 0
//定义 LED 状态,ON 为亮,OFF 为灭
#define OFF 1
//定义控制灯的端口
#define RLED P1_0
/* 根据原理图,LD1(黄)为 P1_0口控制;主扩展板为 RLED;从扩展板为 D2(红) */
//延时函数
*****************************/
void Delay(uint n)
{ uint tt; for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); for(tt = 0;tt<n;tt++); } /***************************************** //按键初始化函数,原理图中按键连在 P0_4和 P0_5,所以进行了修改 void InitKey(void) { P1SEL &= ~0X0C;//作用是将 P12 P13设为普通 I/O 口,但默认就是,不知道为什么还要加此语句 P1DIR &= ~0X0C; //按键在 P12 P13 P1INP |= 0x0c; //上、下拉 } *****************************************/ void InitKey(void) { //P0SEL &= ~0X30; P0DIR &= ~0x30; //将连接按键的 P0_4、P0_5口设置为输入 P0INP |= 0x30; //将 P0_4、P0_5口的输入状态设置为三态,以读取按键的状态 } /**************************** //初始化程序 *****************************/ void Initial(void)

zigbee协议栈的使用流程

zigbee协议栈的使用流程

Zigbee协议栈的使用流程1. 什么是Zigbee协议栈Zigbee协议栈是一种基于IEEE 802.15.4标准的低功耗、自组织的无线通信协议。

它被广泛应用于物联网设备、智能家居、工业自动化等领域。

Zigbee协议栈提供了一套完整的网络协议和通信机制,方便开发者在无线传感器网络中进行通信和数据交换。

2. Zigbee协议栈的使用流程Zigbee协议栈的使用流程可以分为以下几个步骤:步骤一:选择Zigbee协议栈在开始使用Zigbee协议栈之前,首先需要选择合适的Zigbee协议栈。

目前市面上有许多不同的Zigbee协议栈提供商,可以根据自己的需求选择适合的协议栈。

步骤二:准备开发环境在开始使用Zigbee协议栈之前,需要准备好相应的开发环境。

这包括硬件设备、开发工具以及相应的驱动程序。

一般来说,开发者需要购买Zigbee芯片和开发板,并安装相应的开发工具和驱动程序。

步骤三:编写应用程序一旦准备好开发环境,就可以开始编写Zigbee应用程序了。

首先,需要了解Zigbee协议栈的API和接口,理解Zigbee网络的特点和通信机制。

然后,根据具体需求,设计和实现相应的功能模块,例如网络配置、数据传输和安全性等。

步骤四:测试和调试编写完应用程序后,需要进行测试和调试,以确保程序的正确性和稳定性。

可以通过模拟器或者实际的Zigbee设备进行测试。

测试过程中需要注意检查网络连接、数据传输和异常情况处理等方面的功能。

步骤五:部署和运行在完成测试和调试后,就可以将应用程序部署到真实的Zigbee设备上了。

根据具体的部署场景,可能需要进行设备安装、网络配置和数据监控等工作。

一旦部署完成,就可以正式运行Zigbee协议栈,并进行数据交换和通信了。

3. 使用Zigbee协议栈的注意事项在使用Zigbee协议栈的过程中,需要注意以下几个方面:•理解Zigbee网络的拓扑结构和层次关系,合理设计网络拓扑和路由规划。

•注意设备之间的信号强度和信号干扰的问题,确保通信质量和稳定性。

12Zigbee实验报告《协议栈按键控制led》

12Zigbee实验报告《协议栈按键控制led》
实验步骤:
添加自己的按键驱动步骤:
第一步:修改hal ey.c
1、修改SW6所在10口,对应自己开发板上的按键
2、修改触发方式
3、修改对应的中断一些相关标志位
4、不需要用到TI的摇杆J-STICK,所以把代码注释掉·
第二步:修改halboardcfg.h文件
5、修改SW-6所在10口
第三步:修改OnBoard.C文件。
实验内容与步骤
按键驱动,主要有两种方法。一种是普通的轮询,不断查询是否按下按键。另一种是通过中断来产生事件中断与轮询的区别按键
中断和轮询的主要区别是轮询需要CPU定期的检查按键状态,当检测到按键按下则发出HAL KEY EVENT消息到HAL层来执行处理,中断则是当有按键按下立刻向HAL KEY EVENT发出消息,不需要CPU的检查。轮询的实时性比中断要差点,推荐用中断方式。
在ZMain.C目录树下:6、是否使能中断
第四部: SampleApp ProcessEvent中
7、添加case KEY CHANGE,修改按键服务程序
第二页
实验内容与步骤
第三页
实验内容与步骤
实验总结
教师评定
签字: 年 月 日
2019——2020学年第二学期
专业
班级
学号
姓名
日期
2019——2020学年第二学期
专业
班级
学号
姓名
日期
第一页
实验题目
实验目的
本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动. hal board-cfg.h. hal board-cfg.h, halkey.c. halkey.h和自己定义的Coordinator.c这5

2Zigbee实验报告《按键》

2Zigbee实验报告《按键》

2019——2020学年第二学期专业班级学号姓名日期第一页实验题目CC2530之按键与LED实验目的通过板载按键来控制LED的亮灭实验内容与步骤首先,先来查看与LED及按键相关的电路图。

由图可知,当CC2530端口1的0号引脚输出低电平时,LED1将被点亮。

当按键S1按下时,端口0的1号引脚将为低电平,抬起时为高电平。

接下来,先查看与LED(P1_0)配置相关的寄存器。

1. 端口1功能选择寄存器。

这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为普通的I/O口,若设置为1,则将相关引脚设为外设I/O,默认值都为0。

第二页实验内容与步骤2.端口1方向选择寄存器。

这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为输入引脚,若设置为1,则将相关引脚设为输出引脚,默认值都为0。

3.端口1输入模式寄存器。

这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为上拉/下拉模式,若设置为1,则将相关引脚设为三态模式,其中P1_0和P1_1没有上拉/下拉功能,可以不用配置,默认值都为0。

再来看看与按键S1(P0_1)配置相关的寄存器。

1. 端口1功能选择寄存器。

这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为普通的I/O口,若设置为1,则将相关引脚设为外设I/O,默认值都为0。

2.端口1方向选择寄存器。

这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为输入引脚,若设置为1,则将相关引脚设为输出引脚,默认值都为0。

第三页。

zigbee模块设置使用说明

zigbee模块设置使用说明

Zigbee简介:Zigbee网络通常由三种节点构成:z协调器(Coordinator):用来创建一个Zigbee网络,并为最初加入网络的节点分配地址,每个Zigbee网络需要且只需要一个Coordinator.z路由器(Router):也称为Zigbee全功能节点,可以转发数据,起到路由的作用,也可以收发数据,当成一个数据节点,还能保持网络,为后加入的节点分配地址.z终端节点(End Device):通常定义为电池供电的低功耗设备,通常只周期性发送数据。

或者通过休眠按键控制节点的休眠或工作。

注意:三种Zigbee节点的P ANID在相同的情况下,可以组网并且互相通讯(上电即组网,不需要人为干预)。

这样可以通过P ANID区分zigbee网络,在同一个区域内,可以同时并存多个zigbee网络,互相不会干扰。

Panid设置见下。

管脚定义:z P1.5:休眠键,输入脚,p1.5拉高时,休眠有效。

模块如果是Cornidator、Router 时此脚无效,只有模块是Enddevice时,此脚才有效,如果不需要休眠功能,则此脚与GND连接。

z p1.7:Set键,输入脚,p1.7拉高时候,设置功能有效,平时模块处于数据收发状态时,此引脚应为低电平,具体设置功能见下节z p2.0 网络连接状态灯,输出脚,模块如果是Router或Enddevice时,此按键表明当前模块是否入网,高电平表明入网,低电平表明没有入网。

z p0.2:Rx,与外置MCU的Tx连接z P0.3:Tx,与外置MCU的Rx连接z GND:电源地z VCC:电源3.3V用户在使用时候,可以根据自己需要选择引脚。

最简单的情况是只使用Rx、Tx.、GND、VCC四个脚,但需要将P1.5(休眠键)、P1.7(设置键)接地。

P2.0(网络连接状态)悬空。

当P1.7为高,通过串口对模块进行设置,数据格式如下(以下数据均为16进制):说明:模块处于设置状态时,波特率固定为38400.即P1.7为高时,模块波特率为38400;P1.7为低时,波特率为设置的波特率,波特率设置见下面命令。

物联网ZigBee协议栈解析(加入网络)

物联网ZigBee协议栈解析(加入网络)
软件清单
开发平台:AR EW8051 7.51A 驱动软件: CP210x驱动包 例 程:文件包GenericApp
GenericApp
• “..\Samples CC2530\GenericApp\SX2530
不可更改或者移出 任务
代码分析2
不可移出任 务
• OS信息处理。 • 异常任务处理。
查看函数
组装系统
修改通道
• 为了方便大家集中学习,我们已经在每 套学习系统中标明了相关的通道与PanId 请各位严格使用自己的通道与PanId
修改PanId
• 为了方便大家集中学习,我们已经在每 套学习系统中标明了相关的通道与PanId 请各位严格使用自己的通道与PanId
GenericApp 形成或者加入一个网络
本章利用简单应用程序 GenericApp 实现ZigBee相关功能例程的讲解 在指定通道和pan上形成一个网络 设备加入指定特定参数的网络
实验准备
硬件清单
C51FF-PS-F V21仿真器一块 SMBD-V1.2 底板一块 SMBD-V11-1底板两块 RF-2530无线模块三块 Mini USB线2条 AAA电池8只
ZigBee工程
子工程
配置文件
链接配置文件
全局配置文

• ZigBee的大部分配置都放在相关的配置
节点设备文的件中
配置文件
协调器的配置 文件
路由器配置 文件
配置通道
通道选择
通道全 局变量
f8wConfig.cfg中配置PAN ID
• 如果 PAN_ID = 0xFFFF 设备类型是协调者
• 设备将使用物理地址最后两个字节作为PAN_ID
zigbee工程子工程配置文件zigbee的大部分配置都放在相关的配置文件中链接配置文件全局配置文协调器的配置文件节点设备的配置文件路由器配置文件配置通道通道全局变量通道选择f8wconfigcfg中配置panid0xffff设备类型是协调者0xffff设备类型是路由器或者终端节点设备0xffff设备类型是协调者0xffff设备类型是路由器或者终端节点设备设备将只能加入该panid指定的网络genericapp形成或者加入一个网络本章利用简单应用程序genericapp实现zigbee相关功能例程的讲解在指定通道和pan上形成一个网络设备加入指定特定参数的网络实验准备硬件清单c51ffpsfv21仿真器一块smbdv12底板一块smbdv111底板两块rf2530无线模块三块miniusb线2条aaa电池8只软件清单开发平台

基于ZigBee的无线键盘的设计与实现

基于ZigBee的无线键盘的设计与实现

基于ZigBee的无线键盘的设计与实现无线键盘作为一种便携、灵活的输入设备,广泛应用于各类电子设备中。

为了提高无线键盘的性能和实用性,基于ZigBee通信技术的无线键盘逐渐引起了人们的关注。

本文将介绍基于ZigBee的无线键盘的设计与实现。

首先,我们需要了解ZigBee通信技术的基本原理。

ZigBee 是一种低功耗、低速率的无线通信技术,它采用短距离、低功耗的无线传输方式,适用于小范围、低速率的无线通信。

通过ZigBee通信技术,无线键盘可以与电脑或其他设备进行无线连接,实现数据传输和控制。

基于ZigBee的无线键盘的设计与实现主要包括以下几个方面。

首先是硬件设计,包括键盘矩阵、按键开关、控制电路等。

键盘矩阵是无线键盘的核心部件,它由多个按键组成,每个按键与一个按键开关相连。

按下某个按键时,按键开关会闭合,电流流过,通过控制电路将按键信息转换为数字信号发送给ZigBee模块。

其次是软件设计,包括ZigBee协议栈的开发、按键扫描算法的实现等。

ZigBee协议栈是无线键盘与其他设备进行通信的关键,它负责数据的传输和处理。

按键扫描算法是为了检测用户按下的按键,并将按键信息发送给ZigBee模块。

通过软件设计,实现了无线键盘的功能和性能。

最后是无线键盘的测试和应用。

在设计完成后,我们需要对无线键盘进行测试,包括按键的灵敏度、通信的稳定性等。

在测试通过后,无线键盘可以应用于各类电子设备,如电脑、智能手机等,提供无线输入的便利性和灵活性。

综上所述,基于ZigBee的无线键盘通过采用ZigBee通信技术,实现了无线连接和数据传输的功能。

通过硬件设计、软件设计和测试应用等步骤,实现了无线键盘的设计与实现。

基于ZigBee的无线键盘具有低功耗、灵活性强的特点,能够满足人们对无线键盘的各种需求,具有广阔的应用前景。

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计

ZigBee协议栈的分析与设计ZigBee协议栈的分析与设计引言随着物联网的不断发展,无线传感器网络(WSN)得到了广泛的应用。

ZigBee作为一种低功耗、短距离、低带宽的无线通信协议,逐渐成为物联网中最受欢迎的通信协议之一。

本文将对ZigBee协议栈进行深入的分析与设计,以期更好地理解其工作原理并提供一种优化方案。

一、ZigBee协议栈的结构与功能1. ZigBee协议栈结构ZigBee协议栈由两部分组成:上层和下层。

上层包括应用层(Application Layer)、网络层(Network Layer)和安全层(Security Layer)。

下层包括物理层(Physical Layer)和介质访问控制层(Media Access Control Layer)。

2. ZigBee协议栈功能- 物理层(Physical Layer):负责将数据转换为无线信号,通过无线传输介质进行通信。

ZigBee协议栈支持多种物理层标准,例如2.4GHz、900MHz和868MHz等。

- 介质访问控制层(Media Access Control Layer):负责数据帧的分发和接收,同时处理多跳中继和协议转发。

- 网络层(Network Layer):提供网络拓扑管理、路由选择、数据包传输和安全性等功能。

ZigBee协议栈使用了Ad-hoc On-Demand Distance Vector(AODV)路由协议来实现自组网和动态路由选择。

- 应用层(Application Layer):定义应用程序的协议和接口,包括设备发现、网络配置、设备控制等功能。

- 安全层(Security Layer):提供数据加密和认证等安全机制,确保通信的可靠性和机密性。

二、ZigBee协议栈的分析1. 物理层分析ZigBee协议栈采用低功耗、短距离的射频通信技术。

2.4GHz频段是其最常用的无线传输介质,具有广泛的应用领域。

ZigBee协议栈使用了Direct Sequence Spread Spectrum (DSSS)技术来提高抗干扰性能。

zigbee协议栈按键流程

zigbee协议栈按键流程

我使用的协议栈版本及例子信息:ZigBee2006\Texas Instruments\ZStack-1.4.3-1.2.1\Projects\zstack\Samples\SampleApp记录下个人对按键流程的理解在hal_key.c中有一段说明:/*********************************************************************NOTE: If polling is used, the hal_driver task schedules the KeyRead() to occur every 100ms. This should be long enough to naturallydebounce(去抖动) the keys. The KeyRead() function remembers the keystate of the previous poll and will only return a non-zerovalue if the key state changes.NOTE: If interrupts are used, the KeyRead() function is scheduled25ms after the interrupt occurs by the ISR. This delay is usedfor key debouncing. The ISR disables any further Key interruptuntil KeyRead() is executed. KeyRead() will re-enable Keyinterrupts after executing. Unlike polling, when interruptsare enabled, the previous key state is not remembered. Thismeans that KeyRead() will return the current state of the keys(not a change in state of the keys).NOTE: If interrupts are used, the KeyRead() fucntion is scheduled by the ISR. Therefore, the joystick movements will only be detectedduring a pushbutton interrupt caused by S1 or the center joystickpushbutton.NOTE: When a switch like S1 is pushed, the S1 signal goes from a normally high state to a low state. This transition is typically clean. Theduration of the low state is around 200ms. When the signal returnsto the high state, there is a high likelihood of signal bounce, whichcauses a unwanted interrupts. Normally, we would set the interruptedge to falling edge to generate an interrupt when S1 is pushed, butbecause of the signal bounce, it is better to set the edge to risingedge to generate an interrupt when S1 is released. The debounce logiccan then filter out the signal bounce. The result is that we typicallyget only 1 interrupt per button push. This mechanism is not totallyfoolproof because occasionally, signal bound occurs during the fallingedge as well. A similar mechanism is used to handle the joystickpushbutton on the DB. For the EB, we do not have independent controlof the interrupt edge for the S1 and center joystick pushbutton. Asa result, only one or the other pushbuttons work reasonably well withinterrupts. The default is the make the S1 switch on the EB work morereliably.*********************************************************************/对本协议中,对按键有两种处理方式:1、中断法:有按键按下,则进入中断,开启一软定时器25ms后,读取键值进行相应处理2、查询法:开启一软定时器,系统每隔100ms进行轮询,如有按键按下读取键值进行相应处理(软定时器即软件定时器,参见“系统时钟定时器”说明)首先看下协议栈对KEY的初始化,在InitBoard()函数中:/* Initialize Key stuff */OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);从而知道协议栈默认的按键处理机制是查询法.就先来看下查询法的流程:1、查询法(或者轮询法)首先看下HalKeyConfig()这个函数用于把按键/开关/操纵杆服务配置为轮询或中断驱动。

ZigBee协议栈NV操作

ZigBee协议栈NV操作

NV操作实验
static void rxCB(unit8 port,uint8 event); { Uint8 value_read;//定义一个变量从用于从NV存储器读 取数据。 uint8 value=18;//要写入的NV条目数据 uint8 uartbuf[2];//定义一个缓冲区用于存放读取数据 uint8 cmd[6];//定义一个命令缓冲区,存放读取的命令 HalUARTRead(0,cmd,6)读取的命令放在cmd数组中
#include "hal_key.h" #include "sensor.h" #ifdef EXSENSOR #include "exsensor.h" #endif #include "hal_adc.h" #include "MT_UART.h #include”OSAL_Nv.h”//添 加代码
uint8 value=20; //添加写入NV条目变量 …………………………………………. case SPI_INCOMING_ZTOOL_PORT: HalUARTRead( MT_UART_DEFAULT_PORT,R_Buffer.data, 16 ); if( osal_nv_item_init(TEST_NV,1,NULL) == ZSUCCESS ) {
NV操作函数
Uint8 osal_nv_write(uint16 id,uint16 ndx,uint16,len,void*buf) 这个是NV写入函数。该函数4个参数含义如下: Uint16 id:NV条目ID号; Uint16 ndx:距离条目开始地址的偏移量; Uint16len:要写入的数据长度; Void*buf:指向存放写入数据缓冲代码:

Zigbee无线自主网络键盘

Zigbee无线自主网络键盘

硬件电路图
发送端硬件结构
硬件电路图
软件流程
初始化 JN5121

NO
查找ZigBee网络并连接接收端成功吗?

YES

NO
有键按下吗?

YES


读取键盘编码

发送键盘编码
NO
发送成功吗?
YES
软件流程
ZigBee事件处理流程
NO
NO
YES
开始
加入了ZigBee键盘网络吗? YES
调用读取编码函数 读取键盘编码
5
4
3
Zigbee无线自主网络键盘
Keyboard Based on ZigBee of Wireless Network
LOGO
Contents
总体介绍 系统方案 硬件设计与软件流程 方案特色与应用领域
演示截图
总体介绍
❖ 本作品设计并实现了一个Zigbee无线自主网络键盘。
❖ Zigbee无线自主网络键盘实现了一个键盘控制一台计算机,一个键盘 控制多台计算机,多个键盘控制一台计算机,以及多个键盘控制多台 计算机等功能。
将发送端加入网络 YES 有加入网络的请求吗?
读取键盘编码
发送键盘编码给主 机
初始化JN5121及加入 Receiver1启动的网络

响应绑定请求 YES
有发送端过来的绑定请求吗



NO


接收键盘编码,有键吗?
NO

YES
读取键盘编码
发送键盘编码给 主机
Contents
接收端通过 中断将按键 编码发送到
EZ-USBFX2主控芯 片上

协议栈下的按键实验.

协议栈下的按键实验.

修改为 PUSH1_BV
BV(4)
P0_1 P0_4
144行: #define PUSH1_SBIT 修改为 #define PUSH1_SBIT
一、修改协议栈按键定义
第三步:
1、打开OnBoard.C文件(位于ZMain目录下)
一、修改协议栈按键定义
2、使能按键中断
137行: OnboardKeyIntEnable = HAL_KEY_INTERRUPT_DISABLE;
该函数作为SampleApp任务的主要处理函数,是供给用户实现应用层功能的地方。 其中包含了几种常用的消息事件 1、 case KEY_CHANGE: 按键事件 2、 case AF_INCOMING_MSG_CMD: 无线接收消息事件 3、 case ZDO_STATE_CHANGE: Zigbee设备网络状态改变事件 。。。用户也可自定义事件
修改为 #define HAL_KEY_SW_6_ICTLBIT BV(4)
一、修改协议栈按键定义
第二步:
1、打开 hal_board_cfg.h文件(位于HAL—Target—CC2530DB—Config)
一、修改协议栈按键定义
2、修改SW_6所在IO口
143行: PUSH1_BV BV(1)
一、修改协议栈按键定义
第一步: 1、打开hal_key.c文件(位于HAL—Target—CC2530DB—Drivers)
一、修改协议栈按键定义
2、修改SW_6所在IO口
113行: #define HAL_KEY_SW_6_BIT BV(1)
修改为 #define HAL_KEY_SW_6_BIT BV(4)
一、修改协议栈按键定义
3、修改边缘触发方式

zigbee的协议栈中最底层

zigbee的协议栈中最底层

zigbee的协议栈中最底层低层协议栈协议本协议栈由以下双方签署:甲方:______________(以下简称“厂商”)地址:_______________联系方式:______________乙方:______________(以下简称“客户”)地址:_______________联系方式:______________鉴于:1、厂商是一家专业从事无线传感器网络技术相关业务的公司,具备相关技术和资质。

2、客户欲使用厂商的zigbee协议栈中最底层协议。

根据《中华人民共和国民法典》和其他相关法律法规的规定,经双方友好协商,达成以下协议:第一条协议的目的本协议的目的是为了明确双方的权利和义务,规范双方的行为,保障双方的利益。

第二条协议内容1、厂商应提供符合客户所需的zigbee协议栈中最底层协议。

2、客户应按照合同约定的付款方式按时支付费用。

3、本协议履行期限为___________(自_____________起至________________止),协议期满前客户可提交续约申请。

第三条知识产权1、厂商是zigbee协议栈中最底层协议的拥有者,协议中的一切知识产权(包括但不限于著作权、专利权、商标权)均归厂商所有。

2、未经厂商的书面同意,客户不得将本协议的任何内容用于商业用途并不得向第三方泄露知识产权信息。

第四条违约责任1、一方违反本协议任何一条规定,给另一方造成损失的,应承担相应的赔偿责任。

2、客户未按照合同约定的金额或期限支付费用的,厂商有权取消协议并要求客户承担相应的违约责任。

第五条法律效力及解决争议的方式1、本协议各项规定是双方共同遵守的法律行为准则,其效力与权利义务具有法律效力。

2、如对本协议的履行发生争议,双方应通过友好协商加以解决,协商不成的,可以向厂商所在地人民法院提起诉讼。

第六条其他事项1、本协议如有未尽事宜,双方可根据需要另行协商,达成一致后以书面形式作为补充协议。

2、本协议一式两份,双方各执一份,具有同等法律效力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本实验是基于ZStack-CC2530-2.5.1a版本的协议栈来进行实验的,整个实验需要改动hal_board_cfg.h、hal_board_cfg.h、hal_key.c、hal_key.h和自己定义的Coordinator.c这5个文件。

注意:添加自己的按键时尽量不要修改协议栈里面的按键程序,自己另行添加即可。

1、hal_key.h在/* Switches (keys) */下面添加自己的按键定义#define HAL_KEY_SW_8 0x80图1:----------------------------------------------------------------------------------------2、hal_board_cfg.h在/* S6 */#define PUSH1_BV BV(1)#define PUSH1_SBIT P0_1#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH1_POLARITY ACTIVE_LOW#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH1_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif下面模仿/* S6 */下的程序定义自己的按键值:/* S8 */#define PUSH8_BV BV(4)//修改#define PUSH8_SBIT P0_4//修改#if defined (HAL_BOARD_CC2530EB_REV17)#define PUSH8_POLARITY ACTIVE_HIGH#elif defined (HAL_BOARD_CC2530EB_REV13)#define PUSH8_POLARITY ACTIVE_LOW#else#error Unknown Board Indentifier#endif图2:------------------------------------------------------------------------------------------------------------- 在/* ----------- Push Buttons ---------- */#define HAL_PUSH_BUTTON1() (PUSH1_POLARITY (PUSH1_SBIT))#define HAL_PUSH_BUTTON2() (PUSH2_POLARITY (PUSH2_SBIT))#define HAL_PUSH_BUTTON3() (0)#define HAL_PUSH_BUTTON4() (0)#define HAL_PUSH_BUTTON5() (0)#define HAL_PUSH_BUTTON6() (0)下定义自己的按键函数#define HAL_PUSH_BUTTON8() (PUSH8_POLARITY (PUSH8_SBIT))图3:---------------------------------------------------------------------------------------------------------------- hal_key.c在/* SW_6 is at P0.1 */#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT BV(1)#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_6_EDGEBIT BV(0)#define HAL_KEY_SW_6_EDGE HAL_KEY_FALLING_EDGE/* SW_6 interrupts */#define HAL_KEY_SW_6_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_6_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_6_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_6_ICTLBIT BV(1) /* P0IEN - P0.1 enable/disable bit */#define HAL_KEY_SW_6_PXIFG P0IFG /* Interrupt flag at source */下模仿/* SW_6 is at P0.1 */建立自己的按键函数#define HAL_KEY_SW_8_PORT P0#define HAL_KEY_SW_8_BIT BV(4) //修改#define HAL_KEY_SW_8_SEL P0SEL#define HAL_KEY_SW_8_DIR P0DIR/* edge interrupt */#define HAL_KEY_SW_8_EDGEBIT BV(0)#define HAL_KEY_SW_8_EDGE HAL_KEY_FALLING_EDGE/* SW_8 interrupts */#define HAL_KEY_SW_8_IEN IEN1 /* CPU interrupt mask register */#define HAL_KEY_SW_8_IENBIT BV(5) /* Mask bit for all of Port_0 */#define HAL_KEY_SW_8_ICTL P0IEN /* Port Interrupt Control register */#define HAL_KEY_SW_8_ICTLBIT BV(4) //修改#define HAL_KEY_SW_8_PXIFG P0IFG /* Interrupt flag at source */图4:-------------------------------------------------------------------------------------------------------------注意:将void HalKeyPoll (void)中的// if ((HAL_KEY_JOY_MOVE_PORT & HAL_KEY_JOY_MOVE_BIT)) /* Key is active HIGH */// {// keys = halGetJoyKeyInput();// }/* If interrupts are not enabled, previous key status and current key status* are compared to find out if a key has changed status.*/// if (!Hal_KeyIntEnable)// {// if (keys == halKeySavedKeys)// {/* Exit - since no keys have changed */// return;// }/* Store the current keys for comparation next time */// halKeySavedKeys = keys;// }// else// {/* Key interrupt handled here */// }图5:全部注释掉,因为它会对我们设定的按键产生干扰,具体情况我也不知道... 然后再在内模仿:if (HAL_PUSH_BUTTON1()){keys |= HAL_KEY_SW_6;}添加:if (HAL_PUSH_BUTTON8()){keys |= HAL_KEY_SW_8;}图6:------------------------------------------------------------------------------------------------------------- OnBard.c将void InitBoard( uint8 level ){if ( level == OB_COLD ){// IAR does not zero-out this byte below the XSTACK.*(uint8 *)0x0 = 0;// Interrupts offosal_int_disable( INTS_ALL );// Check for Brown-Out resetChkReset();}else // !OB_COLD{/* Initialize Key stuff */HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback); //修改此处}}改为:HalKeyConfig(HAL_KEY_INTERRUPT_ENABLE, OnBoard_KeyCallback);记得在任务初始化函数中加入RegisterForKeys( GenericApp_TaskID ); //注册按键事件图7:最后再在Coordinator.c中的uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )添加事件及其处理函数case KEY_CHANGE:GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );再在static void GenericApp_HandleKeys( uint8 shift, uint8 keys ){zAddrType_t dstAddr;if ( keys & HAL_KEY_SW_1 ){}if ( keys & HAL_KEY_SW_2 ){}if ( keys & HAL_KEY_SW_3 ){}if ( keys & HAL_KEY_SW_4 ){}if ( keys & HAL_KEY_SW_8 ) //添加自己的按键及其处理函数{HalLedSet(HAL_LED_1, HAL_LED_MODE_FLASH);}}。

相关文档
最新文档