Zigbee无线设备通信
文章平均质量分 80
本专栏包含CC2530裸板的各种外设的介绍和使用原理,Zigbee组网过程讲解、Z-stack协议栈的原理介绍和使用过程、如何使用Dongle进行无线数据包抓取以及Zigbee单播、广播、组播、MAC、绑定五种通信方式的实现过程
竹烟淮雨(考研ing)
如果结果不如你所愿
就在尘埃落定前奋力一搏
展开
-
ZigBee组网-基于协议栈的UART实验(实现收发)(保姆级)
与之前的Zigbee裸机实验不同,如果单纯的把CC2530的裸机串口实验的UART作为BSP支持包移植到我们的Zstack协议栈中调用是行不通的。我今天在做Zigbee单播实验的过程中就想把前面学习的裸机串口直接改改来过来用,结果发现根本用不了,不仅串口收发不了数据,还导致CC2530模块卡死,连协议栈的其它功能也被毁掉了。后来通过查阅资料和自己一晚上的琢磨,成功实现了协议栈中UART的使用,实现了串口与电脑上位机的收发通信。接下来进行Zigbee协议栈中的UART的使用讲解。原创 2023-06-30 01:14:31 · 2404 阅读 · 7 评论 -
常见物联网组网技术对比
对于全功能器件,要求它支持所有的49个参数。(2)功耗较低:NB-IoT有三种不同的省电模式:PSM模式、DRX模式、eDRX模式,设备可以根据自己的需求选择省点模式,达到功耗最小的目的,可以延长电池的使用寿命,在针对许多使用电池供电的设备和局面,NB-IoT 的低功耗特性能够保证设备续航时间,从几个月大幅提升到几年,因此大大降低了频繁更换电池带来的不便。然而,对于智能家居的应用场景中,开关,插座,窗帘的位置一旦固定,一直不变,自组网的优点也就不复存在,但是自组网所耗费的时间和资源却依旧高昂。原创 2023-06-16 01:15:02 · 309 阅读 · 0 评论 -
Zigbee学习准备工作(相关软件和Zigbee学习资料下载)
包括IAR软件和注册机、驱动程序、Zigbee模块原理图,官方中文手册,Zstack协议栈手册、千峰物联网ZIgbee相关的学习笔记和参考程序。我使用的ZIgbee模块是蜂汇电子webee生产的,淘宝有卖。CZ0001 我分享给你了一个超赞的内容,快来看看吧)关于IAR的安装和ZIgbee工程创建可参考以下博客。原创 2023-06-16 19:58:30 · 303 阅读 · 0 评论 -
Zigbee入门概念及背景知识
在学习Zigbee之前,需要了解与单片机学习的方法不同之处以及难点所在。学习Zigbee需要掌握协议栈和网络等相关知识,任务量较大。Zigbee的资料相对较少,初学者学习起来比较费劲,学习效果不理想。学习过程中需要利用软件和硬件工具,提高学习效率。Zigbee是一种无线通信方式,用于构建无线局域网,可以用于家居、工业、矿产、农业、医疗等领域。相比蓝牙和WIFI,Zigbee可以组建大规模网络,功耗低,但通信速率较小。Zigbee和以太网组网技术有所不同,用途、拓扑结构和通信特性等方面存在差异。Zigbee的原创 2023-06-16 01:20:05 · 1869 阅读 · 0 评论 -
lesson1:ZIgbee点灯(工程配置+流水灯)
(1)将仿真器SmartRF04EB连接电脑,然后打开设备管理器,发现设备出现黄色"!(1)将仿真器SmartRF04EB连接电脑,然后打开设备管理器,发现设备出现黄色"!(1)首先连接板子,仿真器只亮红灯,表示未识别芯片,此时要按下仿真器的复位键。(4)配置在线调试,打开Debugger,在Driver中选择TI设备。(4)配置在线调试,打开Debugger,在Driver中选择TI设备。(3)打开Link,并勾选相应选项,就可以进行在线下载程序。(3)程序执行成功,LED1和LED2被成功点亮。原创 2023-06-16 19:55:13 · 1599 阅读 · 0 评论 -
lesson2 Zigbee的硬件相关及IO操作
(2)PxDIR寄存器介绍:P0DIR、P1DIR、P2DIR,负责管理所有IO口处于输入状态还是输出状态。(1)PxSEL寄存器介绍:P0SEL、P1SEL、P2SEL,负责管理所有IO处于普通IO还是片上外设。CC2530芯片可以直接操作IO口,不需要像51单片机那样使用之前先定义引脚sbit xxx=Px^x;比如想要配置P1_0为输出功能。相较于基本工作电路多了。原创 2023-06-17 02:48:28 · 1618 阅读 · 0 评论 -
lesson3 Zigbee外部中断
类似于STM32的外设中断函数名都在Startup启动文件中一样,CC2530的中断代码段名在头文件中也有定义。的作用是:进入中断后,用于判断是相应IO组内哪个IO口触发了中断,哪个位就为1。固定格式:#pragma vector=PxINT_VECTOR。的作用是:哪个IO组触发中断,相应的PxIF位就为1。其中函数名可以自己随便定义,中断标志要软件清零。原创 2023-06-17 18:05:28 · 402 阅读 · 2 评论 -
lesson4上 Zigbee时钟+定时器
在这里我们计数器需要计数 500000 在前面我们知道 在前面我们知道自由模式需要计数器计数到 0xFFFF(65535)次才溢出一次也就是进入一次中断(中断来源第一点),那么我们让进入中断为count。(4)睡眠定时器: 24位正计数定时器,运行在32KHz的时钟频率,主要用于系统进入或退出低功耗睡眠模式之间的周期定时。(二)T1STAT:定时器1的状态寄存器,D4-D0位通道4到通道0的中断标志,D5为溢出标志,当到达最终值自动置1;具有四种工作模式:自由运行模式、倒计数、模模式、正计数/倒计数模式。原创 2023-06-17 23:59:16 · 714 阅读 · 0 评论 -
lesson4下 Zigbee串口通信
(1)PERCFG第0位设置为0,表示指定串口的IO位置为备用位置1;设置为1,表示指定串口的IO位置为备用位置2。1.CC2530具有两个串口,并且每个串口都可以配置选择控制脚,注意串口工作必须是32M系统时钟。(2)配置IO为偏上外设功能:P0SEL |= 0x0C;(4)配置波特率:U0GCR = 11;//8个数据位,1个停止位,无硬件流、无校验。(5)开启总中断和串口中断:URX0IE=1;4.程序实现CC2530通过串口0与上位机通信。原创 2023-06-18 00:00:14 · 676 阅读 · 0 评论 -
lesson4 (Zigbee补充1)CC2530 AD控制(自带温度计)
温度传感器是我们学习 MCU 经常使用的传感器,在 CC2530 里就集成里片内的温度传感器,有人会想到如果芯片发热怎么办?这个你得问问 TI 的工程师了。在此补充,芯片之前一直都是选的CC2530F256,芯片直接选择8051也可以,因为CC2530F256本质上就是增强型的8051芯片。各寄存器功能如下表所示: (详细参考 CC2530 datasheet.pdf)CC2530 的内部温度检测需要配置的寄存器比较多, 包括温度和 AD的。本实验用到了自定义头文件,需要将路径手动包含到过程配置中。原创 2023-06-20 00:29:13 · 819 阅读 · 0 评论 -
lesson4(Zigbee补充2)CC2530睡眠唤醒(详解)
Zigbee 的特点就是远距离低功耗的无线传输设备,节点模块闲时可以进入睡眠模式,在需要传输数据时候进行唤醒,能进一步节省电量。问题3:当ZIgbee执行到main函数的while(1)中,假如此时进入了PM2模式,while(1)循环中的程序是继续执行、默认跳过还是停止在某行代码等待唤醒后继续执行。需要注意的是,CC2530的不同工作模式可以通过相应的控制指令或设置来切换。当Zigbee执行到main函数的while(1)循环中并进入了PM2模式时,具体的行为取决于所使用的开发工具和相应的设置。原创 2023-06-20 00:39:26 · 1572 阅读 · 1 评论 -
lesson4(ZIgbee补充3)CC2530看门狗
看门狗,眼熟的名字。无论在普通的 51,还是高级的 ARM。一个完整的系统总需要一个看门狗,在你程序跑飞的时候帮你一把,使系统重新进入工作状态。它无疑是世界上最忠诚的狗。如果不执行喂狗,则系统将不断复位,会导致绿灯常灭。如果执行喂狗,则绿灯闪烁。CC2530 的看门狗很简单,只需要配置 1 个寄存器。演示打开看门狗后没有喂狗系统不断复位的情况。//这是必须的,打开 IDLE 才能设置看门狗。关于看门狗的详细原理介绍见我的另一篇文章。//时间间隔一秒,看门狗模式。//按寄存器描述来喂狗。原创 2023-06-20 00:42:01 · 357 阅读 · 0 评论 -
lesson5 Zigbee无线通信概念
1.Zigbee无线通信,需要高频的载波来提供发射效率,ZIgbee模块直接要想可以正常的收发,接收模块必须把接收频率设置和发射模块的载波频率一致。这是一个2个字节的编码,用来区别不同的ZIgbee无线局域网,叫做个域网ID(PANID),每一个Zigbee无线局域网都有自己唯一的PANID。在Zigbee无线局域网里,每一个模块在该网络里都有唯一的2个字节的地址,这个地址叫做网络地址(也叫网络短地址)但TI的所有支持ZIgbee底层协议的芯片只能在2.4G的16个信道里进行通信,信道编号为11-26。原创 2023-06-20 00:44:36 · 729 阅读 · 0 评论 -
lesson6 ZIgbee网络特性抓包分析
上电后先发送了一帧信标请求帧,发送这一帧也会得到周围具备介绍人资格的节点回复信标帧,但是协调器拿到这些信标帧,是用来判断周围的环境情况,为创建网络做准备(当收到来自周围模块的信标帧后,就会判断周围有哪些局域网,从而不会创建重名的PANID)。路由器在入网前,一直发送信标请求帧,它的作用是让在它附近的所有具备介绍人资格的节点都回复信标帧,这些返回的信标帧被这个想要加入的无线模块拿到,通过这些信标帧选出最佳介绍人节点,请求加入。9、ZIgbee网络组建后,网络里的节点可以进行相互通信,数据通信的方式有4中。原创 2023-06-27 00:32:53 · 1195 阅读 · 0 评论 -
lesson7-1 Zigbee协议栈的使用
因此我们可以每个信道都或在一起(多个位取1),这样多个信道参数值就可以进行或操作,把结果作为宏的最终值,那么这样对于路由器和终端的意义:可以在这些信道上选择一个最佳的网络加入进去。这些宏值的不同会影响程序执行的流程,就会导致出现不同的功能,所以有了不同功能的代码版本:协调器、路由器和终端。因为Zigbee协议在发展过程中经历了3个版本,其中Zigbee在2007年推出了最新的规范,这个规范有2个版本,Zigbee2007和ZigbeePro,它们之间的区别是,PRO版本的功能在某方面更强。原创 2023-06-27 00:37:04 · 1372 阅读 · 0 评论 -
lesson7-2 Zigbee协议栈的使用
首先定义一个按钮状态改变的消息,然后给这个消息填写相关的值,类型是按钮状态改变KEY_CHANGE,然后把发送给应用层StarryApp_TaskID的消息发送到消息队列,并且在osal_msg_send( StarryApp_TaskID, (uint8 *)msgPtr );在Zstack里,任务事件定义的特点决定了,每一个任务最多只能处理16种不同的事件,而系统在运行的时候有许多事物需要处理,如果每一个事物处理都定义成一个事件,那么16种事件是肯定不够用的,所以引入了消息。原创 2023-06-29 04:20:53 · 901 阅读 · 0 评论 -
lesson7-3 OSAL操作系统抽象层原理
Zstack协议栈的操作系统抽象层OSAL启动的整个过程和稳定之后的做的一些事情;以及为什么应用层在稳定的时候,我们调用相应的任务事件函数就会去处理相应事件的原因总结如下所有Zstack协议栈在稳定工作时,它的行为是在for(;;){}死循环里不断去读所有任务的任务事件变量。如果发现所有任务的任务事件变量都为0,没问题,说明所有任务都没有事件将要去处理;不断重复这个过程,直到发现,某个任务事件变量不为0,就会通过不为0的这个任务ID找到这个任务事件处理函数,去处理相应的事件。原创 2023-06-29 04:22:20 · 770 阅读 · 0 评论 -
lesson 8上 Zigbee单播通信(字符、字符串收发)
本讲学习Zigbee网络通信的思路1、刚开始,我们确实需要借助官方模板,添加简单的代码,做出通信基本收发实验,建立感性的认识。2、然后,在官方代码基本实验基础上,了解相关的概念,掌握通信过程中的原理,最后结合自己的理解,自己动手做一个个性化的实验,从而验证我们的理解。Zigbee共用四种通信方式:单播:在Zigbee网络里,模块之间需要进行通信,发送模块非常明确知道接收模块的网络地址,以这个地址发送数据给接收模块,叫做单播。广播组播绑定。原创 2023-06-30 04:25:57 · 1145 阅读 · 0 评论 -
lesson 8下 Zigbee单播通信理论相关概念原理(端点、簇)
在本实验中作为源端点)当数据帧从终端模块发出去以后,首先和目标协调器模块的网络地址0x0000匹配上了,协调器可以在底层任务拿到这个无线数据包,判断10号端点房间已经定义并且和我们的应用层任务挂钩,那么就会发送一个消息给我们的应用层任务,然后到任务处理函数中的"case AF_INCOMING_MSG_CMD:"中的来数据处理函数中,通过簇来判断,最终将数据包有效信息通过串口发送给上位机。1、它是一个字节编号的,数据接收和发送的基本单元,在模块通信的时候,发送模块必须指定收发双方模块的网络地址和端点。原创 2023-07-01 03:45:26 · 751 阅读 · 0 评论 -
lesson 9 Zigbee广播通信原理实验
本实验用到了按键移植、串口移植和定时器移植,关于按键和串口如何移植可以参考我之前的文章,本文章会介绍定时器移植的方法,也可以参考如下ZigBee协议栈中定时器的几种使用方法(在Zigbee中使用定时器)ZigBee协议栈中定时器的几种使用方法(在Zigbee中使用定时器)_zigbee定时器_绿叶清风的博客-CSDN博客OSAL事件触发机制----定时器触发。原创 2023-07-01 03:48:37 · 882 阅读 · 0 评论 -
lesson10 Zigbee组播通信原理
对于发送模块来说组播和广播没有什么太大区别,仅仅是发送的地址模式和地址内容这两个参数要修改为组播。对于接收模块来说,组播用到了组的相关结构体,因此要在应用层文件中添加组头文件aps_groups.h,并且在数据处理函数中要添加组号的相关判断。此外通过实验可以发现,组播通信与广播通信相似,单个发送设备可以同时向多个接收设备发送数据。还有消息处理函数要修改成适合组播的接收处理程序,其中pkt结构体变量的groupId成员,如果为0,表示收到的数据包不是通过组播发送的,而是通过单播或者广播等。原创 2023-07-02 22:29:46 · 976 阅读 · 0 评论 -
lesson11 Zigbee MAC地址通信
2个字节在网络里唯一的网络短地址TI在每个CC2530芯片出厂的时候,每一颗芯片都固化了一个唯一的8个字节的硬件地址、MAC或者IEEE地址2、本次实验我们通过发送模块(终端),按下S1,通过指定接收方MAC地址的方法发送数据包。当接收模块(协调器)接收到数据后,将接收内容通过串口发给电脑上位机。//获取当前模块的网络地址//获取当前模块的MAC//获取父节点的网络地址//获取父节点的MAC。原创 2023-07-02 22:36:48 · 792 阅读 · 0 评论 -
lesson 12 Zigbee绑定通信
最后调用发送函数,以绑定的方式发送(绑定的时候发送指定函数中的配置信息有:接收模块的接收端点、接收簇,发送模块的发送端点,发送模块的网络地址。不指定接收模块的地址相关信息)。在发送时,首先查看绑定表,如果绑定表中的内容与发送函数中指定的信息相匹配,再去查看地址管理器的MAC与绑定表中的MAC是否一致,如果一致,就将地址管理器中的网络短地址作为目标地址,最后将数据包发送过去。其中函数的第一个参数是发送方端点,第二个参数是接收方簇,第三个参数是接收模块MAC的地址相关信息结构体地址,第四个变量是接收方的端点。原创 2023-07-02 22:39:00 · 1335 阅读 · 0 评论 -
Zigbee MAC地址通信中发送模块指定了接收模块MAC地址却发送不了数据包的解决办法
在做MAC地址通信的实验中,我将程序分别下载进模块,组网成功后,发送模块终端按下按键,接收模块协调器什么反应也没有,上位机也没接收到消息。通过抓包发现,按下按键的时候确实没有数据包发出。只有协调器模块和终端模块之间进行父子点询问的帧和协调器模块的网络状态帧。并没有我们按下按键通过指定协调器MAC发送的数据帧。经过半天的百度查阅,但网上关于Zigbee模块MAC地址通信的资料少之又少,困扰了我一晚上,找到了一个可能可行的方法。我参考了这篇博客。原创 2023-07-02 22:38:52 · 485 阅读 · 0 评论 -
IAR中Zstack协议栈相关问题解决办法
如果遇到类似Warning[w52]: More than one definition for the byte at address 0x4b in common segment INTVEC. It is defined in module "hal_timer" as well as in module "Starry_Timer1"的警告这是表明Timer1的ISR被重复定义了,通常是用户自己移植的Timer1定时器程序与Zstack自带的hal_timer文件中的ISR中断程序冲突。原创 2023-07-05 02:47:57 · 399 阅读 · 0 评论