Zigbee接收与返回RSSI

Zigbee学习笔记(一)

一、概述:

(一)功能

功能一:接收模块通过串口定时向上位机发送RSSI值(时间可调),同时将RSSI值通过RF传送给发送模块,
	   通过发送模块的串口发送给上位机。
功能二:通过上位机调节发射模块发射功率。

(二)实验平台

开发板:网蜂科技的CC2530物联网开发板
编程语言:C语言
编程软件:IAR

二、功能实现

(一)实现思路:

1.设置发射功率:在官方组网实验例程中的无线传输质量检测例程的基础上进行修改,串口利用中断进行接收,设置发射功率的判断逻辑全部在串口中断中进行。

特别注意:要将字符型转换为整形数字进行判断。
具体原因:因为接收模块中处理RSSI值得时候将其转换为字符型,故在判断时要将接收到的数值减去‘0’,
		 将其转换为整形数字。
static void Transmitter_powerinfo(void)
{
  URX0IF = 0;                       //清中断标志 
  temp = U0DBUF;
  
  if( (temp - '0') == 0 )          //将接收到的数据转换为整形数字
  {  
    state = OK;
    Send_UART_String(temp);
    UartTX_Send_String("\r",strlen("\r"));
    halRfSetTxPower(0);
    UartTX_Send_String("Set Power Succeed\r",strlen("Set Power Succeed\r"));
    UartTX_Send_String("Current Power is -3dBm\r",strlen("Current Power is -3dBm\r")); 
  }
  else if( (temp - '0') == 1 )      
  {
    state = OK;
    Send_UART_String(temp);
    UartTX_Send_String("\r",strlen("\r"));
    halRfSetTxPower(1);
    UartTX_Send_String("Set Power Succeed\r",strlen("Set Power Succeed\r"));
    UartTX_Send_String("Current Power is 0dBm\r",strlen("Current Power is 0dBm\r"));
  }
  else if( (temp - '0' ) == 2 )       
  {
    state = OK;
    Send_UART_String(temp);
    UartTX_Send_String("\r",strlen("\r"));
    halRfSetTxPower(2);
    UartTX_Send_String("Set Power Succeed\r",strlen("Set Power Succeed\r"));
    UartTX_Send_String("Current Power is 4dBm\r",strlen("Current Power is 4dBm\r")); 
  }
  else
  {
    state = ERROR;
    halRfSetTxPower(power);
    UartTX_Send_String("Current Power is default power(-3dBm)\r",strlen("Current Power is default power(-3dBm)\r"));   
  }
}

/**************************************************************** 
串口接收一个字符: 一旦有数据从串口传至CC2530, 则进入中断,将接收到的数据赋值给变量temp. 
****************************************************************/ 
char temp = 0;
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
  Transmitter_powerinfo();
}

2.接受模块将RSSI值传输给发送模块:利用Basic_rf进行无线传输,原例程里发送函数没有进行接收功能的开启,需要自行开启接收功能。
在这里插入图片描述将basicRfReceiveoff()改为basicRfReceiveon()。
还要进行接收缓存和发送缓存相关初始化。
在这里插入图片描述
发送数据相关处理
在这里插入图片描述
调用basicRfSendPacket将数据发送出去。
数据接收函数如下:

//发送模块接收数据处理函数
//用于接收来自接收模块的RSSI值,并通过上位机打印
void rf_handle(void)
{
  if(basicRfPacketIsReady())     //接收到数据包
  {
    if(basicRfReceive((uint8*)&pRxData,APP_PAYLOAD_LENGTH, NULL)>0)
    {
      UartTX_Send_String("RSSI:-",strlen("RSSI:-"));
      UartTX_Send_String(pRxData,2);
      UartTX_Send_String("\r",strlen("\r"));
    }
    else
    {
      UartTX_Send_String("Error\r",strlen("Error\r"));
    }
  }
  else
  {
    UartTX_Send_String("Error!\r",strlen("Error!\r"));
  }
 
}

在发送模块中调用此函数即可实现接收功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值