博世公司(Bosch)推出的BME280是一种精密传感器,用于从天气监测到游戏控制再到高度测量等无数应用,这些应用的精度仅需几英尺。
该传感器使用简单,经过预先校准,无需额外组件,因此您可以立即开始测量相对湿度、温度、气压和高度。
那么,让我们熟悉一下我们已经听说过很多次的BME280。
硬件概述 该模块集成了博世的下一代数字温度、湿度和气压传感器 - BME280。 它是BMP180、BMP085和BMP183等传感器的后继产品。
电源 该模块板载了一颗3.3V稳压器LM6206和I2C电压电平转换器,因此您可以放心地将它与Arduino等3.3V或5V逻辑微控制器一起使用。
BME280在测量期间电流消耗不到1mA,空闲时仅消耗5μA。 由于其低功耗,它可用于电池供电的设备,例如手机、GPS 模块和手表。
I2C接口 BME280模块通过I2C通信并支持两个I2C地址0x76和0x77,允许在同一总线上使用最多两个传感器。
该模块的默认I2C地址为0x76H,可使用提供的焊接跳线轻松将其更改为0x77H。
BME280传感器模块的引脚排列 BME280模块只有4个引脚用于外部连接。 连接如下:
VIN 为模块供电。 将3.3V和5V之间的电压连接到此引脚。 GND 是接地引脚。 SCL 是I2C接口的串行时钟引脚。 SDA 是I2C接口的串行数据引脚。
将BME280模块连接到Arduino 让我们将BME280模块连接到Arduino开发板。连接很简单。 首先将VCC引脚连接到Arduino的5V输出,并将GND引脚连接到地。
现在我们只剩下I2C通信的引脚。在Arduino UNO R3开发板上,SDA和 SCL位于靠近 AREF 引脚的排针上。 它们也称为 A5 (SCL) 和 A4 (SDA)。
安装必要的库 要开始读取传感器数据,您需要先安装Adafruit BME280库。 它可以从Arduino库管理器获得。
要安装库,请导航至 Sketch > Include Library > Manage Libraries…等待库管理器下载库索引并更新已安装库的列表。
输入bme280筛选搜索结果。 查找Adafruit提供的Adafruit BME280库。 单击该条目,然后选择安装。
BME280传感器库使用Adafruit传感器支持后端。 因此,查找Adafruit Unified Sensor并安装。
Arduino示例代码 这是一个很简单的程序,可以读取BME280模块的温度、相对湿度、压力和大概的海拔高度,并将其打印在串口监视器上。 - #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
- #define SEALEVELPRESSURE_HPA (1013.25)
- Adafruit_BME280 bme;
- void setup() {
- Serial.begin(9600);
- if (!bme.begin(0x76)) {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- while (1);
- }
- }
- void loop() {
- Serial.print("Temperature = ");
- Serial.print(bme.readTemperature());
- Serial.println("*C");
- Serial.print("Pressure = ");
- Serial.print(bme.readPressure() / 100.0F);
- Serial.println("hPa");
- Serial.print("Approx. Altitude = ");
- Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
- Serial.println("m");
- Serial.print("Humidity = ");
- Serial.print(bme.readHumidity());
- Serial.println("%");
- Serial.println();
- delay(1000);
- }
复制代码
您可以在串口监视器中看到类似的输出。
代码说明 该草图首先包括三个库,即Wire.h、Adafruit Sensor.h和Adafruit BME280.h。 - #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BME280.h>
复制代码然后定义变量 SEALEVELPRESSURE_HPA。 该变量以millibars为单位存储海平面气压,并用于通过将给定气压与海平面气压进行比较来计算给定气压的绝对高度。 此草图中使用默认值 (1013.25),但为了获得准确的结果,请将其替换为您所在位置的当前海平面气压。
还创建了Adafruit BME280库的对象,以便我们可以访问其函数。 - #define SEALEVELPRESSURE_HPA (1013.25)
- Adafruit_BME280 bme;
复制代码
在代码的setup()函数中,我们初始化串口通信并调用 begin() 函数。
begin(I2C_ADDR) 函数将模块的I2C地址作为参数。 如果您更改了模块的I2C地址,则必须正确指定它。 此函数使用给定的I2C地址初始化I2C接口并验证芯片ID。 然后软重置芯片并等待传感器在唤醒后进行校准。 - Serial.begin(9600);
- if (!bme.begin(0x76)) {
- Serial.println("Could not find a valid BME280 sensor, check wiring!");
- while (1);
- }
复制代码
在代码的loop()函数中,我们使用以下函数从BME280模块读取温度、相对湿度和气压。 readTemperature() 函数返回温度。 readPressure() 函数返回大气压力。 readAltitude(SEALEVELPRESSURE_HPA) 函数通过比较指定大气压力与海平面气压来计算海拔高度(以米为单位)。 readHumidity() 函数返回相对湿度。 - Serial.print("Temperature = ");
- Serial.print(bme.readTemperature());
- Serial.println("*C");
- Serial.print("Pressure = ");
- Serial.print(bme.readPressure() / 100.0F);
- Serial.println("hPa");
- Serial.print("Approx. Altitude = ");
- Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
- Serial.println("m");
- Serial.print("Humidity = ");
- Serial.print(bme.readHumidity());
- Serial.println("%");
复制代码
|