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"));
}
}
在发送模块中调用此函数即可实现接收功能。