Arduino驱动BME680四合一传感器模块
2023-12-25 20:36:33
一、简介
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。
文章来源:https://blog.csdn.net/qq_42250136/article/details/135205793
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!