Ir directamente al contenido

All items ship from our office in Colorado USA - $5.95 Flat-Rate US shipping & free shipping on orders over $75!

BMP180 GY-68 Barometric Pressure Altitude I2C Sensor Module User Guide

BMP180 GY-68 Barometric Pressure Altitude I2C Sensor Module

Quick Start: Connect VCC → 3.3V, GND → GND, SDA → A4, SCL → A5 on your Arduino Uno. Install the Adafruit BMP085 Unified library and upload the example sketch. You'll be reading temperature, pressure, and altitude in minutes!


📋 Overview

The BMP180 GY-68 is a high-precision digital barometric pressure sensor module based on the Bosch BMP180 chip. It measures atmospheric pressure and temperature, and can calculate altitude based on pressure readings. The module communicates over the I2C bus, making it easy to wire up to Arduino, ESP32, Raspberry Pi, and other popular microcontrollers with just four connections.

This module comes fully calibrated from the factory and includes on-board 3.3V voltage regulation and I2C pull-up resistors, so you can connect it directly to 5V or 3.3V systems without any extra components. Whether you're building a weather station, a drone flight controller, or just want to know the altitude of your next hiking trip, the BMP180 is a great sensor to have in your toolkit.


⭐ Key Features

  • High Precision Pressure Measurement: Absolute accuracy down to 0.03 hPa (equivalent to ~0.25 meters altitude resolution)
  • Wide Pressure Range: 300 hPa to 1100 hPa, covering altitudes from approximately -500m to +9000m (-1,600 ft to 29,500 ft)
  • Integrated Temperature Sensor: Built-in temperature measurement with ±0.5°C accuracy (range: -40°C to +85°C)
  • Ultra-Low Power Consumption: Only 5μA at 1 sample per second — ideal for battery-powered projects
  • I2C Interface: Simple two-wire communication with a fixed address of 0x77
  • Fast I2C Speed: Supports I2C clock speeds up to 3.5 MHz
  • On-Board Voltage Regulator: Accepts 3.3V or 5V input — safe to use with both 3.3V and 5V microcontrollers
  • On-Board Pull-Up Resistors: Built-in I2C pull-ups for easy, no-fuss wiring
  • Low Noise: Measurement noise as low as 0.02 hPa (17 cm altitude equivalent)
  • Factory Calibrated: Ready to use out of the box — no calibration needed
  • Compact Size: Tiny footprint fits easily into any project

📌 Pinout

The BMP180 GY-68 module has 5 pins. Only 4 pins are needed for standard I2C operation. The pin labeled 3.3 is the regulated 3.3V output from the on-board regulator — it is not a power input.

Pin Label Description
1 VCC Power input — accepts 3.3V to 5V DC
2 GND Ground connection
3 SCL I2C clock line
4 SDA I2C data line
5 3.3 Regulated 3.3V output (from on-board regulator — do not use as power input)

📝 Note: The I2C address of the BMP180 is fixed at 0x77. This address cannot be changed, which means you cannot connect two BMP180 sensors to the same I2C bus without an I2C multiplexer.


📊 Specifications

Parameter Value
Sensor Chip Bosch BMP180
Operating Voltage (VCC) 3.3V to 5V DC (on-board regulator)
Sensor Operating Voltage 1.8V to 3.6V (regulated on-board)
Communication Interface I2C (TWI)
I2C Address 0x77 (fixed)
I2C Speed Up to 3.5 MHz
Pressure Range 300 – 1100 hPa
Pressure Accuracy (Absolute) ±0.03 hPa (typical)
Pressure Noise 0.02 hPa (ultra-low power mode) to 0.06 hPa
Altitude Range Approx. -500m to +9000m (-1,600 ft to 29,500 ft)
Altitude Resolution ~0.25 m (depending on oversampling mode)
Temperature Range -40°C to +85°C
Temperature Accuracy ±0.5°C (at 25°C)
Temperature Resolution 0.1°C
Current Consumption 5 μA at 1 Hz sampling rate
Standby Current 0.1 μA
Conversion Time 4.5 ms (ultra-low power) to 25.5 ms (ultra-high resolution)
Module Dimensions Approx. 13 × 10 × 3 mm (0.51 × 0.39 × 0.12 inches) L × W × H

🔌 Wiring to Arduino Uno

Connecting the BMP180 to an Arduino Uno is straightforward — just four wires. The module's on-board voltage regulator means you can safely power it from the Arduino's 5V pin.

BMP180 Pin Arduino Uno Pin
VCC 5V (or 3.3V)
GND GND
SCL A5
SDA A4

Wiring to Other Boards

If you're using a different microcontroller, connect SDA and SCL to the appropriate I2C pins for your board:

Board SDA Pin SCL Pin
Arduino Uno / Nano A4 A5
Arduino Mega 20 (SDA) 21 (SCL)
Arduino Leonardo 2 (SDA) 3 (SCL)
ESP32 GPIO 21 GPIO 22
ESP8266 (NodeMCU) D2 (GPIO 4) D1 (GPIO 5)

💡 Tip: The BMP180 GY-68 module has built-in I2C pull-up resistors, so you typically don't need to add external pull-ups. However, if you're running long wires (more than about 30 cm / 12 inches), you may want to add 4.7kΩ pull-up resistors on the SDA and SCL lines for reliable communication.


💻 Software & Library Installation

The BMP180 is backward-compatible with the older BMP085 sensor, so the most widely used library is the Adafruit BMP085 Unified library. Here's how to install it:

  1. Open the Arduino IDE
  2. Go to Sketch → Include Library → Manage Libraries...
  3. In the search box, type Adafruit BMP085
  4. Find "Adafruit BMP085 Unified" by Adafruit and click Install
  5. If prompted, also install the Adafruit Unified Sensor dependency library

📝 Note: Even though the library is named "BMP085," it works perfectly with the BMP180. The BMP180 is the successor to the BMP085 and uses the same communication protocol and register map.


🚀 Getting Started — Arduino Example Code

Once you've wired the sensor and installed the library, upload the following sketch to read temperature, pressure, and calculated altitude from the BMP180 and display the values on the Serial Monitor.

Basic Temperature, Pressure & Altitude Reading


#include <Wire.h>
#include <Adafruit_BMP085.h>

Adafruit_BMP085 bmp;

void setup() {
  Serial.begin(9600);

  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP180 sensor, check wiring!");
    while (1) {}
  }

  Serial.println("BMP180 sensor found!");
  Serial.println("-----------------------------");
}

void loop() {
  // Read temperature in Celsius
  float temperature = bmp.readTemperature();

  // Read pressure in Pascals
  float pressure = bmp.readPressure();

  // Calculate altitude based on standard sea-level pressure (1013.25 hPa)
  float altitude = bmp.readAltitude();

  // Read sea-level pressure (provide current altitude for calibration)
  // Example: if you know your altitude is 1609 meters (Denver, CO)
  // float seaLevelPressure = bmp.readSealevelPressure(1609);

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");

  Serial.print("Pressure: ");
  Serial.print(pressure / 100.0);  // Convert Pa to hPa
  Serial.println(" hPa");

  Serial.print("Altitude: ");
  Serial.print(altitude);
  Serial.println(" meters");

  Serial.println("-----------------------------");
  delay(2000);
}

Understanding the Output

Open the Serial Monitor (Tools → Serial Monitor) and set the baud rate to 9600. You should see output similar to:


BMP180 sensor found!
-----------------------------
Temperature: 23.40 °C
Pressure: 1013.25 hPa
Altitude: 0.00 meters
-----------------------------

💡 Tip: The altitude reading from readAltitude() is calculated using the standard sea-level pressure of 1013.25 hPa. For more accurate altitude readings at your location, you can pass the actual sea-level pressure to the function: bmp.readAltitude(101500) (pressure in Pascals). You can find your local sea-level pressure from a nearby weather station or airport.


🔧 How It Works

The BMP180 uses a piezo-resistive sensing element to measure atmospheric pressure. Here's the basic process:

  1. Temperature Measurement: The sensor first reads the ambient temperature, which is needed to compensate the pressure reading for thermal effects.
  2. Pressure Measurement: The sensor measures the atmospheric pressure using its internal piezo-resistive element. The raw reading is compensated using the temperature data and factory-stored calibration coefficients.
  3. Altitude Calculation: Altitude is not directly measured — it is calculated from the pressure reading using the international barometric formula. The formula compares the measured pressure to a known sea-level reference pressure.

The sensor supports four oversampling modes that let you trade off between speed and precision:

Mode Oversampling Conversion Time Noise (hPa)
Ultra Low Power 1 sample 4.5 ms 0.06
Standard 2 samples 7.5 ms 0.05
High Resolution 4 samples 13.5 ms 0.04
Ultra High Resolution 8 samples 25.5 ms 0.02

🎯 Typical Applications

  • Weather Stations: Monitor barometric pressure trends to predict weather changes
  • Altitude Measurement: Determine elevation for hiking, cycling, or drone flight controllers
  • Indoor Navigation: Detect floor-level changes in multi-story buildings
  • GPS Enhancement: Improve GPS altitude accuracy by fusing barometric data
  • HVAC Systems: Monitor pressure differentials in ventilation systems
  • Data Logging: Record environmental conditions over time for science projects
  • IoT & Smart Home: Integrate with ESP32 or ESP8266 for cloud-connected environmental monitoring

🛠️ Troubleshooting

Problem Possible Cause Solution
"Could not find a valid BMP180 sensor" Wiring issue or wrong I2C address Double-check SDA/SCL connections. Run an I2C scanner sketch to verify the sensor is detected at address 0x77.
Altitude reading seems wrong Using default sea-level pressure Pass your local sea-level pressure to readAltitude(). The default 1013.25 hPa may not match your current conditions.
Readings are noisy or unstable Electrical noise or air currents Shield the sensor from direct airflow. Use averaging (take multiple readings and compute the mean). Consider using a higher oversampling mode.
Sensor not detected on I2C bus Missing pull-up resistors or long wires The module has built-in pull-ups, but long wires may need external 4.7kΩ pull-ups on SDA and SCL.
Temperature reads higher than expected Self-heating from nearby components Mount the sensor away from heat-generating components like voltage regulators or processors.
Library won't compile Missing dependency Make sure both Adafruit BMP085 Unified and Adafruit Unified Sensor libraries are installed.

Running an I2C Scanner

If you're having trouble detecting the sensor, upload this I2C scanner sketch to find all devices on the bus:


#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  Serial.println("I2C Scanner - Scanning...");

  byte count = 0;
  for (byte address = 1; address < 127; address++) {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0) {
      Serial.print("Device found at address 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
      count++;
    }
  }

  if (count == 0) {
    Serial.println("No I2C devices found. Check wiring!");
  } else {
    Serial.print("Found ");
    Serial.print(count);
    Serial.println(" device(s).");
  }
}

void loop() {}

The BMP180 should appear at address 0x77.


⚠️ Important Notes

  • Do not exceed 5V on the VCC pin. While the module has an on-board regulator, exceeding 5V may damage the sensor.
  • The BMP180 measures barometric pressure, not gauge pressure. It is not suitable for measuring water pressure, tire pressure, or other non-atmospheric pressure sources.
  • Altitude is calculated, not measured. Accuracy depends on having a correct sea-level pressure reference. Weather changes will cause altitude readings to drift if the reference pressure is not updated.
  • Protect the sensor from moisture and direct sunlight. The sensor opening is sensitive — avoid touching it or exposing it to liquids.
  • The I2C address (0x77) is fixed. You cannot change it. To use multiple BMP180 sensors, you'll need an I2C multiplexer (such as the TCA9548A).
  • The BMP180 is discontinued by Bosch. For new designs, consider the BMP280 or BME280 as drop-in upgrades with improved accuracy and additional features (the BME280 also measures humidity).

💡 Tips & Best Practices

  • For weather monitoring: Take readings every 10–15 minutes and track the trend. A falling pressure trend generally indicates approaching storms, while rising pressure suggests clearing weather.
  • For altitude accuracy: Calibrate the sea-level pressure reference using a known altitude or a local weather station's reported sea-level pressure (QNH).
  • Averaging readings: For smoother data, take 10–20 readings and average them. This reduces noise significantly.
  • Power savings: In battery-powered projects, put the sensor in standby between readings. At 0.1 μA standby current, it barely affects battery life.
  • Combining with other sensors: The BMP180 pairs well with humidity sensors (like the DHT22) and GPS modules for comprehensive environmental and navigation data.

🏪 Where to Buy the BMP180 Pressure Altitude Sensor

This module is available at Envistia Mall.

  • 📦 Fast US Shipping
  • 🔄 Hassle-Free Returns
  • 📧 Responsive Customer Support

📚 Additional Resources


This guide is provided by Envistia Mall for educational and technical reference purposes. The manufacturer and Envistia LLC (dba Envistia Mall) are not responsible for any damages or losses resulting from the use of this product. Always follow proper electrical safety practices when working with electronic components. Specifications are based on manufacturer data and are subject to change without notice.

Share this guide:
in

🛒 Related Products

Find the components mentioned in this guide in our store.

Browse Products →