ZigBee学习,七个例程代码介绍,协议栈系统,文字部分【七个实验】【2700字】【原创】
时间:2023-06-26 14:37:00
文章目录
- 实验一
- 实验二
- 实验三
- 实验四
- 实验五
- 实验六
- 实验七
实验一
//短距离,低功耗,无线通信,zigbee命名来源于蜜蜂八字舞
//zigbee=无线通信协议,cc2530TI芯片集成51内核
//soc=system on a chip
//协议栈是协议的实现形式,是协议与用户之间的借口
//协议栈是什么?巴拉巴拉有很多层,相当于函数中的底层驱动文件
//coordinator协调器,router路由器,end终端
//协议栈规范由联盟规定,设备加入网络前必须确认
///唯一的64位地址IEEE网址16位
//协议栈相当于参加给你好的驱动, 比如oled开发人员直接调用底层驱动
//实现无线通信步骤:组网、发送、接收
//安装协议栈,即安装底驱动库函数,因为所有模板都有协议栈驱动,所以无需安装
//components翻译是库代码的组成部分
//documents开发文档
//projects就是子程序
//tools是上位机,是工具
//App应用层目录
//HAl=handware abstraction layer
//MAC=MAC层
//MT=串口层
///我不会在巴拉巴拉写很多配置层。
//Warning[w69]: 警告不用管,没有影响
//工程名右键rebuild之后可以烧录下载程序
//路由器的功能 允许其他设备加入网络
//一个结点是一个设备=一快单片机=cc2530
//.cfg后缀是配置文件
///协调器使用协议栈建立网络和节点>终端调用协议栈无线发送函数>协调器调用接收函数
//实现本实验 连接协调器建立的网络后的终端 发送D1给协调器 协调器LED闪烁
实验二
//串口通信 串口分为单工、半双工、全双工
///我们打开整个程序文件的后缀是.eww 也即是工程
///串口初始化函数HAL文件下 hal_uart.c文件
串口函数的操作函数MT文件下 串口的初始化和HAL我不知道下串口的区别
//HAL层 MT嗯都是构成的zigbee官方规定的协议栈的组成
////用户添加应用程序程序main-osalinitsystem-osaltask-sampleApp
//除基本配置外 我们通常只关心App文件夹和ZMain文件夹
//配置中 xMT_TASK 代表不定义这个宏
//端点 簇 属性 描述符 都是结构体
//ZTOOL_P1就是串口0 ZTOOL_P2就是串口1
///商店视频说,你必须至少学习十个视频才能自己写程序 任重道远啊
实验三
//点播=通信两个设备 比如两个组 一组中结点只能与下面的通
//组播=比如两个组 一组中结点可以与以下多个通信相匹配 一组两组不能互相沟通
//广播=比如两个组 一组中结点发数据 以下所有点都可以接收和通信
//unitar翻译是单一的unique也是独一无二的 multiple就是倍数
///本实验主要做这些事情 从空中捕获数据 然后读取数据 然后通过串口助手将数据发送给计算机
//本实验是:协调器向终端发送数据 终端接收数据并将数据发送给串口助手,显示我确实接收了数据
//注第二个实验是 串口助手发送数据zigbee zigbee接收并发回给出口助手的数据
我对第二个实验有一个疑问 这个zigbee不知道是协调器还是终端还是路由器。
///协调器创建网络和节点 组播模式是将网络结点分组
///在传输数据包时 必须有不同模式的地址模式来传输数据包
/* 下面的枚举体在 AF.h 头文件中
//afAddrNotPresent注意枚举常量 enum是枚举关键词
//afAddrMode_t是枚举类型名 目前还没有定义枚举变量名
typedef enum (标识符=枚举集合总名可省略无影响。 此时enum=enum 某某标识符
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,
afAddr64Bit = Addr64Bit,
afAddrGroup = AddrGroup,
afAddrBroadcast = AddrBroadcast
} afAddrMode_t;
//定义变量是 enum i=af i=enum 标识符 i;
//枚举用于替代define更有效率
///参考本博客https://blog.csdn.net/weixin_33951761/article/details/85751763?utm_source=app
// https://blog.csdn.net/weixin_33951761/article/details/85751763?utm_source=app
enum leixingming //注意与上述区别 此时enum==enum leixingming
{
。。。
。。。
}bianliangming;
定义变量就是 enum i == enum leixingming i;
*/
///我现在整理一下我的想法
//首先是广播模式,即发送睡眠设备数据包
///第二协调器建立网络和添加节点 一旦检测到下一个结点连接到网络 说明结点发生了变化
//即网络发生变化 此时触发ZDO_STATE_CHANGE事件 此时,数据包定期重复发送给下一级结点设备
//这个判断是判断协调器终端的路由 是 if ( (SampleApp_NwkState = DEV_ZB_COORD) )这句话
//本实验是判断协调器(SampleApp_NwkState = DEV_ZB_COORD) 将协调器发送到终端
//如何判断下一级终端是否接收? 此时接收触发AF_INCOMING_MSG_CMD事件 此时在这个switch
//添加下一级,即终端将数据包rx发送给串口助手,电脑显示
//SampleApp_MessageMSGCB应该是接收和处理函数write函数发送数据
//SampleApp_SendFlashMessage这是一个简单的发送数据函数buffer字节缓冲区
实验四
//本实验实现点组播通信,协调器建网,两终端连网,按终端按键LED状态改变
//同时协调器LED状态也改变
//记住第三个实验是广播,所以这是组播
/* //¥¥¥是修改组播号的。 也可以修改为其他数值
SampleApp_Flash_DstAddr.addrMode = (afAddrMode_t)afAddrGroup; //¥¥¥
SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SampleApp_Flash_DstAddr.addr.shortAddr = SAMPLEAPP_FLASH_GROUP; //组号1 ¥¥¥¥
//SampleApp_Flash_DstAddr.addr.shortAddr = 0x0002; //组号2
// By default, all devices start out in Group 1
SampleApp_Group.ID = 0x0001; //组播通讯号 可修改为其他值 ¥¥¥¥
//SampleApp_Group.ID = 0x0002;
*/
//LED驱动在HalDriverInit初始化里面
实验五
//本实验实现功能:点对点通信、路由器与终端与地址固定为0的协调器通信
/* //仍然在AF.h中
typedef enum
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,///点播方式 短地址通信16位
afAddr64Bit = Addr64Bit,//64位IEEE厂家设置地址
afAddrGroup = AddrGroup,//组播方式
afAddrBroadcast = AddrBroadcast//广播模式
} afAddrMode_t;
/
/ //也在AF.h中
typedef struct
{
union
{
uint16shortAddr;//短地址
ZLongAddr_t extAddr;//IEEE
} addr;
afAddrMode_t addrMode;//传送模式
uint8 endPoint;//端点号
uint16 panId; // used for the INTER_PAN feature
} afAddrType_t;
*/
/*
void osalInitTasks( void )中 taskID
{
uint8 taskID = 0; //任务优先级由高向低排列 高优先级对应 taskID 值反而小
macTaskInit( taskID++ );
nwk_init( taskID++ );
Hal_Init( taskID++ );
*/
实验六
/*
本实验实现功能:终端设备获得DS18B20数据然后将获得数据无线传输给协调器
,协调器再通过串口发给电脑上串口助手表示我接收到终端发来的数据了,同时,
终端设备也要将设备通过rxtx串口输出 也就是两个方向一个无线发给协调器一个发给串口
*/
//此实验是在其它两个实验基础之上进行拓展 包括接收数据然后进行相应操作函数
//和直接发送数据SampleApp_Send_P2P_Message函数
//现在再来整理一下思路 就是协调器建立网络建立结点 当终端设备连接结点连接网络时
//此时会触发一个条件 此时触发这个条件一般会进入协调终端路由的判断是否定时发送数据
//那么此时 协调器接收到数据时此时又会触发一个条件 这个条件进入一个 接收数据并
//进行相应操作的函数 而第一个触发条件时只是进入一个仅仅无线发送数据的一个自写函数
//这个自写函数也就是定时发送的哪个函数 哈哈现在岂不是一切明了了呢
实验七
//安联德通讯协议适用于安联德所有产品=帧格式=每一串指令串
//报文协议这块不是很明白 明天看吧算了现在看加油吴方方最棒
//当在电脑上使用串口助手向协调器发送3A 00 ff 01 C4 23 这是发送指令默认字符串十六进制
//此时协调器通过rx串口返回 3A 00 FF 01 1E 48 01 01 00 00 01 01 八个00 92 23
//3A报文头 00 FF地址 01功能码是查询(01意思是查询所有终端传感器数据)
//1E 48 01 01是结点一数据 后面00 00 01 01是终端结点二数据 再后面八个00说明是空
//结点一中 1E=温度 48=湿度 01=气味 01=继电器 后面节点二一样 当然报文格式不知道能不能修改再说
//92是异或校验码 23是报文结束
//这个指令码的作用是 可以使用串口助手手动 查询数据信息
//**** ¥¥¥¥
//吴方方对zigbee模块再理解深入…
//实验固件就是.hex文件
//这套协议就是一套操作系统
//zigbee网络是一个整体是由一个协调器多个路由器多个终端设备构成
//协调器选择一个信道和一个网络ID,随后启动整个网络
//f8wConfig.cfg中可以自由选择信道 默认是11
//信道下面就是ID也可以修改 只要协调器终端信道和ID相同则可以加入网络
//路由器是允许终端加入网络
//终端设备可以接传感器