BMP180

A Bosch BMP180 breakout that measures barometric pressure and temperature over I2C, for weather stations and altimeters.

  • Chip supplyVDD 1.8 V to 3.6 V, VDDIO 1.62 V to 3.6 V
  • Absolute maximum-0.3 V to 4.25 V on all pins
  • I2C address0x77 (0xEE write, 0xEF read), fixed; chip ID 0x55 in register 0xD0
  • I2C clockUp to 3.4 MHz
BMP180, A Bosch BMP180 breakout that measures barometric pressure and temperature over I2C, for weather stations and altimeters.
In short

The BMP180 is Bosch's I2C barometric pressure and temperature sensor: 300 to 1100 hPa with 0.01 hPa resolution and ±0.12 hPa relative accuracy, about ±1 m of altitude (Bosch BMP180 datasheet rev 2.5, pp. 2, 6). It answers at I2C address 0x77 (p. 20), and the bare chip is a 3.6 V part with a 4.25 V absolute maximum (pp. 6, 8). The Adafruit and GY-68 breakouts add a 3.3 V regulator, so VIN takes 3.3 V or 5 V.

The BMP180 replaced the BMP085 and is register compatible with it, which is why the same Adafruit BMP085 library drives both. It measures absolute pressure from 300 to 1100 hPa, roughly +9000 m to -500 m relative to sea level, and temperature with 0.1 °C resolution (Bosch datasheet rev 2.5, pp. 2, 6). Bosch has since moved on to the BMP280 and BMP388, but the BMP180 is still on countless starter kits and tutorials.

Its strength is relative pressure: ±0.12 hPa between 950 and 1050 hPa at 25 °C, about ±1 m of altitude, so it notices a staircase. Absolute accuracy is looser, -4.0 to +2.0 hPa from 0 to 65 °C (p. 6), so an altitude reading needs today's sea-level pressure to be right. Every chip carries factory calibration coefficients in EEPROM that the library reads at begin() and applies to each sample.

The chip itself runs from 1.8 V to 3.6 V (p. 6). The Adafruit breakout adds a 3.3 V regulator and runs its I2C at 3.3 V or 5 V logic (Adafruit BMP085/BMP180 guide, pp. 3, 6), so it wires straight to an Uno or a 3.3 V board. A pressure conversion takes 4.5 ms in ultra low power mode and up to 25.5 ms in ultra high resolution (p. 7).

BMP180 pinout

tinkered.ai/components/bmp180BMP180VINPower3VoPowerGNDGroundSCLI2C SCLSDAI2C SDA
PinFunctionType
VINVIN3.3 V to 5 Vpower in
3Vo3Vo3.3 Vpower out
GNDGNDpower in
SCLI2C SCL3.3 V or 5 V logicinput
SDAI2C SDA3.3 V or 5 V logicbidirectional

How to wire the BMP180

Pin by pin, for the board you have.

BMP180Arduino UnoNote
VIN5V
GNDGND
SCLA5
SDAA4
  • This assumes a breakout with a regulator (Adafruit V2, GY-68). A bare BMP180 board without one is 3.3 V only: wire it to 3.3V, since the chip's absolute maximum is 4.25 V.
Design this circuit on an Arduino Uno

BMP180 code

Every example here compiles for its board.

Libraries: adafruit/Adafruit BMP085 Library
// BMP180 on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/bmp180
// BMP180 on an Arduino Uno: VIN 5V, SDA A4, SCL A5, address 0x77
#include <Wire.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;
const float SEA_LEVEL_PA = 101325;  // replace with today's sea-level pressure for a true altitude

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (!bmp.begin(BMP085_ULTRAHIGHRES, &Wire)) {
    Serial.println("BMP180 not found at 0x77. Check wiring.");
    while (true) delay(10);
  }
  Serial.println("BMP180 ready");
}

void loop() {
  float tempC = bmp.readTemperature();
  long pressurePa = bmp.readPressure();
  float altitudeM = bmp.readAltitude(SEA_LEVEL_PA);
  Serial.print("Temperature: ");
  Serial.print(tempC, 1);
  Serial.print(" C   Pressure: ");
  Serial.print(pressurePa / 100.0, 2);
  Serial.print(" hPa   Altitude: ");
  Serial.print(altitudeM, 1);
  Serial.println(" m");
  delay(1000);
}
Compiled for arduino:avr:uno on 2026-10-30

Before you wire it

Do
  • Check for the regulator before powering from 5 V: the chip's absolute maximum is 4.25 V (datasheet, p. 8).
  • Give the altitude function today's sea-level pressure: absolute accuracy is -4.0 to +2.0 hPa (p. 6), and every hPa of error in the reference is about 8.5 m of altitude (Adafruit guide, p. 9).
  • Plan for one sensor per bus: the address 0x77 is fixed (p. 20).
  • Shield the sensor from drafts and direct sunlight, which change local pressure and temperature faster than the weather does.
Don’t
  • Never put the BMP180 on a bus with another device at 0x77 (a BME280 or BMP280 with SDO high, for example).
  • Never block the small vent hole on the metal lid; the sensor reads pressure through it.
  • Never expect the temperature output to read room air: it is the die temperature, accurate to ±0.5 °C typical at 25 °C (p. 6) and warmed by anything near it.
  • The datasheet asks for 4.7 kΩ I2C pull-ups to VDDIO (p. 19); the breakouts already have them on the 3.3 V side.
  • XCLR (reset) and EOC (end of conversion) are not needed: the library waits the maximum conversion time instead (Adafruit guide, p. 6).
  • Oversampling trades current for noise: ultra low power draws 3 µA at one sample a second, ultra high resolution 12 µA (datasheet, p. 6).
  • For a floor-by-floor altimeter, compare pressure differences rather than absolute altitude: relative accuracy is ±0.12 hPa (±1 m) at 25 °C (p. 6).

Specifications

Chip supply
VDD 1.8 V to 3.6 V, VDDIO 1.62 V to 3.6 VBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 6
Absolute maximum
-0.3 V to 4.25 V on all pinsBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 8
I2C address
0x77 (0xEE write, 0xEF read), fixed; chip ID 0x55 in register 0xD0Bosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), pp. 18, 20
I2C clock
Up to 3.4 MHzBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 19
Pressure range
300 to 1100 hPa (+9000 m to -500 m)Bosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 2
Pressure accuracy
Relative ±0.12 hPa (±1.0 m) at 950 to 1050 hPa, 25 °C; absolute -4.0 to +2.0 hPa, 0 to 65 °CBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 6
Temperature accuracy
±0.5 °C typical at 25 °C (±1.5 °C max), 0.1 °C resolutionBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 6
Current
3 µA (ultra low power) to 12 µA (ultra high resolution) at one sample per second; 0.1 µA standbyBosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 6
Conversion time
4.5 ms max (ultra low power) to 25.5 ms max (ultra high resolution)Bosch BMP180 datasheet rev 2.5 (BST-BMP180-DS000-09), p. 7
Breakout
3.3 V regulator; 3.3 V to 5 V power and logicAdafruit BMP085/BMP180 guide (PDF), pp. 3, 6

From the BMP180 data sheet rev 2.5 (BST-BMP180-DS000-09), published by Bosch Sensortec.

Common mistakes

  1. Wrong altitude by tens of metres

    readAltitude() assumes 1013.25 hPa at sea level unless told otherwise, and sea-level pressure moves with the weather. Each hPa of error is about 8.5 m of altitude (Adafruit guide, p. 9), so pass the local sea-level pressure from a weather service, or report pressure instead.

  2. Using a BMP280 library

    The BMP280 and BME280 have different registers and chip IDs. The BMP180 needs a BMP085/BMP180 driver; its chip ID is 0x55 (datasheet, p. 18).

  3. Two sensors at 0x77

    A BMP180 and a BME280 with SDO high both answer at 0x77. Move the BME280 to 0x76 or use one sensor.

  4. Mixing up pressure units

    readPressure() returns pascals as an integer. Divide by 100 for hPa (millibars); 101325 Pa is 1013.25 hPa.

BMP180 questions

What is the BMP180's I2C address?

0x77, and it is fixed: the datasheet gives 0xEE for write and 0xEF for read, the 8-bit form of 0x77 (Bosch datasheet rev 2.5, p. 20). Its chip ID register 0xD0 reads 0x55 (p. 18).

Can I power the BMP180 from 5 V?

The chip itself no: VDD is 1.8 V to 3.6 V and the absolute maximum is 4.25 V (pp. 6, 8). The Adafruit V2 and GY-68 breakouts add a 3.3 V regulator, so their VIN accepts 5 V.

BMP180 or BMP280?

The BMP280 is Bosch's newer part with lower noise, SPI as well as I2C, and a selectable address. The BMP180 still works well for weather and altitude projects; the two need different libraries.

How accurate is the BMP180 as an altimeter?

For changes in height, about ±1 m: relative accuracy is ±0.12 hPa at 25 °C (datasheet, p. 6). For absolute altitude it is only as good as the sea-level pressure you give it.

Should I still use a BMP180 in a new project?

Breakouts are still widely stocked, and existing code keeps working. For a new design, Bosch's BMP280 and BME280 are the newer family and the usual choice.

Build something with the BMP180

  • Pocket barometer

    Show pressure and a rising or falling trend arrow on an LCD.

    Build this
  • Stair altimeter

    Zero at the ground floor and count the floors you climb.

    Build this
  • Weather logger

    Log temperature and pressure every ten minutes over USB.

    Build this
For AI assistants

This page as plain Markdown, for ChatGPT, Claude or your own agent. /components/bmp180.md

What will you build with it?