ZigBee协议栈到底是什么?如何应用?

ZigBee协议栈到底是什么?如何应用?,第1张

协议是个标准,是约定;

协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用。

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

你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理

还有系统里的设备之间的通信顺序什么的

当你的应用需要数据通信时,

调用组网函数给你组建你想要的网络;

当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;

当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。

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

每个厂商的协议栈有区别,也就是函数名称和参数可能有区别

这个要看具体的例子、说明文档

以下答案,仅供参考:

按照本人多年的工作经历,ZigBee产品的形态大体分为四类:ZigBee芯片、嵌入式ZigBee模块、ZigBee设备、ZigBee网关。大体功能如下:

1 ZigBee芯片。这属于ZigBee产品的最上端了,主要由芯片厂商推出,比如TI、Freescale等,主要是面对下游集成厂商,通过外围电路开发,做出成品。当然也会有一些大的厂商直接用ZigBee芯片做产品,节省开支。但是所耗时间较长。

2 嵌入式ZigBee模块。这个是目前市面上流行最广的了,都是通过采用ZigBee芯片做的外围电路开发,功能、尺寸等等,都有很大变化。国内比较知名的厂商有:顺舟科技、赫立讯(目前已倒闭)、南京物联等。主打工业、化工、安防、环境监测等,近前悔两年比较流行的物联网应用,则使ZigBee模块更火,饥唤比如智能家居、智能照明、智慧城市等。

3 ZigBee设备,这个是集成好的ZigBee产品,主要是通过串口(232/485/USB)、网口(NET)进行封装好的产品,客户不需要二次开发,拿来就可以用,比较适合项目类应用。

4 ZigBee网关。这个目前在国内的厂商很少有人在做,包括国外,也很少。通过集成其他无线技术,做到跨无线技术的集成,比如ZigBee & GPRS网关(SZ11-03)、ZigBee & Wi-Fi网关(SZ12-03)就实现了跨网间的数据同步。

回到问题本身,ZigBee的具体应用,更多的是看项目或产品的需求本烂悔凯身,然后选择合适的形态。

以下答案,仅供参考:

按照本人多年的工作经历,ZigBee产品的形态大体分为四类:ZigBee芯片、嵌入式ZigBee模块、ZigBee设备、ZigBee网关。大体功能如下:

1 ZigBee芯片。这属于ZigBee产品的最上端了,主要由芯片厂商推出,比如TI、Freescale等,主要是面对下游集成厂商,通过外围电路开发,做出成品。当然也会有一些大的厂商直接用ZigBee芯片做产品,节省开支。但是所耗时间较长。

2 嵌入式ZigBee模块。这个是目前市面上流行最广的了,都是通过采用ZigBee芯片做的外围电路开发,功能、尺寸等等,都有很大变化。国内比较知名的厂商有:顺舟科技、赫立讯(目前已倒闭)、南京物联等。主打工业、化工、安防、环境监测等,近前悔两年比较流行的物联网应用,则使ZigBee模块更火,饥唤比如智能家居、智能照明、智慧城市等。

3 ZigBee设备,这个是集成好的ZigBee产品,主要是通过串口(232/485/USB)、网口(NET)进行封装好的产品,客户不需要二次开发,拿来就可以用,比较适合项目类应用。

4 ZigBee网关。这个目前在国内的厂商很少有人在做,包括国外,也很少。通过集成其他无线技术,做到跨无线技术的集成,比如ZigBee & GPRS网关(SZ11-03)、ZigBee & Wi-Fi网关(SZ12-03)就实现了跨网间的数据同步。

回到问题本身,ZigBee的具体应用,更多的是看项目或产品的需求本烂悔凯身,然后选择合适的形态。

如果我的回答可以帮到您,请您采纳哦!

如果智能家居网关里面就有ZigBee,那么直接用ZigBee节点和ZigBee协调器通信就行,协议栈已经写好了组网方式,组网过程等等,你需要做的就是调用发送函数发送数据,并且在ZigBee网关那里添加接收处理函数,大致是这样的。

/

实验说明:UART0,波特率115200bps,PC机向CC2430送字符串(以@字符结束),CC2430收到后返回该字符串

/

#include <ioCC2430h>

#define uchar unsigned char

uchar recv_buf[50]={0};

uchar recv_count = 0;

//uchar str[10]="abcdef";

/系统时钟初始化

-------------------------------------------------------/

void xtal_init(void)

{

SLEEP &= ~0x04; //都上电

while(!(SLEEP & 0x40)); //晶体振荡器开启且稳定

CLKCON &= ~0x47; //选择32MHz 晶体振荡器

SLEEP |= 0x04;

}

/UART0通信初始化

-------------------------------------------------------/

void Uart0Init(unsigned char StopBits,unsigned char Parity)

{

PERCFG&= ~0x01; //选择UART0为可选位置一,即RXD接P02,TXD接P03

P0SEL |= 0x0C; //初始化UART0端口,设置P02与P03为外部设备IO口

U0CSR = 0xC0; //设置为UART模式,并使能接收器

U0GCR = 11;

U0BAUD = 216; //设置UART0波特率为115200bps,至于为何是216和11,可查阅CC2430中文手册

U0UCR |= StopBits|Parity; //设置停止位与奇偶校验

}

/UART0发送数据

-------------------------------------------------------/

void Uart0Send(unsigned char data)

{

while(U0CSR&0x01); //等待UART空闲时发送数据

U0DBUF = data;

}

/UART0发送字符串

-------------------------------------------------------/

void Uart0SendString(char s)//字符串首地址赋给了s

{

while(s !='\0') //依次发送字符串s中的每个字符

Uart0Send((s++));

}

/UART0接受数据

-------------------------------------------------------/

unsigned char Uart0Receive(void)

{

unsigned char data;

while(!(U0CSR&0x04)); //查询是否收到数据,否则继续等待

data=U0DBUF; //提取接收到的数据

return data;

}

/主函数

-------------------------------------------------------/

void main(void)

{

char i,b;

//str='a';

xtal_init();

Uart0Init(0x00,0x00); //初始化UART0,设置1个停止位,无奇偶校验

Uart0SendString("welcome to wust\n");

// Uart0Send(str[0]);

recv_count = 0;

while(1)

{

while(1)

{

b = Uart0Receive();

if(b=='@')break; //若接收到'@',则跳出循环,输出字符串

recv_buf[recv_count] = b; //若不是'@',则继续向字符数组recv_buf[]添加字符

recv_count++;

}

for(i=0; i<recv_count; i++) //输出字符串

Uart0Send(recv_buf[i]);

Uart0SendString("\n");

recv_count =0; //重置

}

}

(1)OSAL(Operating System Abstraction Layer),即“ *** 作系统抽象层”。

Zigbee协议栈里面的OSAL是基于时间片轮询机制的,也就是说系统以固定的周期不断的查询是否有事件发生,如果有事件发生则判断相应事件的处理任务,由事件对应的处理任务完成事件的处理,完成对事件的整个处理过程。

(2)关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。

协议栈中的OSAL和状态机只是实现事件处理的两种调度方式,其本质都是基于事件驱动的。

(3)关于设计一个协议栈

协议栈即某种协议的代码实现,中间涉及硬件实现以及软件实现两部分。对于初学者首先学会如何使用协议栈才是关键,可以不用考虑协议栈采用哪种调度方式 。

希望我的回答对你有帮助!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/12460821.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存