辜渝傧

13037102709

027-87870986

教学实训

您当前的位置:首页 > 教学资源 > 实训方案 >

无线传感网络实训|第五章 实验5.1 BasicRF点对点通信实验

发布者:唯众    布时间:2020-12-01 14:16:12    点击量:

        Basic RF 由 TI 公司提供,它包含了 IEEE 802.15.4 标准的数据包的收发。这个协议只是用来演示无线设备是如何进行数据传输的,不包含完整功能的协议。但是它采用了与 802.15.4 MAC兼容的数据包结构及 ACK 包结构,其功能限制如下:   
1)、不提供“多跳”、“设备扫描”及 Beacon。
2)、不提供不同种的网络设备,如协调器、路由器等。所有节点同级,只实现点对点传输。
3)、传输时会等待信道空闲,但不按 802.15.4 CSMA-CA 要求进行两次 CCA 检测。
4)、不重传数据。
简言之,Basic RF 功能较为简单,但可用来进行无线设备数据传输的入门学习。

1.实验目的

1)、CC2530 BasicRF 工程文件介绍
2)、掌握实验下载、测试的方法
3)、源码分析
注:此实验不带 zigbee 协议栈,只是感受一下无线开关蜂鸣器的过程。

2.实验设备

硬件:PC 机一台、ZIGBEE 网关、ZIGBEE 节点、仿真器一个)
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境

3.源码分析

1)、打开工程“WZ01_SN_A\CC2530基础实验源码\4.1点对点通信实验\BasicRF\ide”进入IAR 界面,如下图。
BasicRF点对点通信实验

2)、选择左边窗口 application 下的 light_switch.c 打开,找到 main()函数里的以下代码:
BasicRF点对点通信实验

3)、将截图中的appSwitch和appBuzzer依次选择编译,分别下载到两块节点板中,按下appSwitch节点板的按键,则另一块板子的蜂鸣器将更换蜂鸣的状态。
主要源码如下:
#include <hal_lcd.h>
#include <hal_led.h>
#include <hal_joystick.h>
#include <hal_assert.h>
#include <hal_board.h>
#include <hal_int.h>
#include "hal_mcu.h"
#include "hal_button.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_board.h"
 
 
#define RF_CHANNEL                25      // 2.4 GHz RF channel
 
// BasicRF address definitions
#define PAN_ID                0x2007
#define SWITCH_ADDR           0x2520
#define BUZZER_ADDR           0xBEEF
#define APP_PAYLOAD_LENGTH        1
#define BUZZER_TOGGLE_CMD         0
 
// Application states
#define IDLE                      0
#define SEND_CMD                  1
 
// Application role
#define NONE                      0
#define SWITCH                    1
#define LIGHT                     2
#define APP_MODES                 2
 
static uint8 pTxData[APP_PAYLOAD_LENGTH];
static uint8 pRxData[APP_PAYLOAD_LENGTH];
static basicRfCfg_t basicRfConfig;
 
static void appBuzzer();
static void appSwitch();
 
 
static void appBuzzer()
{
       uint8 temp=0;
    // Initialize BasicRF
    basicRfConfig.myAddr = BUZZER_ADDR;
    if(basicRfInit(&basicRfConfig)==FAILED) {
      HAL_ASSERT(FALSE);
    }
    basicRfReceiveOn();
      
    // Main loop
    while (TRUE) {
        while(!basicRfPacketIsReady());
 
        if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) {
            if(pRxData[0] == BUZZER_TOGGLE_CMD) {
                            MCU_IO_OUTPUT(HAL_BOARD_IO_BUZZER_1_PORT, HAL_BOARD_IO_BUZZER_1_PIN, ++temp%2);
            }
        }
    }
}
 
static void appSwitch()
{
    pTxData[0] = BUZZER_TOGGLE_CMD;
 
    // Initialize BasicRF
    basicRfConfig.myAddr = SWITCH_ADDR;
    if(basicRfInit(&basicRfConfig)==FAILED) {
      HAL_ASSERT(FALSE);
    }
 
    // Keep Receiver off when not needed to save power
    basicRfReceiveOff();
 
    // Main loop
    while (TRUE) {
      if(halButtonPushed()==HAL_BUTTON_1){
                     //basicRf发送数据包函数(目标短地址,用户数据缓存,缓存长度)
            basicRfSendPacket(BUZZER_ADDR, pTxData, APP_PAYLOAD_LENGTH);
 
            // Put MCU to sleep. It will wake up on joystick interrupt
            halIntOff();
            halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global
            // interrupt enable
            halIntOn();
        }
    }
}
 
void main(void)
{
    // Config basicRF
    basicRfConfig.panId = PAN_ID;
    basicRfConfig.channel = RF_CHANNEL;
    basicRfConfig.ackRequest = TRUE;
 
    // Initalise board peripherals
    halBoardInit();
 
    if(halRfInit()==FAILED) {
      HAL_ASSERT(FALSE);
    }
  
    //注:函数appSwitch()和appLight()只能打开一个   
    //作为开关的节点打开此函数(appSwitch)
    appSwitch();
   
    //蜂鸣器的节点打开此函数(appBuzzer)
    //appBuzzer();             
}
 

4.实验现象

       一个网关 A 定义为发射模块,另一个终端 B 定义为接收模块。按网关上的按键 S1,无线控制另一个终端 B 上的 LED1 灯亮灭。


上一篇:无线传感网络实训|实验4.5 万能红外实验

下一篇:无线传感网络实训|实验5.2 BasicRF通信质量检测实验