BMP180 I2C Barometrische Druksensor – Raspberry Pi Integratiehandleiding
Inleiding
De Bosch BMP180 is een hoogprecieze digitale barometrische druksensor die communiceert via I2C. In deze handleiding leert u hoe u deze aansluit op een Raspberry Pi, de I2C-bus inschakelt, en temperatuur en druk uitleest met een kant-en-klaar Python-script.
Module Overzicht
De module is een compacte 15 × 13 mm PCB met een 5-pins header. Hoewel de meeste modules dezelfde pinvolgorde volgen, controleer altijd de labels op uw bord voordat u verbindt.
Pinout & Wiring
Sluit de module aan op de GPIO-header (P1) van de Pi zoals hieronder weergegeven. Een eenvoudig diagram voor een breadboard-setup is ook opgenomen.
| Module PCB | Beschrijving | GPIO Header Pin |
|---|---|---|
| VCC | 3,3 V | P1‑01 |
| GND | Ground | P1‑06 |
| SCL | I2C klok | P1‑05 |
| SDA | I2C data | P1‑03 |
Met de apparaat gevoed, zou i2cdetect -y 1 een adres van 0x77 moeten onthullen.
De I2C-bus inschakelen
Schakel I2C in op uw Pi (standaard uitgeschakeld) door sudo raspi-config uit te voeren en Interface Options → I2C → Yes te selecteren, daarna herstarten.
Python Voorbeeld
Het volgende script demonstreert hoe u temperatuur (°C) en druk (mbar) van de BMP180 uitleest. Het gebruikt de kalibratiedata die op de sensor is opgeslagen voor nauwkeurige resultaten.
#!/usr/bin/python import smbus import time from ctypes import c_short DEVICE = 0x77 # Standaard I2C-adres bus = smbus.SMBus(1) # Pi 2 en later gebruiken bus 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("Temperatuur :", temperature, "C") print("Druk :", pressure, "mbar") if __name__ == "__main__": main()
Downloaden & Uitvoeren
Sla het script direct op uw Pi op:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
Maak het uitvoerbaar en voer uit:
chmod +x bmp180.py ./bmp180.py
Verder Bronnen
Productieproces
- Bouw Een Raspberry Pi Temperatuur Logger Met Een $5 I2C Sensor
- Hoe een DS18B20 One-Wire Digitale Thermometer aan te Sluiten op een Raspberry Pi – Stapsgewijze Handleiding
- Een Lineaire Hall-sensor Uitlezen met Raspberry Pi: Java-handleiding & ADC0832-inzichten
- Digitale Lichtsensor – LED Aansturen met Omgevingslicht via Windows 10 IoT Core
- Piezoresistieve Sensoren: Omzetten van Druk in Precieze Elektronische Metingen
- Infineon onthult XENSIV DPS368: ultra-compacte, hoge-precisie barometrische druk-sensor
- Infineon introduceert de KP276: industrie-leidende digitale Turbo MAP-sensor voor superieure motorefficiëntie
- Digitale magnetische Hall-sensoren: basisprincipes, ontwerp, en automotive toepassingen
- MAXREFDES220# – Cuffless bloeddrukmonitoring met optische sensoren
- Bosch BMP390: 50% nauwkeurigere hoogtesensor voor smartphones, wearables en indoor navigatie
- Geavanceerde Vloeibaar Metaal Wearable Druksensor voor Nauwkeurige Gezondheidsmonitoring