Board and part

Arduino Nano BMP280 Simulator: Wiring, Code and a Live Circuit

This is a BMP280 barometric pressure and temperature sensor wired to an Arduino Nano over I2C, read live with the Adafruit BMP280 library: temperature, pressure and altitude once a second.

  • 5 V logic
  • Library: Adafruit_BMP280.h
  • I2C address 0x76
  • SDA A4, SCL A5
Arduino Nano · BMP280live0.000 s 0.00x
Click to open it in the editor
The circuit itself, running on the simulator with the sketch below. Press what can be pressed; click anything else to open it in the editor.
Connections

Wiring the BMP280 to the Arduino Nano

Four wires: 3.3 V, GND, SDA to pin A4 and SCL to pin A5. In the editor, drag the sensor’s pressure slider and the altitude moves with it.

Every connection in the circuit above, with the board’s own pin names.

BMP280 pinArduino Nano pinWhy
VIN3.3VThe BMP280 chip is a 3.3 V part; many breakouts have no regulator.
GNDGNDCommon ground.
SCLpin A5I2C clock.
SDApin A4I2C data.

Power

The Nano has the Uno’s chip, so I2C is A4 (SDA) and A5 (SCL), on the analog side of the board next to A6 and A7. The common purple BMP280 breakout has no regulator, so it runs from the Arduino Nano’s 3.3V pin, not 5V. Its I2C pull-ups then go to 3.3 V, which the ATmega328P reads as high.

Pins to leave alone on the Arduino Nano

A6 and A7 are analog only: pinMode(A6, OUTPUT) does nothing and digitalRead(A7) is not there to call. D0 and D1 are the USB serial port.

On a real bench

The Nano plugs into the breadboard itself, straddling the center channel, so the BMP280 goes in a few columns along and every connection is a short jumper. The silkscreen labels its pins D2 to D13 and A0 to A7; in code D2 is simply 2. A Nano clone with a CH340 USB chip needs that driver on a real computer.

The sketch

The code, and what it does.

The sketch the circuit above runs. Open it in the editor, change a line and press Run: it compiles in your browser.

BMP280 on Arduino Nano I2C
#include <Wire.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;   // on I2C: SDA pin A4, SCL pin A5

void setup() {
  Serial.begin(9600);
  if (!bmp.begin(0x76)) {
    Serial.println("No BMP280 at 0x76");
    for (;;) {}
  }
  Serial.println("BMP280 found");
}

void loop() {
  Serial.print("Temperature: ");
  Serial.print(bmp.readTemperature(), 1);
  Serial.print(" C  Pressure: ");
  Serial.print(bmp.readPressure() / 100.0F, 1);
  Serial.print(" hPa  Altitude: ");
  Serial.print(bmp.readAltitude(1013.25), 0);
  Serial.println(" m");
  delay(1000);
}

bmp.begin(0x76) reads the chip’s ID and its factory calibration, which every reading needs. It returns false when nothing answers at that address; boards with SDO tied high answer at 0x77 instead.

readTemperature() is degrees Celsius and readPressure() is pascals, so dividing by 100 gives hectopascals, the unit weather reports use. readAltitude(1013.25) turns pressure into meters above the level where it would be 1013.25 hPa; give it your local sea-level pressure for a true altitude.

Serial.begin(9600) opens the serial monitor. Serial is the USB port, as on the Uno; a clone with a CH340 chip needs that driver on a real computer, which the simulator does not.

Pitfalls

Common mistakes with the BMP280 on the Arduino Nano

The wrong address

Adafruit’s own board answers at 0x77, the cheap purple ones at 0x76, and bmp.begin() with no argument tries 0x77. If it fails, try the other address before suspecting the wiring.

Powering a bare breakout from 5V

The six-pin purple board has no regulator, so 5V goes straight to a chip rated for 3.6 V. Use the Arduino Nano’s 3.3V pin, as in the circuit above.

Confusing it with a BME280

The BME280 looks the same and adds humidity. A BMP280 reports a chip ID of 0x58, a BME280 0x60, and each library refuses the other. If begin() fails at both addresses, check which chip you have.

FAQ

Questions and answers

Can I simulate a BMP280 with an Arduino Nano?

Yes. The circuit at the top of this page is an Arduino Nano with a BMP280, running in your browser on a simulated ATmega328P. The temperature and pressure sliders set what the simulated chip measures, and the library applies the real calibration math to it. Press Run it in the editor to change the wiring or the code; it is free and needs no account.

Where does the BMP280 connect on the Arduino Nano?

The Nano has the Uno’s chip, so I2C is A4 (SDA) and A5 (SCL), on the analog side of the board next to A6 and A7.

How accurate is the altitude?

Pressure changes with the weather by more than it changes over a few floors, so readAltitude() is only as good as the sea-level pressure you give it. Relative changes over a few minutes are accurate to about a meter.

Can I use the BMP280 over SPI?

The chip supports SPI, but this simulated part speaks I2C. Most breakouts are wired for I2C out of the box anyway.

Build your own BMP280 project

Open this circuit in the editor, change the wiring or the code, and keep your version in a free account.