2、在IAR中创建基于CC2530的BasicRf开发工程,工程保存到工程目录中,工程文件为test.eww,路径为:工程目录/project/test.eww。把考试资源包中的CC2530_lib和sensor_drv拷贝到工程目录中。项目应包括app、basicrf、board、common、mylib、sensor_drv、utils共7个文件夹
3、在IAR项目工作组(workspace)中增加EndDev模块,将考试资源中的“Project”文件夹中的“EndDev.c”文件导入到工程中app目录下并保证编译通过。
4、在IAR项目工作组(workspace)中增加GateDev模块,将考试资源中的“Project”文件夹中的 “GateDev.c”文件导入到工程中app目录下并保证编译通过。
5、完善“EndDev.c”文件中的代码,实现发送端功能。配置和初始化BasicRf(Channel为13, PANID为工位号,比如工位号为1234则PANID为0x1234),获取温湿度传感器的温度和湿度值,按照下述数据格式发送给接收端:
帧头
帧长度
温度数据
湿度数据
校验和
固定值
0xCC
1字节
0x05
1字节
采集值
1字节
采集值
1个字节
为前4字节累加和
void configRF(void)
{
/*开始完善代码——basicRf配置和初始化*/
cfg.myAddr=0xA1B1;
cfg.panId=0x3211;
cfg.channel=11;
cfg.ackRequest=TRUE;
while(basicRfInit(&cfg)==FAILED);
basicRfReceiveOn();
/*结束完善代码——basicRf配置和初始化*/
}
void main(void)
{
halBoardInit();
configRF();
Timer4_Init();
Timer4_On();
while(1)
{
APP_SEND_DATA_FLAG = GetSendDataFlag();
if(APP_SEND_DATA_FLAG == 1)
{
/*开始完善代码——获取温湿度数据,发送给接收端*/
unsigned int tem,hum;
call_sht11(&tem,&hum);
txData[0]=0xCC;
txData[1]=0x05;
txData[2]=tem;
txData[3]=hum;
txData[4]=CheckSum(txData,4);
basicRfSendPacket( 0xA0B0, txData, 5);
/*结束完善代码——获取温湿度数据,发送给接收端*/
FlashLed(1,100);
Timer4_On();
}
}
}
6、完善“GateDev.c”文件中的代码,实现接收端功能。配置和初始化BasicRf,当接收到发送端的无线数据后,将温度、湿度数据通过串口发送给Wi-Fi通讯模块,发送格式为“当前温度:XX℃,当前湿度:XXRH。” 。对温度值进行判断,当温度值超过某个值(例如30度),接收端D3灯亮起,否则D3灯熄灭。
void configRF(void)
{
/*开始完善代码——basicRf配置和初始化*/
cfg.myAddr=0xA0B0;
cfg.panId=0x3211;
cfg.channel=11;
cfg.ackRequest=TRUE;
while(basicRfInit(&cfg)==FAILED);
basicRfReceiveOn();
/*结束完善代码——basicRf配置和初始化*/
}
char sendStrToWifi[50];
void main(void)
{
halBoardInit();
configRF();
/*开始完善代码——串口发送AT指令,启用WIFI模块AP热点多连接*/
const char *cmdStr;
const char *DataStr;
for(int i=0;i<3;i++)
{
//initWifi();
cmdStr="AT+CIPMUX=1\r\n";
halUartWrite((uint8 *)cmdStr, strlen(cmdStr));
halMcuWaitMs(500);
/*结束完善代码——串口发送AT指令,启用WIFI模块AP热点多连接*/
/*开始完善代码——串口发送AT指令,启用WIFI模块服务器模式(端口为8080)*/
cmdStr="AT+CIPSERVER=1,8080\r\n";
halUartWrite((uint8 *) cmdStr, strlen( cmdStr));
/*结束完善代码——串口发送AT指令,启用WIFI模块服务器模式(端口为8080)*/
halMcuWaitMs(500);
}
while(1)
{
if(basicRfPacketIsReady())
{
FlashLed(2,100);
/*开始完善代码——接收发送端无线数据,根据湿度控制D3灯,并将温湿度数据通过WIFI发出去*/
basicRfReceive(rxData,5, NULL);
if(rxData[2]>=26) //对温度值进行判断,当温度值超过某个值(例如30度),接收端D3灯亮起,
halLedSet(1);
else //否则D3灯熄灭。
halLedClear(1);
sprintf((char *)DataStr,"\r\n当前温度:%d℃, 当前湿度:%d", rxData[2],rxData[3]);
sprintf((char *)cmdStr,"AT+CIPSEND=0,%d\r\n",strlen(DataStr));
halUartWrite((uint8 *)cmdStr, strlen(cmdStr));
halMcuWaitMs(500);
uart_printf((char *)DataStr);
/*结束完善代码——接收发送端无线数据,根据湿度控制D3灯,并将温湿度数据通过WIFI发出去*/
}
}
}