Overview

The BMP180 is a digital barometric pressure sensor manufactured by Bosch Sensortec. It serves as the predecessor to the BMP280, measuring barometric pressure (300 to 1100 hPa300\text{ to }1100\text{ hPa}) and temperature over an I2C bus.

It includes a piezo-resistive sensor, an ADC, a control unit, and an EPROM containing 11 factory calibration coefficients (AC1AC6, VB1, VB2, MB, MC, MD). Host software reads these EEPROM coefficients on startup and applies them to calculate temperature-compensated pressure and altitude.

Quick reference

Module VCC3.3 V to 5.0 V DC (onboard 3.3V LDO)
Chip VDD1.8 V to 3.6 V DC
Pressure range300 hPa to 1100 hPa (+9000 m to -500 m relative to sea level)
Pressure resolution0.01 hPa (0.17 m altitude noise in ultra-high res mode)
Temperature range40C-40^\circ\text{C} to +85C+85^\circ\text{C} (±1.0 C\pm 1.0\text{ }^\circ\text{C} accuracy)
Communication interfaceI2C (fixed address 0x77, up to 3.4 MHz)
Peak current650 µA during conversion, 0.1 µA standby

Pinout

Standard GY-68 Breakout Board Header

PinNameTypeDescription
1VCCPowerSupply voltage (+3.3 V to +5.0 V DC)
2GNDPowerGround (0 V)
3SCLDigital InputI2C Serial Clock input line
4SDADigital I/OI2C Serial Data line
53.3VPower OutputRegulated 3.3V power output
6CLR / EOCDigital OutputEnd of Conversion signal output (Active-HIGH)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Chip)VDDV_{DD}1.82.53.6VDC
Absolute Pressure AccuracyΔPabs\Delta P_{abs}-4.0-1.0+2.5hPaVDD=3.3 VV_{DD} = 3.3\text{ V}, 0C to +65C0^\circ\text{C} \text{ to } +65^\circ\text{C}
Relative Pressure AccuracyΔPrel\Delta P_{rel}±0.12\pm 0.12hPaAt 25C25^\circ\text{C}, equivalent to ±1 m\pm 1\text{ m}
Temperature AccuracyΔT\Delta T-2.0±1.0\pm 1.0+2.0°C0C to +65C0^\circ\text{C} \text{ to } +65^\circ\text{C}
Conversion Time (Ultra Low Power)tconv,ULPt_{conv,ULP}3.04.5msOSS = 0
Conversion Time (Ultra High Res)tconv,UHRt_{conv,UHR}17.025.5msOSS = 3

Oversampling Modes (OSS)

Mode (OSS)DescriptionSamplesConv TimeCurrent Draw
0Ultra Low Power14.5 ms3 μA3\text{ }\mu\text{A}
1Standard27.5 ms5 μA5\text{ }\mu\text{A}
2High Resolution413.5 ms7 μA7\text{ }\mu\text{A}
3Ultra High Resolution825.5 ms12 μA12\text{ }\mu\text{A}

Register Map & Measurement Flow

Key Registers

AddressRegisterAccessDescription
0xAA0xBFCalibration CoefficientsR11 16-bit calibration coefficients (AC1MD)
0xD0CHIP_IDRChip ID register (returns 0x55)
0xF4CONTROLWWrite 0x2E to start Temp read; 0x34 + (OSS << 6) for Pressure
0xF60xF8DATA_OUTRRead raw conversion result MSB (0xF6), LSB (0xF7), XLSB (0xF8)

Measurement Sequence

  1. Read 11 EEPROM calibration words (0xAA to 0xBF).
  2. Write 0x2E to register 0xF4 (Start uncompensated Temperature measurement).
  3. Wait at least 4.5 ms, then read 2 bytes from 0xF6 (raw temperature UT).
  4. Write 0x34 + (OSS << 6) to register 0xF4 (Start uncompensated Pressure measurement).
  5. Wait conversion time (4.5 ms to 25.5 ms4.5\text{ ms to }25.5\text{ ms} depending on OSS), then read 3 bytes from 0xF6 (raw pressure UP).
  6. Apply Bosch datasheet polynomial math using UT, UP, and calibration constants to calculate final TT and PP.

Wiring

GY-68 (BMP180) PinMicrocontroller (Arduino Uno / ESP32)
VCC5V (or 3.3V)
GNDGND
SCLSCL (A5 on Uno, GPIO22 on ESP32)
SDASDA (A4 on Uno, GPIO21 on ESP32)

Common mistakes

  • Skipping EEPROM calibration step: Applying raw pressure values without calculating temperature compensation using the 11 EEPROM coefficients yields completely invalid pressure readings.
  • Reading pressure before reading temperature: The pressure compensation formula requires the temperature value (B5B_5 parameter). Temperature MUST be read and calculated prior to calculating pressure.
  • Fixed I2C address: Unlike the BMP280 (0x76/0x77), the BMP180 has a hardcoded I2C address of 0x77 which cannot be changed via hardware pins.

Notes

  • Calculate altitude from pressure: Altitude (m)=44330×(1(P1013.25)0.1903)\text{Altitude (m)} = 44330 \times \left(1 - \left(\frac{P}{1013.25}\right)^{0.1903}\right).

Assets & downloads