当前位置:文档之家› 短距离无线通信实验报告

短距离无线通信实验报告

3.5 无线数据传输控制实验
3.5.1 实验目的
1. 在ZX2530A 型CC2530 节点板上运行自己的程序。

2 .通过发送命令来实现对其它节点的外设控制。

3.5.2 实验内容
实验中一个节点通过射频向另一个节点发送对LED 灯的控制信息,点亮LED 灯或让LED 熄
灭,节点接收到控制信息后根据控制信息点亮LED 或让LED 熄灭。

3.5.3 实验设备及工具
1.硬件:ZX2530A 型CC2530 节点板、USB 接口的仿真器,PC 机Pentium100 以上。

2.软件:PC 机操作系统WinXP、IAR 集成开发环境、串口监控程序。

3.5.4 实验原理
LED 灯连接到CC2530 端口P1_0,程序中应在初始化过程中对LED 灯进行初始化,包括端口
方向的设置和功能的选择,并给端口P1_0 输出一个高电平使得LED 灯初始化为熄灭状态。

无线
控制可以通过发送命令来实现,在main.c文件中中添加宏定义#define COMMAND 0x10,让发送
数据的第一个字节为COMMAND,表明数据的类型为命令,同时,发送节点检测用户的按键操作当
检测到用户有按键操作时就发送一个字节为COMMAND 的命令。

当节点收到数据后,对数据类型进
行判断,若数据类型为COMMAND,则翻转端口P1_0 的电平(在初始化中已将LED 灯熄灭)。

即可,
实现LED 的状态改变。

3.5.5 实验步骤
1. 打开工程,在“物联网光盘\无线射频实验\5 无线控制”文件夹下
2. 将节点类型变量NODE_TYPE 设置为0,编译工程,并下载到ZX2530 节点板中,作为接收节点。

3. 将节点类型变量NODE_TYPE 设置为1,编译工程,并下载到ZX2530 节点板中,作为发送节点。

4. 复位接收节点和发送节点。

5.按下发送节点板上的key1 按键,观察接收节点上led 显示情况
6. 在主程序中添加一个宏定义#define LED_MODE_BLINK 0x02,在对数据的解析中添加对
LED_MODE_BLINK 的解析,让LED 灯每隔250 毫秒闪烁一次,让发送节点发送的数据为
LED_MODE_BLINK (代替LED_MODE_ON,紧接在COMMAND
的后面),
重复以上步骤,可以观察到接收节点的LED 灯闪烁。

3.5.6实验总结:通过对本次实验的探索和验证,我们学习到无线数据传输控制的部分原理,做实验务必得弄清楚本次实验的意义和用途,结合现实生活我们可以发现生活中许多的无线控制设备是什么工作原理和软件控制,总结本次实验,对以后生活中的创新和创意提供一部分理论和实践基础认识。

3.5.7修改代码:
#include <iocc2530.h>
#include "hal_mcu.h"
#include "hal_assert.h"
#include "hal_board.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include <stdio.h>
#define RF_CHANNEL 25 // 2.4 GHz RF channel
#define PAN_ID 0x2007
#define SEND_ADDR 0x2530
#define RECV_ADDR 0x2520
#define NODE_TYPE 1 //0:接收节点,!0:发送节点
#define COMMAND 0x10
void io_init(void)
{
P0SEL &= ~0x02;
P0DIR &= ~0x02;
}
static basicRfCfg_tbasicRfConfig;
intledstatus = 0;
void rfSendData(void)
{
uint8 pTxData[] = {COMMAND};
uint8 key1;
// Keep Receiver off when not needed to save power basicRfReceiveOff();
key1 = P0_1;
// Main loop
while (TRUE) {
/*if (P0_1==0 && key1!=0 ) {
hal_led_on(1);
basicRfSendPacket(RECV_ADDR, pTxData, sizeofpTxData);
hal_led_off(1);
}
key1 = P0_1;*/
basicRfSendPacket(RECV_ADDR, pTxData, sizeofpTxData); halMcuWaitMs(50);
}
}
void rfRecvData(void)
{
uint8 pRxData[128];
intrlen;
basicRfReceiveOn();
// Main loop
while (TRUE) {
while(!basicRfPacketIsReady());
rlen = basicRfReceive(pRxData, sizeofpRxData, NULL);
if(rlen> 0 &&pRxData[0] == COMMAND) {
if (ledstatus == 0) {
hal_led_on(1);
ledstatus = 1;
} else {
hal_led_off(1);
ledstatus = 0;
}
}
}
}
void main(void)
{
halMcuInit();
io_init();
hal_led_init();
hal_uart_init();
if (FAILED == halRfInit()) {
HAL_ASSERT(FALSE);
}
// ConfigbasicRF basicRfConfig.panId = PAN_ID; basicRfConfig.channel = RF_CHANNEL; basicRfConfig.ackRequest = TRUE;
#ifdef SECURITY_CCM basicRfConfig.securityKey = key;
#endif
// Initialize BasicRF
#if NODE_TYPE
basicRfConfig.myAddr = SEND_ADDR;
#else
basicRfConfig.myAddr = RECV_ADDR;
#endif
if(basicRfInit(&basicRfConfig)==FAILED) {
HAL_ASSERT(FALSE);
}
#if NODE_TYPE
rfSendData();
#else
rfRecvData();
#endif
}。

相关主题