亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

BMP180 I2C 气压传感器树莓派接入指南

简介

Bosch BMP180 是一款高精度数字气压传感器,通过 I2C 通信。本指南将教你如何将其接线到树莓派、启用 I2C 总线,并使用现成的 Python 脚本读取温度和气压。

模块概览

模块为紧凑的 15×13 mm PCB,带 5 排针。大多数模块引脚顺序相同,但接线前请核对板上标签。

引脚定义与接线

按下表将模块连接到树莓派 GPIO 排针(P1),文中也提供了面包板接线简图。

模块引脚说明GPIO 排针引脚
VCC3.3 VP1‑01
GND地P1‑06
SCLI2C 时钟P1‑05
SDAI2C 数据P1‑03

设备上电后,运行 i2cdetect -y 1 应显示地址 0x77。

启用 I2C 总线

树莓派默认禁用 I2C,运行 sudo raspi-config 选择 Interface Options → I2C → Yes,然后重启。

Python 示例代码

以下脚本演示如何从 BMP180 读取温度(°C)和气压(mbar),利用传感器内部的校准数据提供准确结果。

#!/usr/bin/python
import smbus
import time
from ctypes import c_short

DEVICE = 0x77  # 默认 I2C 地址
bus = smbus.SMBus(1)  # Pi 2 及后续机型使用总线 1

def convertToString(data):
    return str((data[1] + (256 * data[0])) / 1.2)

def getShort(data, index):
    return c_short((data[index] << 8) + data[index + 1]).value

def getUshort(data, index):
    return (data[index] << 8) + data[index + 1]

def readBmp180Id(addr=DEVICE):
    REG_ID = 0xD0
    chip_id, chip_version = bus.read_i2c_block_data(addr, REG_ID, 2)
    return chip_id, chip_version

def readBmp180(addr=DEVICE):
    REG_CALIB = 0xAA
    REG_MEAS = 0xF4
    REG_MSB = 0xF6
    REG_LSB = 0xF7
    CRV_TEMP = 0x2E
    CRV_PRES = 0x34
    OVERSAMPLE = 3

    cal = 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)
    UP = ((msb << 16) + (lsb << 8) + xsb) >> (8 - OVERSAMPLE)

    # 计算温度
    X1 = ((UT - AC6) * AC5) >> 15
    X2 = (MC << 11) / (X1 + MD)
    B5 = X1 + X2
    temperature = (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) << OVERSAMPLE) + 2) >> 2
    X1 = AC3 * B6 >> 13
    X2 = (B1 * B62) >> 16
    X3 = X1 + X2
    B4 = (AC4 * (X3 + 32768)) >> 15
    B7 = (UP - B3) * (50000 >> OVERSAMPLE)
    P = (B7 * 2) / B4
    X1 = (P >> 8) * (P >> 8)
    X1 = (X1 * 3038) >> 16
    X2 = (-7357 * P) >> 16
    pressure = P + ((X1 + X2 + 3791) >> 4)

    return temperature / 10.0, pressure / 100.0

def main():
    chip_id, chip_version = readBmp180Id()
    print("Chip ID :", chip_id)
    print("Version :", chip_version)
    temperature, pressure = readBmp180()
    print("Temperature :", temperature, "C")
    print("Pressure :", pressure, "mbar")

if __name__ == "__main__":
    main()

下载与运行

直接将脚本保存到树莓派:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py

赋予执行权限并运行:

chmod +x bmp180.py
./bmp180.py

延伸资源

制造工艺

  1. 树莓派+$5 I²C传感器打造温度记录仪
  2. 树莓派接入 DS18B20 单总线数字温度计:分步实战指南
  3. 树莓派读取线性霍尔传感器:Java 指南与 ADC0832 深度解析
  4. 数字光照传感器驱动 LED:Windows 10 IoT Core 树莓派实战
  5. 模拟与数字信号:工业仪表基础
  6. 压阻传感器:将压力转化为精准电子读数的核心技术
  7. 英飞凌发布XENSIV DPS368超紧凑高精度气压传感器 ±2cm高度精度
  8. 英飞凌推出 KP276:行业领先的数字涡轮增压 MAP 传感器,大幅提升发动机效率
  9. 数字磁性霍尔传感器:原理、设计与汽车应用
  10. MAXREFDES220#:基于光学传感器的无袖带血压监测参考设计
  11. Bosch BMP390:智能手机、穿戴设备与室内导航的 50% 更精准高度传感器
  12. 先进液态金属可穿戴压力传感器实现精准健康监测