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发出去*/  
        }
            
      }
    }
  • 相关阅读:
    MySQL 对于千万级的大表要怎么优化?
    mysql数据库优化总结
    php 正则表达式怎么匹配标签里面的style?
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    PHP过滤常用标签的正则表达式
    php冒泡排序
    PHP中__FUNCTION__与__METHOD__的区别
    关于PHP程序员技术职业生涯规划
    初识DSP
    MATLAB图像处理基础
  • 原文地址:https://www.cnblogs.com/jsit-dj-it/p/12121283.html
Copyright © 2011-2022 走看看