Arduino Nano Altimeter Using GY-BMP280

This is my first project.

I searched how to setup this sensor using i2c with an Arduino Nano but couldn't find anything that worked right away. I had to change some stuff in the default library to get it work with my sensor and wrote a simple sketch to store the data and display it to the serial monitor.

I started flying RC planes and wanted something to check how far up I went. the next step is to integrate the data in the OSD (on screen display, used for flying FPV).

Step 1: Copy Paste Code and Library

the wiring is simple:

VCC to the 3V3 (important, do not use 5V, could destroy the sensor)


SDA to A4

SCL to A5

If the code does not work, but you hooked up everything accordingly try scanning for i2c devices using the scanner (not my program, author is declared in the header, also I didn't write most of the other, I left the original header of those as well). I changed the i2c address in the library to 0x76 as the sensor appeared on my scanner. if you detect your sensor on 0x77 just change this in the library.
If this still does not work you need to change the wire connection. On my Arduino Nano (some cheap chinese knock-off) I figured that the i2c ports are on A4 and A5. But there are several versions out there and some of them seem to use pin 4 (SDA) and pin 5 (SCL). If it still does not work you could download some other guys code. good luck! I hope it worked though :)

I will soon (if I get it to work) program the arduino to output the data via PWM (FrSky Smart Sensor) to use telemetry and compatibility with mini OSD

edit1: added new testing.ino file (code for arduino) that should be sleeker. make sure you have the libraries in the correct folder. ( /arduino/libraries/"library name"/"library name".h ) this caused me some trouble...

2 People Made This Project!


  • Remix Contest

    Remix Contest
  • Sweet Treats Challenge

    Sweet Treats Challenge
  • Build a Tool Contest

    Build a Tool Contest

10 Discussions


9 months ago

works with the i2C, but i have to add level shifter and modify the address in Adafruit_BMP280.h from 0x77 to 0x76


10 months ago

This chip is 3.3V logic so it ought not to work with 5V logic. That is the SDA and SCL should need a converter. But if you are sure this works then there must be tolerance in the system somewhere...Thanks for the info

1 reply

Reply 10 months ago

It worked for me. But i would check the datasheet of your sensor. Logic level shifters are cheaper than good sensors :)


1 year ago

By the way, if you're not using just SDA +SCL but all the pins then the variable needs to be

#define BMP_SCK 13

#define BMP_MISO 12

#define BMP_MOSI 11

#define BMP_CS 10


instead of just

Adafruit_BMP280 bme;

Had a huge issue with that, thought my soldering was shit, then I thought i screwed the sensor, but thanks to the i2c scanner seeing the sensor I eventually figured it out.

4 replies

Reply 1 year ago

How did you map BMP_SCK, BMP_MISO, BMP_MOSI and BMP_CS to the SCL, SDA, CSB and SD9 pins?

Thank you.


Reply 1 year ago

Here's how mine is set:
VCC to 3.3V
SCL to 13 (BMO_SCK)
SDA to 11 (BMP_MOSI)
CSB to 10 (BMP_CS)
SDO to 12 (BMP_MISO)

Believe it or not I think I went trough every possible combination to figure out what goes where ... I used some online site to give me all possible combos of 4 items and went trough them all ...


Reply 1 year ago

I used i2c not SPI protocol, i think if you look up your specific arduino board pinout you should find the appropriate pins on your board and then declare them in the program. Look into the library wire.h to simplify the use of SPI.
-also search for an SPI library on the Arduino IDE.
I hope this helps