BMP180 I2C 数字气压传感器
BMP180 器件是一种数字气压传感器。这在通过 I2C 接口提供对传感器的访问的小模块上可用。这使我们能够以最少的接线轻松将其连接到 Raspberry Pi。
我的模块是一个小型 PCB,尺寸为 15x13mm,带有 5 针接头。其他模块的引脚顺序可能会有所不同,因此请注意标签,以便从 Pi 连接正确的电线。
BMP180 由博世制造,官方 BMP180 数据表包含所有技术细节。
配置 I2C 接口
为了使用此模块,您必须启用 Raspberry Pi 上的 I2C 接口,因为它默认未启用。这是一个相当简单的过程,在我的在 Raspberry Pi 上启用 I2C 接口教程中进行了描述。
连接硬件
下表显示了模块如何连接到 Raspberyr Pi 的 GPIO 接头 (P1)。有关图表,请参阅我的 GPIO 接头指南。
模块 PCB | GPIO 接头引脚 | |
---|---|---|
VCC | 3.3V | P1-01 |
接地 | 地面 | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3.3V | – | – |
这是面包板设置的图表。如果您将模块的四个引脚直接连接到 Pi,则只需要四根母-母线。
面包板图使用了我在 Fritzing 中定义的自定义部件。其他模块可用,它们具有不同的引脚排列,因此如果您的引脚与本教程中显示的引脚不同,请确保将正确的引脚连接到 Pi。
连接设备并为 Pi 通电后,“i2cdetect”命令应显示地址为 0x77 的设备。
示例 Python 脚本
这是一个从传感器读取压力和温度数据的 Python 脚本示例:
<表边界=“0” CELLSPACING =“0” CELLPADDING =“0”>#!/usr/bin/python
导入
smbus
导入
时间
来自
ctypes
导入
c_short
设备
=
0x77
#默认设备I2C地址
#bus =smbus.SMBus(0) # Rev 1 Pi 使用 0
总线
=
smbus.SMBus(
1
)
#Rev 2 Pi 使用 1
def
convertToString(data):
# 将二进制数据转换为二进制数据的简单函数
#一个字符串
返回
str
((数据[
1
]
+
(
256
*
数据[
0
]))
/
1.2
)
def
getShort(data, index):
#从数据中返回两个字节作为有符号的 16 位值
返回
c_short((数据[索引]<<
8
)
+
数据[索引
+
1
]).value
def
getUshort(data, index):
#从数据中返回两个字节作为无符号的 16 位值
返回
(数据[索引]<<
8
)
+
数据[索引
+
1
]
def
readBmp180Id(addr
=
设备):
#注册地址
REG_ID
=
0xD0
(chip_id,chip_version)
=
bus.read_i2c_block_data(addr, REG_ID,
2
)
返回
(chip_id,chip_version)
def
readBmp180(addr
=
设备):
#注册地址
REG_CALIB
=
0xAA
REG_MEAS
=
0xF4
REG_MSB
=
0xF6
REG_LSB
=
0xF7
#控制寄存器地址
CRV_TEMP
=
0x2E
CRV_PRES
=
0x34
# 过采样设置
过采样
=
3
#0 - 3
#读取校准数据
#从EEPROM读取校准数据
校准
=
bus.read_i2c_block_data(addr, REG_CALIB,
22
)
#将字节数据转换为字值
AC1
=
getShort(cal,
0
)
AC2
=
getShort(cal,
2
)
AC3
=
getShort(cal,
4
)
AC4
=
getUshort(cal,
6
)
AC5
=
getUshort(cal,
8
)
AC6
=
getUshort(cal,
10
)
B1
=
getShort(cal,
12
)
B2
=
getShort(cal,
14
)
MB
=
getShort(cal,
16
)
MC
=
getShort(cal,
18
)
MD
=
getShort(cal,
20
)
#读取温度
bus.write_byte_data(addr, REG_MEAS, CRV_TEMP)
time.sleep(
0.005
)
(msb, lsb)
=
bus.read_i2c_block_data(addr, REG_MSB,
2
)
UT
=
(msb <<
8
)
+
lsb
#读取压力
bus.write_byte_data(addr, REG_MEAS, CRV_PRES
+
(OVERSAMPLE <<
6
))
time.sleep(
0.04
)
(msb, lsb, xsb)
=
bus.read_i2c_block_data(addr, REG_MSB,
3
)
向上
=
((msb <<
16
)
+
(lsb <<
8
)
+
xsb)>> (
8
-
OVERSAMPLE)
#优化温度
X1
=
((UT
-
AC6)
*
AC5)>>
15
X2
=
(MC <<
11
)
/
(X1
+
MD)
B5
=
X1
+
X2
温度
=
(B5
+
8
)>>
4
#细化压力
B6
=
B5
-
4000
B62
=
B6
*
B6>>
12
X1
=
(B2
*
B62)>>
11
X2
=
AC2
*
B6>>
11
X3
=
X1
+
X2
B3
=
(((AC1
*
4
+
X3) < +
2
)>>
2
X1
=
AC3
*
B6>>
13
X2
=
(B1
*
B62)>>
16
X3
=
((X1
+
X2)
+
2
)>>
2
B4
=
(AC4
*
(X3
+
32768
))>>
15
B7
=
(向上
-
B3)
*
(
50000
>> OVERSAMPLE)
P
=
(B7
*
2
)
/
B4
X1
=
(P>>
8
)
*
(P>>
8
)
X1
=
(X1
*
3038
)>>
16
X2
=
(
-
7357
*
P)>>
16
压力
=
P
+
((X1
+
X2
+
3791
)>>
4
)
返回
(温度
/
10.0
,压力
/
100.0
)
def
main():
(chip_id,chip_version)
=
readBmp180Id()
打印
"芯片 ID :"
,chip_id
打印
"版本 :"
,chip_version
打印
(温度,压力)
=
readBmp180()
打印
"温度:"
、温度、
"C"
打印
"压力 :"
、压力、
"mbar"
if
__name__
=
=
"__main__"
:
main()
建议您使用以下命令将此脚本直接下载到您的 Pi 上:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
或在浏览器中使用此链接。
为了运行它,您可以使用以下命令:
更多详情:BMP180 I2C数字气压传感器
制造工艺