Toggle Nav

Interfacing BME280 Barometric Pressure Module with Arduino

Table of Contents

BME280 Module Features

The BOSCH BME280 is a small-size, high accuracy barometric pressure module. Its small dimensions and low power consumption makes it a suitable choice for mobile phones, GPS modules and smart watches. BME280 technology is based on piezoelectric pressure and has a high accuracy, linearity and high stability and durability.

In this tutorial, you will learn how to interface this module using I2C protocol.

You can download the datasheet of this module here.

BME280 Module Pinout

This sensor has 10 pins:

  •  +3V3: Module power supply – 3.3 V
  •  GND: Ground
  •  SLC: I2C Clock
  •  SDA: I2C data
  •  SCK: Serial Clock (output from master)
  •  SDI: Master out slave in (data output from master)
  •  SDO: Master in slave out (data output from slave)
  •  CS: Slave Select (often active low, output from master)

You can see pinout of this module in the image below.

Required Materials

Hardware Components

Arduino UNO R3 × 1
BME280 Barometric Pressure Sensor Module × 1
Male Female Jumper Wire × 1

Software Apps

Arduino IDE

Interfacing BME280 Barometric Pressure Module with Arduino

Step 1: Circuit

The following circuit shows how you should connect Arduino to BME280 module. Connect wires accordingly.

Step 2: Code

Install the following library on Arduino.


If you need more help with installing a library on Arduino, read this tutorial: How to Install an Arduino Library

Upload the following code to your Arduino
  This is a library for the BME280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BME280 Breakout

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface. The device's I2C address is either 0x76 or 0x77.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
  See the LICENSE file for details.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    // default settings
    status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    Serial.println("-- Default Test --");
    delayTime = 1000;


void loop() { 

void printValues() {
    Serial.print("Temperature = ");
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.println(" %");


After running the code, you will see something like this in the serial output.

Liked What you see?

Get updates and learn from the best

More To Explore

Leave a Reply

Your email address will not be published. Required fields are marked *