Arduino驱动BME680四合一传感器模块

一、简介

在这里插入图片描述

点击图片购买

GYMCU680 是一款低成本空气检测模块,工作电压 3-5v 功耗小,体积小。其工作原理,是通过 MCU 读取 BME680传感器数据,经过算法得到,温湿度,大气压, IAQ 室内空气质量,电阻值。
此模块,有两种方式读取数据,即串口( TTL 电平)或者芯片本身 IIC通信方式。该产品精度高,稳定性高。能够直接输出实用数据,省略了算法。串口的波特率有 9600bps 与 115200bps,有连续输出与询问输出两种方式,可适应不同的工作环境。与所有的单片机及电脑连接当焊接上 PS 焊点时候,模块是芯片本身 IIC 模式,此时 MCU 不参与工作,不消耗电流。可以当成简单的 BME680 模块使用。IAQ 室内空气质量算法是根据 BME680 芯片官网的例程移植,测试时候上电要一定时间,大约 5 分钟,数据才会正常。可应用于手持式仪器仪表、室内空气品质质量检测、天气预报系统、家庭自动化与控制、物联网,互联网、室外休闲与体育运动。

二、技术参数

在这里插入图片描述

三、使用方法

实验准备

BME680传感器模块 1个
原装正版Arduino uno r3开发板 1个
USB2.0打印机数据线高速方口连接转接线 A公对B公 1条
杜邦线 若干

接线

Arduino BME680传感器模块
5V 5V
GND GND
11 RX
10 TX

如下图所示
在这里插入图片描述

程序下载

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
uint16_t temp1=0;
int16_t temp2=0;

unsigned char Re_buf[30],counter=0;
unsigned char sign=0;
int led = 13;


//-----------------------------------------------------------
void setup()
{
    
    
  Serial.begin(9600);  
   mySerial.begin(9600);
   mySerial.listen();  
  delay(4000);    
 
  mySerial.write(0XA5); 
  mySerial.write(0X55);    
  mySerial.write(0X3F);    //初始化GY_MCU680,输出所有数据
  mySerial.write(0X39); 
  delay(100); 

  mySerial.write(0XA5); 
  mySerial.write(0X56);    //初始化GY_MCU680,连续输出模式
  mySerial.write(0X02);    
  mySerial.write(0XFD);
  delay(100);  
}
//-------------------------------------------------------------
void loop(){
    
    
  float Temperature ,Humidity;
  unsigned char i=0,sum=0;
  uint32_t Gas;
  uint32_t Pressure;
  uint16_t IAQ;
  int16_t  Altitude;
  uint8_t IAQ_accuracy;
  while (mySerial.available()) {
    
       
    Re_buf[counter]=(unsigned char)mySerial.read();
    
    if(counter==0&&Re_buf[0]!=0x5A) return;      // 检查帧头     
    if(counter==1&&Re_buf[1]!=0x5A)
  {
    
    
    counter=0;
     return;
   };      // 检查帧头       
    counter++;       
    if(counter==20)                //接收到数据
    {
    
        
       counter=0;                 //重新赋值,准备下一帧数据的接收 
       sign=1;
    }      
  }
  if(sign)
  {
    
      
     sign=0;
     
     if(Re_buf[0]==0x5A&&Re_buf[1]==0x5A )        //检查帧头,帧尾
     {
    
      	
       
            for(i=0;i<19;i++)
               sum+=Re_buf[i]; 
             if(sum==Re_buf[i] ) 
             {
    
    
                     temp2=(Re_buf[4]<<8|Re_buf[5]);   
                     Temperature=(float)temp2/100;
                     temp1=(Re_buf[6]<<8|Re_buf[7]);
                     Humidity=(float)temp1/100; 
                     Pressure=((uint32_t)Re_buf[8]<<16)|((uint16_t)Re_buf[9]<<8)|Re_buf[10];
                     IAQ_accuracy= (Re_buf[11]&0xf0)>>4;
                     IAQ=((Re_buf[11]&0x0F)<<8)|Re_buf[12];
                     Gas=((uint32_t)Re_buf[13]<<24)|((uint32_t)Re_buf[14]<<16)|((uint16_t)Re_buf[15]<<8)|Re_buf[16];
                     Altitude=(Re_buf[17]<<8)|Re_buf[18]; 
                     Serial.print("Temperature:");
                     Serial.print(Temperature); 
                     Serial.print(" ,Humidity:"); 
                     Serial.print(Humidity); 
                     Serial.print(" ,Pressure:"); 
                     Serial.print(Pressure);     
                     Serial.print("  ,IAQ:");
                     Serial.print(IAQ); 
                     Serial.print(" ,Gas:"); 
                     Serial.print(Gas ); 
                     Serial.print("  ,Altitude:"); 
                     Serial.print(Altitude);                       
                     Serial.print("  ,IAQ_accuracy:"); 
                     Serial.println(IAQ_accuracy);  
            }            
           delay(1000);           
   }
  } 
} 
//---------------------------------------------------------------

四、实验现象

在这里插入图片描述
测量温度为19.70℃,湿度是38.75%,压力是102498pa,空气品质IAQ是49。

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/135205793