GY-65 BMP085 Barometric Pressure Sensor Module

SKU: FA2160
Sensor Chip

Bosch BMP085

Pressure Range

300 – 1100 hPa (altitude: -500m to +9,000m)

Pressure Accuracy (Standard Mode)

0.06 hPa (0.5 meter altitude resolution)

Pressure Accuracy (Ultra-High Res Mode)

0.03 hPa (0.25 meter altitude resolution)

Temperature Range

-40°C to +85°C

Temperature Accuracy

±0.5°C (typical)

Supply Voltage (VCC)

3.3V – 5V DC (module level)

Core Voltage (VDDA)

1.8V – 3.6V

Digital I/O Voltage (VDDD)

1.62V – 3.6V

Active Current

5 µA (standard mode)

Standby Current

0.1 µA

Communication Protocol

I²C (100 kHz / 400 kHz)

Conversion Time

7.5 ms (typical)

Module Dimensions

Approx. 13mm × 11mm × 4mm

Operating Temperature

-40°C to +85°C

Pin Count

6 pins (VCC, GND, SCL, SDA, XCLR, EOC)

Product Overview

The GY-65 BMP085 Barometric Pressure Sensor Module is a high-precision, ultra-low power digital pressure and temperature sensor module designed for altitude measurement, weather monitoring, and GPS navigation applications. Based on the Bosch BMP085 sensor chip, this module provides accurate absolute pressure readings (300 to 1100 hPa) and can calculate altitude with a resolution as fine as 0.25 meters in high-resolution mode .

The BMP085 sensor integrates a high-linearity pressure sensor with a 16-bit ΣΔ ADC (Analog-to-Digital Converter), a factory-calibrated temperature sensor, and a control unit with E²PROM. It is factory-calibrated with 11 coefficients stored in its internal memory, eliminating the need for user calibration and ensuring consistent, reliable readings out of the box .

What sets the GY-65 apart is its combination of high precision and ultra-low power consumption. With active current as low as 5 µA in standard mode and standby current of just 0.1 µA, it is perfectly suited for battery-powered portable devices . The sensor operates over a wide pressure range covering altitudes from below sea level up to approximately 9,000 meters (30,000 feet).

The GY-65 breakout board includes all necessary support components and communicates via the I²C interface, making it compatible with a vast range of microcontrollers, including Arduino, ESP32, ESP8266, STM32, and Raspberry Pi. The module is 3.3V and 5V compatible, allowing direct connection to most development boards without level shifters .

Key Features

  • High-Precision Pressure Sensing: Pressure range of 300 to 1100 hPa, covering altitudes from -500 meters to +9,000 meters .

  • Exceptional Resolution: Ultra-high resolution mode achieves 0.03 hPa accuracy, translating to altitude resolution of approximately 0.25 meters (8 inches) .

  • Integrated Temperature Sensor: Built-in temperature output with factory calibration for accurate thermal compensation of pressure readings .

  • Ultra-Low Power Consumption: Active current of 5 µA in standard mode, standby current of 0.1 µA – ideal for battery-powered IoT devices .

  • I²C Digital Interface: Simple 2-wire communication (SDA, SCL) with standard I²C protocol .

  • Wide Voltage Compatibility: Operates on 3.3V or 5V power, compatible with both 3.3V and 5V logic systems .

  • Factory Calibrated: 11 calibration coefficients stored in internal E²PROM ensure accurate readings without user calibration .

  • Fast Response Time: 7.5 ms conversion time for pressure and temperature readings .

  • Temperature Compensation: Built-in temperature sensor automatically compensates pressure readings for ambient temperature variations .

  • Compact Form Factor: Small module size easy to integrate into space-constrained projects .

Technical Specifications

Parameter Operating Value
Sensor Chip Bosch BMP085
Pressure Range 300 – 1100 hPa (altitude: -500m to +9,000m)
Pressure Accuracy (Standard Mode) 0.06 hPa (0.5 meter altitude resolution)
Pressure Accuracy (Ultra-High Res Mode) 0.03 hPa (0.25 meter altitude resolution)
Temperature Range -40°C to +85°C
Temperature Accuracy ±0.5°C (typical)
Supply Voltage (VCC) 3.3V – 5V DC (module level)
Core Voltage (VDDA) 1.8V – 3.6V
Digital I/O Voltage (VDDD) 1.62V – 3.6V
Active Current 5 µA (standard mode)
Standby Current 0.1 µA
Communication Protocol I²C (100 kHz / 400 kHz)
Conversion Time 7.5 ms (typical)
Module Dimensions Approx. 13mm × 11mm × 4mm
Operating Temperature -40°C to +85°C
Pin Count 6 pins (VCC, GND, SCL, SDA, XCLR, EOC)

Pinout & Connection Guide

The GY-65 module features a 6-pin configuration, though only 4 pins are required for basic operation .

Pin Definitions

Pin Label Function Description
VCC VCC / 3-5V Power Supply Connect to 3.3V or 5V DC power source. Module is compatible with both voltages 
GND GND Ground Common ground connection
SCL SCL I²C Clock Line Connect to SCL pin of your microcontroller
SDA SDA I²C Data Line Connect to SDA pin of your microcontroller
XCLR XCLR Reset Optional reset pin (active low) – can be left unconnected 
EOC EOC End of Conversion Optional interrupt pin indicating conversion complete – can be left unconnected 

I²C Pin Mapping for Common Development Boards

Development Board SDA Pin SCL Pin Power Note
Arduino Uno / Nano A4 (SDA) A5 (SCL) VCC to 5V
Arduino Mega 2560 20 (SDA) 21 (SCL) VCC to 5V
ESP32 GPIO21 GPIO22 VCC to 3.3V
ESP8266 (NodeMCU) GPIO4 (D2) GPIO5 (D1) VCC to 3.3V
Raspberry Pi GPIO2 (Pin 3) GPIO3 (Pin 5) VCC to 3.3V

Wiring Diagram (Arduino Uno)

text
GY-65 Module          →    Arduino Uno
─────────────────────────────────────────
VCC                   →    5V
GND                   →    GND
SCL                   →    A5 (SCL)
SDA                   →    A4 (SDA)

Important Note: Most GY-65 modules include onboard pull-up resistors, but if you experience communication issues, you may need to add external 4.7kΩ pull-up resistors on the SDA and SCL lines.

Theory of Operation

Pressure-to-Altitude Relationship

Atmospheric pressure decreases with increasing altitude. The BMP085 measures absolute barometric pressure, from which altitude can be calculated using the barometric formula. The high resolution of the sensor (0.03 hPa in ultra-high resolution mode) enables altitude detection with approximately 0.25 meter resolution .

Oversampling (OSS) Settings

The BMP085 supports multiple oversampling settings that trade off between conversion speed and noise level:

OSS Setting Oversampling Ratio Pressure Resolution Conversion Time Best For
0 (Ultra-Low Power) 256 0.06 hPa (0.5 m) 4.5 ms Battery-powered applications
1 (Standard) 512 0.06 hPa (0.5 m) 7.5 ms General purpose 
2 (High Resolution) 1024 0.04 hPa (0.3 m) 13.5 ms Higher accuracy needs
3 (Ultra-High Resolution) 2048 0.03 hPa (0.25 m) 25.5 ms Maximum precision 

Higher OSS settings provide better noise reduction and resolution but require longer conversion times. For altitude measurement applications requiring centimeter-level accuracy, OSS=2 or OSS=3 are recommended.

Temperature Compensation

The BMP085 includes an integrated temperature sensor that is used to compensate the pressure readings. The 16-bit ADC measures both pressure and temperature, and the factory-stored calibration coefficients are applied to obtain accurate, temperature-compensated results .

Usage Guide

Software Setup (Arduino IDE)

Step 1: Install Required Libraries

The BMP085 is supported by several libraries. The most commonly used are:

Option A: “Adafruit BMP085” Library – Simple, well-documented, and widely used 

Option B: “BMP085” Library – Lightweight alternative

Install via Arduino Library Manager:

  1. Open Arduino IDE → Sketch → Include Library → Manage Libraries

  2. Search for “BMP085”

  3. Install the library by Adafruit (recommended)

Step 2: Basic Test Sketch

cpp
/*
  GY-65 BMP085 Barometric Pressure Sensor Example
  Reads pressure, temperature, and calculates altitude
*/

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

Adafruit_BMP085 bmp;

// Sea level pressure in hPa (adjust to your local conditions)
const float SEA_LEVEL_PRESSURE_HPA = 1013.25;

void setup() {
  Serial.begin(9600);
  
  // Initialize the sensor
  if (!bmp.begin()) {
    Serial.println("BMP085 sensor not found! Check wiring.");
    while (1);
  }
  
  Serial.println("GY-65 BMP085 Sensor Ready");
  Serial.println("-----------------------------");
}

void loop() {
  // Read temperature (Celsius)
  float temperature = bmp.readTemperature();
  
  // Read pressure (Pascals)
  int32_t pressurePa = bmp.readPressure();
  float pressureHPa = pressurePa / 100.0;  // Convert to hPa
  
  // Calculate altitude (meters) using standard sea level pressure
  float altitude = bmp.readAltitude();
  
  // For more accurate altitude, use local sea level pressure
  // float altitude = bmp.readAltitude(SEA_LEVEL_PRESSURE_HPA * 100);
  
  // Display results
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");
  
  Serial.print("Pressure: ");
  Serial.print(pressureHPa);
  Serial.println(" hPa");
  
  Serial.print("Pressure: ");
  Serial.print(pressurePa);
  Serial.println(" Pa");
  
  Serial.print("Altitude: ");
  Serial.print(altitude);
  Serial.println(" m");
  
  Serial.println("-----------------------------");
  
  delay(2000);  // Read every 2 seconds
}

Step 3: Selecting Oversampling Mode

For higher accuracy, you can modify the oversampling setting:

cpp
// When initializing, you can specify the oversampling mode
// Options: BMP085_ULTRA_LOW_POWER, BMP085_STANDARD, BMP085_HIGH_RES, BMP085_ULTRA_HIGH_RES
Adafruit_BMP085 bmp(BMP085_ULTRA_HIGH_RES);

Altitude Calculation Tips

For accurate altitude readings, you should provide the local sea-level pressure. This can be obtained from:

  • Local weather station data

  • Initial calibration at a known altitude

  • Online weather services

cpp
// Calculate altitude using local sea level pressure (in Pascals)
float altitude = bmp.readAltitude(localSeaLevelPressure);

Using with Different Microcontrollers

Arduino (5V Logic):

  • Connect VCC to 5V

  • SCL/SDA connect directly to I²C pins (A5/A4 on Uno)

ESP32 / ESP8266 (3.3V Logic):

  • Connect VCC to 3.3V

  • Connect SCL/SDA to appropriate I²C pins (GPIO21/22 for ESP32, GPIO4/5 for ESP8266)

  • The sensor works well with both 3.3V and 5V logic 

Raspberry Pi (Python):

  • Enable I²C via raspi-config

  • Install required libraries: pip3 install Adafruit_BMP

  • Connect VCC to 3.3V (Pin 1), GND to GND, SCL to GPIO3 (Pin 5), SDA to GPIO2 (Pin 3)

Q: How accurate is the altitude measurement?

The BMP085 can achieve altitude resolution of approximately 0.25 meters (8 inches) in ultra-high resolution mode . However, absolute accuracy depends on proper calibration with local sea-level pressure. For relative altitude changes (e.g., climbing stairs), the sensor is extremely precise.

Q: What is the difference between GY-65 and BMP180/BMP280 sensors?

The GY-65 uses the BMP085 sensor, which is an older but still capable sensor. The BMP180 and BMP280 offer improved specifications (lower noise, wider range) but the BMP085 remains a cost-effective choice for many altitude and weather applications. The GY-65 module is widely available and well-supported by libraries .

Q: Can I use this sensor with 5V logic microcontrollers like Arduino Uno?

Yes. The GY-65 module is both 3.3V and 5V compatible, so it can be used directly with 5V Arduinos without level shifters .

Q: What is the default I²C address of the GY-65 module?

The BMP085 has a fixed I²C address of 0x77 (119 decimal) .

Q: Why is my module not detected on the I²C bus?

Common issues:

  1. Wiring: Verify VCC, GND, SCL, and SDA connections

  2. Pull-up resistors: Ensure 4.7kΩ pull-ups are present on SCL and SDA lines

  3. Power: Ensure your power supply can provide adequate current

  4. Library: Verify the correct library is installed

Q: How do I improve altitude reading stability?

For stable altitude readings:

  1. Use ultra-high resolution mode (OSS=3) for maximum precision 

  2. Apply a moving average filter to smooth readings

  3. Allow the sensor to warm up for a few minutes before critical measurements

  4. Protect the sensor from direct airflow (wind)

  5. Re-calibrate the sea-level pressure reference when moving to different locations

Q: What oversampling setting should I use?

The choice depends on your application:

  • OSS=0 (Ultra-Low Power): Battery-powered, low-power applications

  • OSS=1 (Standard): General purpose, default setting

  • OSS=2 (High Resolution): Higher accuracy needs

  • OSS=3 (Ultra-High Resolution): Maximum precision (0.25m altitude resolution)

Q: Do I need to calibrate the sensor?

No. The BMP085 sensor is factory-calibrated, and the 11 calibration coefficients are stored in the sensor’s internal E²PROM. Your library will automatically read these coefficients and use them to convert raw ADC readings to accurate pressure and temperature values. No user calibration is required .

Q: Is the GY-65 suitable for use in drones or UAVs?

The BMP085 works well for altitude hold in drones, but it has a slower update rate than newer sensors like the BMP280 or MS5611. For basic altitude stabilization, it is sufficient, but for acrobatic or high-speed flight, a faster sensor is recommended.

Q: What is the power consumption in different modes?

The sensor is very power-efficient:

  • Active mode (converting): 5 µA typical 

  • Standby mode: 0.1 µA 

  • For battery-powered applications, place the sensor in standby between readings to conserve power