zoukankan      html  css  js  c++  java
  • 基于basicRf+Wifi数据采集

    ZigBee网络和Wi-Fi相组合的工作方式来针对环境情况进行感知。基于ZigBee和Wi-Fi通信的温湿度采集系统。

    使用1块ZigBee模块(白色)、1块ZigBee模块(黑色)、1块Wi-Fi通讯模块、1个温湿度传感器模块, 选取白色ZIGBEE模块安装温湿度传感器模块作为发送端,黑色ZIGBEE模块作为接收端。

    将黑色ZigBee模块用双公头的串口线和newland平台相连,平台上放上wifi模块,电脑连接wifi,在网络调试助手上查看数据。

    1、将Wi-Fi通讯模块配置为AP工作模式,启用DHCP功能,配置热点名称为AP+工位号、密码为准考号后8位、信道自行决定、加密方式为WPA2_PSK、IP地址为192.168.10.1,启用AP热点多连接,启用模块服务器模式(端口为8080)。

    AT+CWMODE=2        //设置AP模式
    AT+CWDHCP=0,1      //DHCP功能
    AT+RST                    //重启
    A+CWSAP="WiFi名称","WiFi密码",5,3    //配置wifi
    AT+CIPAP="XXX.XXX.XXX.XXX"            //wifi模块当前使用的ip地址
    AT+CIPMUX=1            //设置多连接
    AT+CIPSERVER=1,8080    //启动wifi模块的服务器模式,端口号为8080,客户端ID号0~4
    /*不出意外应该很顺利,如果过程中发生error,那就重新上电*/

    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
    ";
      halUartWrite((uint8 *)cmdStr, strlen(cmdStr));
     
      halMcuWaitMs(500);
    
      /*结束完善代码——串口发送AT指令,启用WIFI模块AP热点多连接*/
        
      /*开始完善代码——串口发送AT指令,启用WIFI模块服务器模式(端口为8080)*/
      cmdStr="AT+CIPSERVER=1,8080
    ";
      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,"
    当前温度:%d℃, 当前湿度:%d", rxData[2],rxData[3]);
          sprintf((char *)cmdStr,"AT+CIPSEND=0,%d
    ",strlen(DataStr));
          halUartWrite((uint8 *)cmdStr, strlen(cmdStr));
        
          halMcuWaitMs(500);
          uart_printf((char *)DataStr);
    
    
          /*结束完善代码——接收发送端无线数据,根据湿度控制D3灯,并将温湿度数据通过WIFI发出去*/  
        }
            
      }
    }
  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/jsit-dj-it/p/12121283.html
Copyright © 2011-2022 走看看