ESP8266-Arduino编程实例-BME680环境传感器驱动

BME680环境传感器驱动

1、BME680介绍

BME680 是一款集成环境传感器,专为尺寸和低功耗是关键要求的移动应用和可穿戴设备而开发。 BME680 扩展了 Bosch Sensortec 现有的环境传感器系列,首次集成了高线性度和高精度气体、压力、湿度和温度传感器。 BME680 中的气体传感器可以检测多种气体,以测量空气质量,以保障个人健康。

在这里插入图片描述

BME680 可以检测到的气体包括来自油漆(如甲醛)、油漆、脱漆剂、清洁用品、家具、办公设备、胶水、粘合剂和酒精的挥发性有机化合物 (VOC)。

BME680具有如下特性:

  • 封装尺寸: 8 针 LGA 金属3.0 x 3.0 x 0.93mm³
  • 操作范围(全精度):
    • 压力:300…1100 hPa
    • 湿度 0…100%
    • 温度:-40…85°C
  • 电源电压 VDDIO:1.2 … 3.6 V
  • 电源电压 VDD 1.71 … 3.6 伏
  • 接口 I²C 和 SPI
  • 平均电流消耗(1Hz 数据刷新率):
  • 在 1 Hz 湿度和温度下2.1 µA
  • 在 1 Hz 压力和温度下为3.1 µA
  • 在 1 Hz 湿度、压力和温度下为3.7 µA
  • p/h/T/gas 为 0.09时12 mA,取决于操作模式
  • 睡眠模式下的平均电流消耗 0.15 μA
  • 气体传感器
    • 响应时间 (τ 33-63%):< 1 s(对于新传感器)
    • 传感器间偏差:+/- 15% +/- 15
    • 能量消耗:< 0.1 mA 在超低功耗模式下
    • 输出数据处理:IAQ 的直接输出:空气质量指数
  • 湿度传感器
    • 响应时间 (τ0-63%):8 秒
    • 精度公差:± 3 % 相对湿度
    • 滞后:≤ 1.5 % 相对湿度
  • 压力传感器
    • 均方根噪声:0.12 帕(相当于 1.7 厘米
    • 灵敏度误差:± 0.25 %(在 400 m 高度变化时相当于 1 m)
    • 温度系数偏移:±1.3 Pa/K(在 1°C 温度变化下相当于 ±10.9 cm)

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • BME280传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用如下驱动库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <Wire.h>
#include <SPI.h>
#include <Adafruit\_Sensor.h>
#include "Adafruit\_BME680.h"


#define SEALEVELPRESSURE\_HPA (1013.25)

Adafruit_BME680 bme; // I2C

void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(F("BME680 test"));

if (!bme.begin(0x76))
{
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320\*C for 150 ms
}

void loop()
{
if (! bme.performReading())
{
Serial.println("Failed to perform reading :(");
return;
}
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" \*C");

Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");

Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");

Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" KOhms");

Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");

Serial.println();
delay(2000);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126703744