花名/ID: 天析

邮箱: 2200475850@qq.com

主攻方向: 物联网安全、WEB安全

兴趣爱好: 乒乓球、羽毛球、排球、业余无线电···

备案信息:蜀ICP备19023334号

传感网应用开发笔记

传感器的分类:模拟量、数字量、开关量

基于 Basic RF 的无线通信运用

为双向无线传输提供的一种简单的点对点协议,仅仅包含IEEE 802.15.4标准的无线数据包的收发功能,但他不是协议栈,仅仅是让两个结点之间进行简单通信。

Basic RF架构

  • Application :应用层,用户直接访问,包含basicr RF层和Hal层提供的接口
  • BasicRF : 为双向无线传输提供一种简单的点对点协议
  • Hardwa Abstraction layer: 硬件抽象层(HAL),提供硬件的操作接口,为无线和板载资源比如LCD,UART,buttons,timers等提供访问接口。
  • Hardware:硬件层,使用basicrf所需要的硬件平台,不属于basicrf架构

  1. 不会自动加入协议,不扫描其他节点
  2. 没有协议栈里的协调器、路由或终端等,不会重发

环境变量

  • \(PROJ\_DIR\):当前工程所在路径

IAR工程创建

库文件建议使用相对路径使用
目录结构参考basic RF 架构进行创建,易于管理
导入 basic RF相关 .c 文件

Basic RF 关键函数

1.创建basicRfCfg_t数据结构。在basic_rf.h文件中可以找到basicRfCfg_t数据结构的定义。

typedef struct {  

    // 本机地址,取值范围0x0000 ~ 0xffff,作为识别本模块的地址  
    uint16 myAddr; 
    
     // 网络ID,取值范围0x0000 ~ 0xffff,要建立通信此参数必须一致 
    uint16 panId;    
    
    // 通信信道,取值范围11~26,要建立通信此参数必须一致 
    uint8 channel;          
    
    // 应答信号(默认是1) 
    uint8 ackRequest;    
    
    // 是否加密,预定义时取消了加密      
    #ifdef SECURITY_CCM     
        uint8* securityKey;  
        uint8* securityNonce;  
    #endif  
    
} basicRfCfg_t;  

zigbee 有27个信道
2.4G频段16个信道,915M频段896M频段11个信道
zigbee 无线局域网中有在这个网络中唯一的两个字节的地址,这个地址叫做短地址
panid 是两个字节的编码,用来区别不同的zigbee无线局域网

通信步骤

  1. 调用halBoardInit()函数初始化硬件:void halBoardInit(void)
  2. 初始化无线功能:basicRfCfg_t结构体实例化
  3. 调用basicRFInit()初始化无线通信模块,检查基本信息是否设置成功

BSP : 板载资源包

无线初始化结构体

// 无线功能初始化
typedef struct{
    
    // 设置本机地址
    unsigned short myAddr; 
    
    // 设置网络ID
    unsigned short panId;
    unsigned char channel;
    unsigned char ackRequest;
    
    // 加密预处理
    #ifdef SECURITY_CCM
        unsigned char *securityKey;
        unsigned char *securityNonce;
    #endif
}basicRfCfg_t;

无线发送数据包函数

unsigned char basic

destAddr 目标地址
*pPaylos 发送首地址
length 发送数据长度

无线数据包 准备检测函数 (是否准备好接受无线数据包,和接收函数联用)

unsigned char basicRfPacketIsReady(void);

返回值 TRUE

获取无线信号强度

char basic

Rssi 无线信号强度

无线接收函数

unsigned char bsicRfReceive();

接收之前判断是否准备好了没有

*pRxData 接收数据的存放地址
len 最大接收的长度
*pRssi 信号强度(NULL)

无线接收开启和关闭

// 开启
void 

// 关闭
void 

示例代码

 #define MY_ADDR 0x0001
 #define YOU_ADDR 0x0002
 #define PANID 0x1903
 #define CHANNEL 25
 #define ACK_REQUEST 1
 
 basicRfCfg_t myBasicRf;
 
 // 配置无线通讯信息
 void myBasicRfInit(){
 
    myBasicRf.myAddr = MY_ADDR;
    myBasicRf.panId = PANID;
    myBasicRf.channel = CHANNEL;
    myBasicRf.ackRequest = ACK_REQUEST;
    
    // 将填充的信息装入BasicRF中
    while( basicRfInit( &myBasicRf )  ==  FAILED);
    
    // 打开发送
    basicRfReceiveOn();
 
 }
 
 // 入口点
 void main(){
 
    // 硬件初始化
    halBoardInit();
    myBasicRfInit();


    while(1){
        
        // 循环发送
        basicRfSendPacket(YOU_ADDR, "hello", strlen("hello") );
        
        // 串口转发,判断是否接收到数据
        
        // 通过LED灯亮灭,判断是否接收
    
    }
    
 
 }

温湿度

文章所属分类:  电子工程 

« 物联网技能大赛 - 设备认知 物联网技能大赛 - CC2530单片机开发方向学习笔记 »