当前位置:AIGC资讯 > 数据采集 > 正文

基于basicRf+Wifi数据采集

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发出去*/  
    }
        
  }
}

更新时间 2023-11-08