Skip to main content

BMP280大气压强

前言

本实验中大气压强传感器模块使用的是BMP280,这是一款专为移动应用而设计的高精度大气压传感器, 传感器模块采用极其紧凑的封装,其小尺寸和低功耗可以应用在手机、 GPS 模块、 手表的电池供电设备中。 BMP280 传感器除了可以测量大气压强,还可以测量温度(温度精度不高)以及通过计算公式来换算出海拔高度。

实验目的

通过python编程实现测量当前环境的大气压强、温度信息,将大气压强通过公式计算出当前海拔高度,打造自己的气压计!

实验讲解

市面上大多BMP280模块都通用,使用I2C总线通讯,下图是一款BMP280传感器模块:

bmp280_1

模块参数
供电电压3.3V
工作电流<20mA
通信方式I2C总线
I2C地址0x76(BMP280的SDO默认下拉);
当 BMP280 的 SDO 引脚上拉时,I2C 地址为:0x77
引脚说明VCC: 接3.3V
GND: 接地
SDA: I2C数据引脚
SCL: I2C时钟引脚

从上面介绍可以看到BMP280是一款通过I2C接口驱动的传感器。我们通过核桃派I2C接口编程,即可以对该模块实现数据通讯。

海拔高度计算:

标准大气压是指把温度为0℃、纬度45度海平面(海拔为0米)上的气压称为1个大气压,其数值为101325 帕斯卡(Pa)。

大气压和海拔高度的关系:P=P0×(1-H/44300)^5.256

因此计算高度公式为:H=44300*(1- (P/P0)^(1/5.256) )

上式中:H为海拔高度,P0=标准大气压(0℃,101325Pa)

从上面公式可以看到,高度是通过大气压强换算出来的,从物理学的角度我们可以知道,高度越高的地方,空气越稀薄,大气压强越低。通过气压的变化我们就可以计算出海拔高度;但是这存在特定条件,那就是温度为0℃的时候,而温度越高的地方,空气越稀薄,大气压强就越低。因此高度数据理论上需要做温度补偿,因此本实验的高度值换算存在一定的误差。有兴趣的小伙伴可以自行深入研究。

本例程使用核桃派的I2C1来连接BMP280传感器: bmp280_2

bmp280_3

Python的强大之处是其有丰富的模块和函数库,一旦模块建立了,那么后来者使用起来就非常简单,无须再去做底层驱动的开发。从而实现面向对象的编程,而当有需要的时候又可以去改底层代码,可以说是进可攻退可守,非常灵活。在这里我们直接调用已经编写好的python驱动文件,该文件实现了对大气压、温度、高度的测量和计算。用户直接使用即可,具体如下:

BMP280对象

在CircuitPython中可以直接使用写好的Python库来获取BMP280大气压强传感器数据。具体介绍如下:

构造函数

bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c,address=0x76)

构建bmp280对象。

参数说明:

  • i2c 需要构建i2c对象,参考: I2C对象说明;这里不再重复。
  • address 模块I2C地址。默认:0x76;

使用方法

bmp280.sea_level_pressure = 1013.25

设置当地海平面标准大气压值,单位hPa


bmp280.temperature

返回温度值,单位℃,数据类型为float


bmp280.pressure

返回大气压强值,单位hPa (1hPa = 100Pa), 数据类型为float


bmp280.altitude

返回海拔高度值,单位m, 数据类型为float


理解了BMP280传感器原理和对象使用方法后,我们可以整理出编程思路,流程图如下 :

参考代码

'''
实验名称:BMP280大气压强
实验平台:核桃派1B
'''

import time, board, busio, adafruit_bmp280

# 构建I2C对象,使用核桃派I2C1控制
i2c = busio.I2C(board.SCL1, board.SDA1)

# #构建BMP280,本实验模块I2C地址为默认的0x76.
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c,address=0x76)

# 当地海平面标准大气压
bmp280.sea_level_pressure = 1013.25

while True:

print("\nTemperature: %0.1f C" % bmp280.temperature)
print("Pressure: %0.1f hPa" % bmp280.pressure)
print("Altitude = %0.2f meters" % bmp280.altitude)

time.sleep(1)

实验结果

将BMP280传感器按下图连接到核桃派, SDA1连接到模块SDA引脚, SCL1连接到模块SCL引脚:

bmp280_3

由于本例程代码依赖其它py库,所以需要将整个例程文件夹上传到核桃派:

bmp280_4

发送成功后需要打开远程目录(核桃派)的py文件来运行,因为运行会导入文件夹里面的其它库文件,因此这类型代码在电脑本地运行是无效的。

bmp280_5

这里使用Thonny远程核桃派运行以上Python代码,关于核桃派运行python代码方法请参考: 运行Python代码。运行成功后可以看到终端打印出温度、气压和海拔高度信息:

bmp280_6