1. 简介

BMP280是一款常用MEMS气压传感器,采用I2C通信,可以采集环境气压与温度,并通过气压公式换算出海拔高度,广泛用于简易气象站、物联网项目。BMP280只有气压温度,BME280额外支持湿度。

1.1 传感器原理

BMP280内部集成了压阻式压力传感元件,当外界气压变化时,薄膜上的压阻桥路电阻值随之改变,通过内部ADC转换为数字信号输出。其测量范围约为 300~1100 hPa,精度可达 ±1 hPa,温度测量精度约 ±0.5℃。

1.2 应用场景

  • 简易气象站:采集气压、温度数据并上传云端
  • 室内外海拔测量:通过气压换算相对高度
  • 无人机定高辅助:辅助飞行控制器估算高度变化
  • 智能家居:检测门窗开关引起的气压微变

2. 实验硬件

  • Arduino Uno
  • BMP280模块
  • 杜邦线
  • 面包板

接线(I2C):

BMP280 引脚Arduino Uno 引脚
VCC3.3V
GNDGND
SDAA4
SCLA5

⚠️ 禁止5V供电,会烧毁模块!

软件:Arduino IDE,Adafruit BMP280库、Adafruit Unified Sensor库

2.1 硬件说明

BMP280模块通常有 4 个引脚(VCC、GND、SDA、SCL),部分模块还带有 CSB 和 SDO 引脚。SDO 引脚用于选择 I2C 地址:接 GND 时地址为 0x76,接 VCC 时地址为 0x77。默认模块通常已将 SDO 接 GND,地址为 0x76。

2.2 接线注意事项

  • 务必使用 3.3V 供电,BMP280 不支持 5V 供电
  • SDA 接 A4,SCL 接 A5,不要接反
  • 杜邦线尽量短,避免信号干扰
  • 若使用其他开发板,I2C 引脚位置可能不同,需查阅对应引脚定义

3. 核心代码

#include <Wire.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;
#define SEALEVELPRESSURE_HPA (1013.25)

void setup() {
  Serial.begin(9600);
  if (!bmp.begin()) {
    Serial.println("BMP280初始化失败,检查接线!");
    while(1);
  }
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
                  Adafruit_BMP280::SAMPLING_X2,
                  Adafruit_BMP280::SAMPLING_X16,
                  Adafruit_BMP280::FILTER_X8,
                  Adafruit_BMP280::STANDBY_MS_500);
}

void loop() {
  float temp = bmp.readTemperature();
  float pressure = bmp.readPressure() / 100.0F;
  float altitude = bmp.readAltitude(SEALEVELPRESSURE_HPA);
  Serial.print("温度:");Serial.print(temp);Serial.print(" ℃ ");
  Serial.print("气压:");Serial.print(pressure);Serial.print(" hPa ");
  Serial.print("估算海拔:");Serial.print(altitude);Serial.println(" m");
  delay(1000);
}

4. 实验现象

串口持续输出温度、气压、估算海拔。海拔数值是换算值,不是直接测量,会受天气、气流影响产生小幅跳动。开启内置滤波可以减少抖动。

4.1 串口输出示例

温度:26.32 ℃ 气压:1008.45 hPa 估算海拔:42.18 m
温度:26.31 ℃ 气压:1008.42 hPa 估算海拔:42.35 m
温度:26.35 ℃ 气压:1008.48 hPa 估算海拔:41.96 m

4.2 现象分析

  • 温度读数相对稳定,变化幅度通常在 ±0.5℃ 以内
  • 气压读数会有小幅波动,这是正常现象,受气流和环境影响
  • 海拔数值跳动较大,因为它是根据气压换算而来,气压微小变化会导致海拔明显变化
  • 用手轻轻按压传感器(注意不要损坏),可以看到气压和海拔读数明显变化

5. 常见问题

  • 初始化失败:SDA/SCL接反、供电5V、I2C地址错误,使用I2C扫描工具排查。
  • 海拔误差大:1013.25hPa是标准海平面气压,需要填入当地实时气压才能提高精度。
  • 温度偏高:传感器靠近发热的单片机,热量传导导致读数不准。

5.1 初始化失败排查步骤

  1. 检查供电是否为 3.3V,切勿使用 5V
  2. 确认 SDA 接 A4、SCL 接 A5,不要接反
  3. 使用 I2C 扫描程序确认设备地址(0x76 或 0x77)
  4. 检查杜邦线是否接触良好,可尝试重新插拔

5.2 提高海拔精度的方法

  • 查询当地气象站实时气压值,替换 SEALEVELPRESSURE_HPA 宏定义
  • 在稳定环境下进行多次采样取平均
  • 使用 bmp.readAltitude() 前先校准基准气压

6. 小结

BMP280利用压阻效应采集气压,依靠标准大气模型计算海拔。该传感器适合做相对高度测量,不能当做高精度测高设备。后续可以拓展OLED显示,制作桌面微型气象站。

6.1 实验收获

通过本次实验,我们掌握了:

  • I2C 通信协议的基本使用方法
  • BMP280 传感器的数据读取流程
  • 气压与海拔之间的换算关系
  • 常见硬件故障的排查思路

6.2 拓展方向

  • 添加 OLED 显示屏,实时显示温度、气压、海拔
  • 接入 WiFi 模块,将数据上传到云端或手机 App
  • 结合 DHT11 温湿度传感器,制作完整的气象站
  • 记录长时间气压变化,分析天气趋势
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐