Comments: BMP180 Barometric Pressure Sensor Hookup


Comments 19 comments

  • Tech Support Tips/Troubleshooting/Common Issues

    The BMP180 [ ] uses one address. Unfortunately, this address is not changeable for the sensor. The comment in this tutorial was referring to other I2C devices on the same bus line. One workaround is to use the softwareI2c library [ ] to create another I2C bus on the Arduino. On the hardware side, I recommend using a logic level converter since the other Arduino I/O pins are not set up as an open drain.

    If you look at the comment by mgrusin, he explains it further in detail and provides another alternative => .

  • This is kind of a complex question, but I’d like to use two of these to act as a kind of Prandtl tube for determining the air speed coming out of a blower. Here is a good description of a what a Prandtl tube is and what it does.

    A prandtl tube basically compares ambient air pressure to the air pressure in the direction of travel to determine air speed. This is a drawing of what I am thinking I would do with two of these sensors:

    I was thinking I could install one sensor on the outside of the box, and one on the inside, to determine the air speed coming out the front of the box. However, I’d like to try to do this with out interrupting the flow of air as it moves. I realize this might be a bit beyond the scope of the tutorial, but do you think there would be a major difference in pressure readings if the sensor was flush versus directly facing the flow of air in a tube?

    Also, when hooking up two of these sensors, would I be able to connect two using only one redboard?

  • These examples work great! I Where can I find a list of all of the library functions for this library?

    • Protip: If you dig into the library folder, the “.h” file is where all the functions are defined for a particular library, and any decent programmer will write lots of comments there on what the functions do. For this part that file is called “SFE_BMP180.h”, and it’s a plain text file you can open with any text editor. Anything listed under “public” are things you can use in your own code. Hope this helps, if you have trouble interpreting the file let me know (I wrote it). Thanks and Good luck!

  • I am thinking about putting a BMP180 in a weather balloon but I am not sure if that is a good idea. Any way it can give me live measurements? Also, I read the BMP180 is very sensitive to high air speed and change in temperature you think I ll have problem with that even if it is “protected” by the payload body? I would really appreciate if you could give me your opinion on that! Thanks!!

    • The BMP180 is a popular sensor to use in weather balloons, but note that its accurate range is only up to 30,000' (9000m). It can’t do anything on its own, but if you hook it up to a microcontroller and a radio, it can give you live measurements.

      As an air pressure sensor, the BMP180 does notice gusts of air as higher pressure. This usually isn’t a problem on balloons as they travel with the wind, so it should normally be dead calm around them (at least until they burst). The BMP180 does need to be exposed to ambient temperature to get an accurate reading; I would personally put it on the exterior of the payload, but shelter it from direct sunlight. Happy flying!

  • Is the BMP180 suitable for use in monitoring a vacuum chamber? I’m wondering whether hard vacuum conditions could damage the sensor eventually.

    • Depending on whether you’re talking about a bell jar or a true vacuum chamber, my guess is that it’s not designed for hard vacuum and the internally sealed volume would eventually become damaged. But you can contact Bosch for a definitive answer.

  • Hello, I’m trying to connect the BMP180 sensor to the SDA1 and SCl1 on an Arduino Due. I’ve tried changing all “wire” values to “wire1” in the library, but I still get the “wire1 was not declared in this scope”. Anyone got any idea what I’m doing wrong?

    • Sorry, no; that’s what I would have tried too. If you figure out the answer, please let us know!

  • I purchased one of these recently and they work fine. I hooked it up and used with Arduino UNO and everything seemed reasonable using the SFE_BMP180 library. but when I tried the same code on a Teensy 3.1 I get completely out of range values for all the parameters read. Yet I can use a library for the BMP85 by and get good results. trying to figure what could be different. between the Teensy and the UNO that give such drastically different results using your code library any thoughts?

    • The SFE_BMP180 library uses floating point math that is considerably different than the fixed-point example code provided by the manufacturer. This gives smoother transitions over pressure changes than the fixed-point code, but it’s entirely possible that the datatypes that work for Arduino don’t translate well to the architecture of the Teensy. If you’re ambitious enough to find the issues in the SFE code that the Teensy is having problems with, we’d love to incorporate the fixes. (There are several input - output test cases in the library comments that should help debugging.) But there’s no problem with you using the working BMP085 code you found, as the BMP180 is software-compatible with the 085.

      • Well I will keep looking since I know one problem is the double type is different in the Teensy 3.1 than on the Uno etc. which really is equivalent to float for Uno’s etc. I will run your code on Teensy with the debug print statements turned on. It may be in the calibration routines.

        • ok now I think I understand the problem. the Teensy3.1 int type are 4 bytes so I changed the int and unsigned int to int16_t and uint16_t. I have made the changes and testing further. I can share once I am done testing, let me know.

          • Definitely! If you’re familiar with submitting code revisions through github, you can do so at the repository page (, or just send them to me at mike.grusin at sparkfun. Thanks for debugging the problem and making the code better!

            • ok I haven’t submitted code in github but there is always a first time. Currently my computer where the code resides is down. So once it is up I will submit some.

  • Wishful thinking but could I power the BMP180 without connection to Arduino, then take the board to some altitude and return, then connect to Arduino and read the maximum altitude?

    • Sorry, that’s a bit too wishful. The sensor can only measure and report pressure readings when it’s hooked up to an Arduino or other microcomputer. You might take a look at the Arduino Pro, which is easy to connect to a battery for off-the-grid measurements.

  • I’m having the same problem. I tried it with arduino 1.0.3 as well and it pulled the same error. While I’m getting better at arduino, I’m still at the “modify example code and see what happens” stage so I have no idea what would be causing this error or what it means.

    EDIT: Nevermind, I got it to work. I just unzipped the file and dumped it in the library folder. On closer inspection, the unzipped file isn’t the library folder and contains basically every bit of documentation for this board, including the library. I moved the library where it belonged and it compiled just fine.

If you've found a bug or have other constructive feedback for our tutorial authors, please send us your feedback!