首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

GY-BMP280大气压强+温度+海拔三合一传感器 Python/C++编程 树莓派与ESP32使用例程

  4888 
 1
RASPI   ydxhuo.com 
文章主图

一:传感器介绍

   GY-BMP280 大气压传感器凭借高精度测量、灵活的通信接口、低功耗设计以及广泛的应用领域,成为众多项目中环境传感的理想选择。无论是构建气象站、开发智能穿戴设备,还是优化室内定位系统,它都能凭借出色性能满足需求,以小巧的身躯,为各类设备赋予精准感知环境的 “智慧之眼” 。

  • 1.工作逻辑

气压测量:测量范围覆盖 300 至 1100 hPa,对应海拔高度为 - 500 至 + 9000 米,可精准捕捉气压细微变化。其精度高达 ±1 hPa,高度测量精度约为 ±1 米,为需要高精度气压数据的应用提供坚实支撑。​

温度测量:温度测量范围从 - 40°C 至 + 85°C,精度达 ±1.0°C,能在极端环境下提供可靠的温度数据,满足多种场景对温度感知的严苛要求。


GY-BMP280 支持 I²C(最高 3.4 MHz)与 SPI(3 线和 4 线,最高 10 MHz)两种通信协议,方便与各类微控制器连接,为开发者提供了极大的灵活性,轻松适配不同的电路设计与系统架构。该传感器在 1 Hz 采样率下,电流消耗约为 2.7 μA,功耗极低,非常适合对功耗敏感的应用场景,如便携式设备、电池供电设备等,可有效延长设备续航时间。

  • 2.参数及原理图


Image

BMP280传感器数据手册,原理图下载

二:树莓派例程

  • 1.Pico接线图

提醒:请按下图的引脚标识接线,传感器的VIN务必不能接5V只能接3.3V,否则会导致设备烧毁!


Image


  • 2.Python程序

 bmp280 下载这个bmp280的源代码上传至树莓派pico文件内,直接运行查看数据(如下图)

如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image


结果:可以对着传感器大口吹起,观察气压和温度的数据变化


  • 3.代码逻辑解析

1. 设备初始化与校验 (__init__)

硬件连接:在 I2C 总线(SDA=Pin14, SCL=Pin15)上寻找默认地址为 0x76 的 BMP280。

芯片识别与复位:读取芯片 ID(寄存器 0xD0),校验是否为 0x58;随后发送软复位命令(0xB6)并等待设备就绪。


2. 读取工厂校准系数 (_read_calibration_data)BMP280 传感器出厂时在内部 ROM 中写入了 12 个校准参数(温度 T1~T3,气压 P1~P9)。

程序会一次性读取这些参数,并将带有符号的补码数据转换为正确的 Python 整数,用于后续计算。


3. 配置工作参数 (_configure_sensor)

通过写入控制寄存器(0xF4 和 0xF5),配置传感器的过采样倍率(温度 x2,气压 x4)以及芯片内部的 IIR 滤波器系数。


4. 原始数据读取与公式补偿(核心算法)

读取温度 (read_temperature):读取 20 位的原始 ADC 温度数据,通过博世官方给定的多项式公式计算出实际温度(℃),同时生成关键的中间变量 t_fine。

读取气压 (read_pressure):必须依赖 t_fine 才能进行准确计算。读取 20 位气压原始值,通过复杂的位移和乘法公式修正,得出气压值(hPa)。

一阶低通滤波 (EMA):对计算出的温度和气压应用一阶滤波公式(滤波系数 $\alpha = 0.2$),有效过滤掉传感器的高频噪声跳变,让数值更加平滑。

5. 海拔换算与主循环输出

海拔计算 (read_altitude):利用压高公式 44330x(1-(P/1013.25)¹³)将实时气压换算为相对海平面的海拔高度(米)。

主循环:每隔 1 秒读取一次滤波后的温度、气压和海拔数据,并带有时间戳格式化打印到控制台。


三:ESP32例程

  • 1.ESP32接线图

本次以ESP32-S3主板为例按下图接好连接线,传感器的VIN务必不能接5V只能接3.3V,否则会烧毁设备。


Image



  • 2.C++程序

GY-BMP280  下载这个GY-BMP280源代码直接用Arduino IDE编译上传程序打开串口监视查看(如下图) 

如果你还没有搭建好ESP32的ArduinoIDE的编程环境可参考这个帖子→:搭建ArduinoIDE编程环境


Image


  • 3.代码逻辑解析

1.I2C 通信与重复起始信号(Repeated Start)

ESP32 通过 GPIO14 (SDA) 和 GPIO15 (SCL) 访问 BMP280(地址 0x76)。

核心关键:在读取寄存器数据时,使用 Wire.endTransmission(false) 保持 I2C 总线连接(Repeated Start),防止 ESP32 释放总线导致寄存器指针重置,从而解决数据全部读为 0 的问题。


2. 读取出厂校准参数(Calibration Data)

每颗 BMP280 在出厂时,内部 ROM 均写入了 12 个唯一的校准系数(T1~T3、P1~P9)。

程序在 setup() 初始化阶段将其一次性读入内存,用于后续修正传感器硬件的物理偏差。


3. 博世官方补偿算法(Bosch Formula)

采集原始值:传感器内部 ADC 采样得到 20 位的原始温度和气压二进制数值。

计算温度:利用T1~T3参数校正得到真实温度,同时生成关键中间变量 t_fine。

计算气压:气压极易受温度影响,必须结合 t_fine 和P~P9参数,通过 64 位高精度多项式算法(防止溢出)换算得到真实百帕气压(hPa)。


4. 一阶低通滤波算法(EMA Filtering)

采用软件滤波公式:

作用:抑制空气流动、电噪声对气压和温度造成的频繁微小跳动,让串口输出的数据更加平滑稳定。


5. 气压换算海拔(Barometric Formula)

基于标准大气模型压高公式:

将实时计算出的气压值P换算为相对海平面的高度H(单位:米)。



技术支持(若对本页存在疑难问题可联系技术工程师进行处理)

联系人:张工
电话:0755-32914578

微信:扫下方二维码添加技术工程师微信,请备注来意

创客技术交流QQ群:2095618,175680,9075883(加群请备注:跃动芯火)

作者签名: www.ydxhuo.com   楼主  2025-07-05 19:36:36
回复列表
AQiu
2F
  面包大侠
3天前 0
emotion
共0条回复,点击查看回复
【评论】   
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.216.31 , 2026-08-12 19:02:23
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(16) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏