zigbee点对点对点操作 From zigbee菜鸟笔记(九)
一.cc2530无线通信
(一):BasciRF如何学习
在前面我们学习到了zigbee的基础裸机知识,算是对cc2530的芯片有了一定的了解,今天我们讲的是关于BasciRF通信,BasciRF是基于zigbee通信的一个简单的协议通信,今天讲的BasciRF并非是TI公司原BasciRF工程,是新大陆公司用于物联网教学自己设计的,难度其实没啥区别,都一样,在后面的学习中,我们主要学习的是如何调用函数,学会自己去看函数的注释,最好具有好一点C语言的功底。
(二).通信知识
zigbee通信方式主要有三种:点播,广播。组播。点播,就是点对点通信,也是这一节要讲述的东西,点播只在二个设备间进行通讯,不允许第三方设备接收到消息。组播,就是把网络节点中的设备进行小组划分,只允许同组号的设备接收到消息。广播,就是由一个设备发出消息,允许所有设备接受到。
二.了解BasciRF的结构框架
(1)app是存放主程序的Group 我们在这个框架里开发就只需要再这里写代码
(2)basicrf 是存放无线接受发送与初始化有关的内容,
(3)board存放硬件外设的代码,例如LED等等初始化都可以在这里找到;
(4)commom里面存放一些 通用的操作,例如时钟 GPIO 还有一些最底层的都在这里
(5)mycode是我自己自己调试代码建立的Group可以忽略。
(6)util 存放的是通用的库 这里我没研究过 基本用不到
三.点对点知识了解
要想要二个cc2530开发板进行通信,就必须要吧rf无线通信设置好,在给定的框架中,我们只需要设置几个简单的参数,就可以让完成RF的初始化工作
(一)channel:zigbee的信道号 一共十六个11~26 必须要二个在同一个channel才可以通信
(二)panId:zigbee的网络id 范围在0-0xFFFF之间;
(三)本端地址:要有本端ID 这个ID在以后的组网中唯一,
(四)发送地址:发送方发送消息时必须要知道接受方的ID才可以发送到对端。
四.BasciRF函数了解
(1)串口内容长度检测
//-------------------------------------------------------------------
// @fn halUartRxLen()
// @brief Calculate Rx Buffer length - the number of bytes in the buffer.
// @param none
// @return length of current Rx Buffer
//-------------------------------------------------------------------
uint16 halUartRxLen(void)
{return HAL_UART_ISR_RX_AVAIL();
}
解释:返回的值为串口消息的字节长度
(2)串口接收函数
//-------------------------------------------------------------------
// @fn halUartRead
// @brief Read a buffer from the UART
// @param buf - valid data buffer at least 'len' bytes in size
// len - max length number of bytes to copy to 'buf'
// @return length of buffer that was read
//-------------------------------------------------------------------
uint16 halUartRead(uint8 *buf, uint16 len)
{uint16 cnt = 0;while ((uartCfg.rxHead != uartCfg.rxTail) && (cnt < len)){*buf++ = uartCfg.rxBuf[uartCfg.rxHead++];if (uartCfg.rxHead >= HAL_UART_ISR_RX_MAX){uartCfg.rxHead = 0;}cnt++;}return cnt;
}
上面有注释:函数作用是从串口接受到len个字节的内容存储到buf中
(三)BasciRF发送函数
//-------------------------------------------------------------------
// @fn basicRfSendPacket
// @brief Send packet
// @param destAddr - destination short address
// pPayload - pointer to payload buffer. This buffer must be
// allocated by higher layer.
// length - length of payload
// txState - file scope variable that keeps tx state info
// mpdu - file scope variable. Buffer for the frame to send
// @return basicRFStatus_t - SUCCESS or FAILED
//-------------------------------------------------------------------
uint8 basicRfSendPacket(uint16 destAddr, uint8 *pPayload, uint8 length)
{uint8 mpduLength;uint8 status;// Turn on receiver if its not onif (!txState.receiveOn){halRfReceiveOn();}// Check packet lengthlength = MIN(length, BASIC_RF_MAX_PAYLOAD_SIZE);// Wait until the transceiver is idle;;;;;;return status;
}
函数作用:将length字节长度的内容的pPayload发送到destAddr地址处
(4)初始化RF
void ConfigRf_Init(void)
{basicRfConfig.panId = PAN_ID; //zigbee的ID号设置basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置basicRfConfig.myAddr = MY_ADDR; //设置本机地址basicRfConfig.ackRequest = TRUE; //应答信号while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功basicRfReceiveOn(); // 打开RF
}
函数功能:初始化RF 这里这个结构体就不举例说明了,
同样的下面还有RF接受等等我就不一 一说明了 照着注释来 ,有手就行 哈哈哈。
(五)代码演示
功能要求 串口发送内容到A A RF 到B B接受到消息打印到串口,同理B可以到A;
TIP :如果出现接受问题,加上delay延时函数 延时几毫秒即可
#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "TIMER.h"
#include "hal_uart.h"#define MAX_SEND_BUF_LEN 128
#define MAX_RECV_BUF_LEN 128unsigned char len = 0; //串口数据接收长度#define MAX_UART_SEND_BUF_LEN 128
#define MAX_UART_RECV_BUF_LEN 128
uint8 uTxData[MAX_UART_SEND_BUF_LEN];
uint8 uRxData[MAX_UART_RECV_BUF_LEN];//uRxData[0]={'1'};
uint16 uTxlen = 0;
uint16 uRxlen = 0;#define RF_CHANNEL 24
#define PAN_ID 0x11
#define MY_ADDR 0x1015
#define SEND_ADDR 0xAC3A static basicRfCfg_t basicRfConfig;
// 无线RF初始化void ConfigRf_Init(void)
{basicRfConfig.panId = PAN_ID; //zigbee的ID号设置basicRfConfig.channel = RF_CHANNEL; //zigbee的频道设置basicRfConfig.myAddr = MY_ADDR; //设置本机地址basicRfConfig.ackRequest = TRUE; //应答信号while(basicRfInit(&basicRfConfig) == FAILED); //检测zigbee的参数是否配置成功basicRfReceiveOn(); // 打开RF
}void Recv_UR_Data()
{len = halUartRxLen();if(len != 0){len = 0;halUartRead(uTxData, len);basicRfSendPacket(SEND_ADDR, uTxData, len);}
}void Recv_RF_Data()
{if(TRUE == basicRfPacketIsReady()) //接收到新的无线数据{basicRfReceive(uRxData, 32, NULL); halUartWrite(uRxData,sizeof(uRxData)/sizeof(uRxData[0]));}
}
void main(void)
{halUartInit(38400); //串口初始化下面要用halBoardInit(); //模块相关资源的初始化ConfigRf_Init(); //无线收发参数的配置初始化 HAL_LED_SET_1(); //点亮LED1这里是属于直接调用如果设备不符合可以改引脚HAL_LED_SET_2(); while(1){Recv_UR_Data(); //串口数据接收处理Recv_RF_Data(); //无线数据接收处理}}
zigbee菜鸟笔记(十)无线通信.RSSI链路质量监测
点击进入
联系方式 468078841@qq.com
zigbee点对点对点操作 From zigbee菜鸟笔记(九)相关推荐
- zigbee菜鸟笔记(一)zigbee的基础知识
一.什么是zigbee 有问题发送邮件至468078841@qq.com ZigBee,也称紫蜂,是一种低速短距离传输的无线网上协议,底层是采用IEEE 802.15.4标准规范的媒体访问层与物理层. ...
- boost::mpi模块非阻塞点对点操作的测试
boost::mpi模块非阻塞点对点操作的测试 实现功能 C++实现代码 实现功能 boost::mpi模块非阻塞点对点操作的测试 C++实现代码 #include <boost/mpi/non ...
- zigbee协议_智能家居的ZigBee到底是什么?和Wi-Fi有何区别?
由于智能家居的兴起,现在每个人家里都或多或少有智能家居的存在,无论是音箱.风扇还是插座.开关,似乎家庭电器中的每一款设备都可以变得智能化. 而在这么多设备的聚集在同一个家庭环境中,让小白用户头疼的事情 ...
- linux zigbee,介绍几个开源的Zigbee协议
转载地址 WSN/Zigbee开源协议栈1. msstatePANLast Updated: Mar 6, 2007较为简单,容易上手.附带一个较为详细说明文档.整个协议栈是基于状态机的实现的. ...
- 物联网--Zigbee协议(一):Zigbee初识
物联网--Zigbee协议 前言 一.Zigbee初识 什么是物联网? 什么是Zigbee? 二.Zigbee协议的基础知识 Zigbee三种设备类型 Zigbee三种网络拓扑结构 Zigbee工作频 ...
- SQL菜鸟笔记之第一篇 实验环境的搭建及准备工作
都快12点了,今天白天太忙了,但是什么理由都不能作为借口,所以我还是要坚持做笔记,今天的也还要有! 不知道小布老师为什么只做了8讲sqlplus的课程,接下来我继续学习sql的课程,继续做sql菜鸟笔 ...
- php laravel 入门教程,PHP语言菜鸟笔记,laravel 入门教程
本文主要向大家介绍了PHP语言菜鸟笔记,laravel 入门教程,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 安装 Laravel: 查看laravel包: composer sea ...
- 菜鸟笔记(一) - Java常见的乱码问题
2019独角兽企业重金招聘Python工程师标准>>> 本文将介绍一种Java Web/Api 开发常见的乱码问题. 前提摘要:在学习Java Web的过程中,乱码问题是经常遇到的, ...
- php入门公开课,【PHP公开课|送你一篇有关laravel入门教程的php菜鸟笔记】- 环球网校...
[摘要]PHP作为一种超文本预处理器,已经成为了我们常用的网站编程语言,并且结合了C语言,Java等我们常见的编程语言,所以,有很多web开发领域的新人都看中了他的使用广泛性,有很多人都想了解php的 ...
- 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(八)—— 模型训练-训练
系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...
最新文章
- Android—将Bitmap图片保存到SD卡目录下或者指定目录
- 全志 添加TP休眠触摸唤醒 Patch
- linux传文件file,linux文件的传输与压缩快速入门
- 计算机网络数据链路层 --- 后退n帧协议(GBN)
- mysql知识汇总2019
- 决胜蓝桥杯python组-集合、字典
- 能在手机播放的Flash代码
- DBCP,C3P0,Proxool,BoneCP参数介绍[摘]
- Hive命名空间-自定义变量
- 【Go学习笔记】数组
- 二级c语言改错题库,二级C语言题库-改错题(参考).doc
- 怎样用比较器实现信号的衰减和饱和_小器件大功用之变频器输入滤波器
- 企业消息转发服务器,Python构建企业微信自动消息转发服务端
- 简述公网IP、私网IP、动态IP、静态IP
- 在打开 Office XP 或 Office 2003 文档时,会提示您为 ActiveX 控件授予权限
- 什么是外包公司,外包公司与互联网公司的区别
- java项目设计与思路
- 图解三代测序(SMRT Sequencing)
- oracle rman备份spfile,利用RMAN自动备份转储Spfile
- android恢复出厂设置流程分析
热门文章
- 【选型指南】选择示波器带宽要注意哪些问题呢?
- 计算机管理员禁用teredo怎么解决,计算机管理员已在本地禁用teredo什么意思
- 基于PC的工业控制系统的优缺点分析
- 单片机2017福建省中职省赛_我院学子在2017年福建省合泰杯单片机应用设计竞赛中再获佳绩...
- “大数据”、“机器学习”、“深度学习”到底是什么?
- 置信区间、置信水平、边际误差
- 硬件测试转软件研发,硬件测试可以考虑的发展方向
- 图扑软件数字孪生汽车生产线,赋能智慧工厂科学运维
- (纪中)008. Oliver的成绩(score)【高精度】
- AddressBook iOS读取通讯录信息