BMP390 Barometric Pressure Sensor
| |||||||||||||||||||||
| |||||||||||||||||||||
说明
产品概述
BMP390是一款非常小、低功耗、低噪声的24位绝对气压传感器,数字高性能传感器非常适合各种高度跟踪应用,模块支持I2C/SPI 接口,兼容 3.3V/5V 电平。可以轻松地集成到GPS模块、可穿戴设备、可听设备和无人机等项目,适用于精密高度计、环境监测和物联网等应用场景。
特点
- 支持 I2C/SPI 接口通信,默认为 I2C 接口
- 板载电平转换电路,可兼容 3.3V/5V 的工作电平
- 提供完善的配套资料手册(Raspberry/Arduino/pico 示例程序和用户手册等)
产品参数
- 工作电压: 5V/3.3V
- 通信接口: I2C/SPI
- 平均工作电流: 3.2μA(1Hz)
- 气压检测范围: 300~1250hPa
- 气压绝对精度: ±0.50hPa(P=300 ...1100 hPa T=0 ... 65 °C)
- 气压相对精度: ±0.03hPa (P=700…1100 hPa T=25…40°C)
- 温度漂移系数: ±0.6Pa/K (25°…40°C at 900 hPa)
- 温度绝对精度: ±1.5℃ (0…65℃)
- 支持分辨率: 0.016Pa (高精度模式下)
- 支持采样率: 200Hz
- 工作温度: -40~85℃
- 产品尺寸: 32mm × 20mm
- 过孔直径: 2.0mm
接口说明
- 引脚功能
功能引脚 | 描述 |
VCC | 电源正 |
GND | 电源地 |
SDA | I2C 数据线 |
SCL | I2C 时钟线 |
INT | 中断输出引脚,可接 I/O 口 |
SDO | SPI 数据线接主机MISO |
SDI | SPI 数据线接主机MOSI |
CS | 片选信号输入,接 I/O 口 |
可通过ADDR焊盘配置I2C地址,默认不焊0Ω电阻,I2C地址为0x77,焊上后为0x76。(使用SPI模式时请勿焊接该0Ω电阻)
用于树莓派
函数库安装
- 安装wiringPi
sudo apt-get install wiringpi #对于树莓派4B可能需要进行升级: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
前置工作
前置工作执行如下命令进行树莓派配置:
sudo raspi-config
选择 Interfacing Options -> I2C -> yes 启动 I2C 内核驱动 ;
选择 Interfacing Options -> SPI -> yes 启动 SPI 内核驱动 ;
保存退出后,重启树莓派:
sudo reboot
重启后检查SPI是否正常启动:
ls /dev/spi*
WiringPi 例程演示
下载例程并解压:
sudo apt-get update sudo apt-get unzip wget https://www.waveshare.net/w/upload/b/bf/BMP390_Barometric_Pressure_Sensor_code.zip unzip BMP390_Barometric_Pressure_Sensor_code.zip
I2C
模块 | 树莓派 |
VCC | 3.3V/5V |
GND | GND |
SDA | SDA |
SCL | SCL |
INT | 不接 |
- 检查连接:
i2cdetect -y 1
模块默认I2C地址为0x77,可通过修改焊盘改变地址,修改硬件地址后要对应修改程序中的I2C地址;
BMP3_ADDR_I2C_PRIM=0x76 BMP3_ADDR_I2C_SEC=0x77
- 进入到 I2C 目录下编译程序 :
cd cd BMP390_Barometric_Pressure_Sensor_code/RaspberryPi/I2C make clean make
- 运行程序:
sudo ./bmp3
- 将显示如下数据:
等待一会可以得到稳定的数据。从左至右分别显示了 BMP390 测得的温度(摄氏度),大气压(帕斯卡)。
SPI
模块 | 树莓派 |
VCC | 3.3V |
GND | GND |
SDO | MISO |
SDI | MOSI |
SCK | SCLK |
CS | 27(wiringPi编码) |
- 进入到 SPI 目录下编译程序 :
cd cd BMP390_Barometric_Pressure_Sensor_code/RaspberryPi/SPI make clean make
- 运行程序:
sudo ./bmp3
- 将显示如下数据:
等待一会可以得到稳定的数据。从左至右分别显示了 BMP390 测得的温度(摄氏度),大气压(帕斯卡)。
用于Arduino
I2C
- 按照如下方式将模块接到 arduino 开发板中。
模块 | Arduino |
VCC | 5V |
GND | GND |
SDA | SDA |
SCL | SCL |
INT | 不接 |
- 在正确接线,确定通信方式以及器件地址之后,编译,下载到 Arduino
- 打开:工具 -> 串口监视器,选择波特率为 115200,可得如下信息
等待一会可以得到稳定的数据。其中从左至右分别显示了 BMP390 传感器测得的大气压(帕斯卡),温度(摄氏度)。若未成功显示数据,或数据显示不正常请检查连线,通信方式,以及器件地址是否有误。
SPI
- 按照如下方式将模块接到 arduino 开发板中。
模块 | Arduino |
VCC | 5V |
GND | GND |
SDO | 12 |
SDI | 11 |
SCK | 13 |
CS | 10(SS) |
- 在正确接线,确定通信方式(如下图确认宏定义USE_IIC为0时使用SPI模式)以及器件地址之后,编译,下载到 Arduino
- 打开:工具 -> 串口监视器,选择波特率为 115200,可得如下信息
等待一会可以得到稳定的数据。其中从左至右分别显示了 BMP390 传感器测得的大气压(帕斯卡),温度(摄氏度)。若未成功显示数据,或数据显示不正常请检查连线,通信方式,以及器件地址是否有误。
用于ESP32
本示例使用ESP32-S3-DEV-KIT-N8R8开发板
I2C
- 按照如下方式将模块接到 ESP32 开发板中。
模块 | ESP32 |
VCC | 5V |
GND | GND |
SDA | 13 |
SCL | 14 |
INT | 不接 |
(ESP32的I2C总线可以映射到大部分外接引脚上,可以根据需要自行配置)
- 在正确接线,确定通信方式以及器件地址之后,编译,下载到 Arduino
- 打开:工具 -> 串口监视器,选择波特率为 115200,可得如下信息
等待一会可以得到稳定的数据。其中从左至右分别显示了 BMP390 传感器测得的大气压(帕斯卡),温度(摄氏度)。若未成功显示数据,或数据显示不正常请检查连线,通信方式,以及器件地址是否有误。
SPI
- 按照如下方式将模块接到 ESP32 开发板中。
模块 | ESP32 |
VCC | 5V |
GND | GND |
SDO | 10 |
SDI | 11 |
SCK | 9 |
CS | 12(SS) |
(ESP32的SPI总线可以映射到大部分外接引脚上,可以根据需要自行配置)
- 在正确接线,确定通信方式(如下图确认宏定义USE_IIC为0时使用SPI模式)以及器件地址之后,编译,下载到 Arduino
- 打开:工具 -> 串口监视器,选择波特率为 115200,可得如下信息
等待一会可以得到稳定的数据。其中从左至右分别显示了 BMP390 传感器测得的大气压(帕斯卡),温度(摄氏度)。若未成功显示数据,或数据显示不正常请检查连线,通信方式,以及器件地址是否有误。
用于Raspberry Pi Pico
软件准备
安装Thonny
- 直接进入Thonny官网下载;
- 若无法进入官网或下载过慢,可以直接在此下载Thonny Python IDE (Windows版本 V3.3.3)。
烧录Micropython固件
- 软件在线安装方法:最新版的Thonny自带安装固件的功能。
- 首先需要按住Pico的boot按键同时将Pico使用USB数据线与PC连接;
- 之后打开Thonny依次点击Tool->Options...->Interpretere->INstall or update MicroPython;
- 在弹出的窗口中选择对应开发板和MicorPython版本,并点击安装,之后等待安装完毕即可。
若出现软件安装MicroPython窗口中一直提示downloading variants info...且长时间无变化,考虑为网络原因,可以选择使用代理或改为使用下面的离线安装方法。
- 离线安装方法:
- 下载固件,得到一个.uf2文件;
- 按住Pico的boot按键同时将Pico使用USB数据线与PC连接,之后电脑会弹出一个USB储存设备;
- 打开该设备文件夹,将.uf2文件直接拖入文件夹中,之后该储存设备自动弹出,开发板重启,此时代表安装完成,可以打开Thonny查看是否成功识别的Pico的micropython环境。更多细节参考Pico官网。
硬件连接
模块 | Pico |
VCC | 5V |
GND | GND |
SDA | GP2 |
SCL | GP3 |
INT | 不接 |
例程使用
步骤如图:
- 确认已连接写入了micropython固件的Raspberry Pi Pico开发板;
- 在左上角文件界面打开解压后的示例程序文件夹并打开Pico文件夹;
- 选中两个.py文件,右键选择上传;
- 上传后在左下的片内文件界面双击打开示例程序get_temp_press.py;
- 点击上方按钮运行。
FAQ
气压传感器计算得到的高度一般用在短周期内的相对值。比如坐垂直电梯,电梯启动前记录一个高度,电梯上升到3层,记录一个高度,两个高度的高度差是准确的。
如果需要用在绝对场合,可以输入当前位置的高度作为计算的初始值,然后运动观察高度变化就是准确的。不过如果时间长了,也会容易出现高度漂移的问题。
如果项目要求长时间获取准确高度值且频率要求高,就需要融合其他传感器进行处理,比如GPS。