Arduino Projects

BOSCH BMP585 Barometric Pressure Sensor with Arduino

Bosch BMP585 Barometric Pressure Sensor:

BOSCH BMP585 Barometric Pressure Sensor with Arduino- The Bosch BMP585 Barometric Pressure Sensor is the best Barometric Pressure Sensor so far. It’s a hidden gem I found for you guys. The technical details and uses of this sensor will amaze you. By using this tiny sensor, you can create high-tech gadgets.

BOSCH BMP585 Barometric Pressure Sensor with arduino

Today, we will use the Bosch BMP585 Barometric Pressure Sensor with Arduino. With this sensor, we will measure the temperature and atmospheric pressure, and we will also use it to find out which floor a person is on in a building; we can precisely measure height with the BMP585. You should read this article from start to finish because the information I am going to share with you is not available anywhere else. I am the first one to use the Bosch BMP585 Sensor with the Arduino and in upcoming video and article, I will also use it with the ESP32 WiFi + Bluetooth module.

allpcb circuit

So, without any further delay, let’s get started!




Product Links:

Arduino Nano USB C type (Recommended)

Andonstar Digital Microscope

BOSCH BMP585

*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!

BOSCH BMP585 Barometric Pressure Sensor:

BOSCH BMP585 Barometric Pressure Sensor

The Bosch BMP585 Barometric Pressure Sensor is an ultra-low current consumption and is renowned for its high accuracy and precision. With an absolute accuracy of ±50 pascals and a temperature coefficient offset of ±0.5 pascals per degree Kelvin, it establishes itself as an industry leader in pressure sensing technology. This sensor is so sensitive that it can detect very small height changes, even just a few centimeters. With an operational pressure range spanning from 300 to 1,250 hectopascals, it offers exceptional versatility.

The BMP585 is designed to operate from voltages of 1.08 to 3.6 volts for the IOs and 1.71 to 3.6 volts for the primary supply. Designed with a gel-filled cavity, it provides robust protection against water, chemicals, and other liquids. It can be used underwater and in harsh environments. It offers accurate localization and navigation. Due to its tiny size, the Bosch BMP585 Barometric Pressure Sensor is a single package solution for smart watches, wearables, home appliances, and much more.



BOSCH BMP585 Technical Data

Key Features:

  • Pressure operating range: 30…125 kPa
  • Temperature operating range: -40…+85°C
  • Ultra-low noise and current consumption:
  • Ultra-low noise: < 0.1 PaRMS natively (without low-pass filter enabled)
  • 3 µA at 1 Hz in low power mode
  • Absolute pressure accuracy: ± 30 Pa (typ)
  • Relative pressure accuracy: ± 6 Pa (typ) per 10 kPa step
  • Pressure temperature-induced offset: ± 0.5 Pa/K (typ)
  • Provides true absolute pressure and temperature due to on-chip linearization and temperature compensation
  • Primary digital interface:
  • 12 MHz slave SPI (4-wire, 3-wire)
  • 5 MHz I3C
  • Up to 1 MHz I²C (Fm+)
  • Output data rates:
    • Up to 622 Hz in FORCED mode
    • Up to 480 Hz in CONTINUOUS mode
    • 125…240 Hz in NORMAL mode
  • Wide power supply range:
  • VDD 1.71…3.6 V
  • VDDIO 1.08…3.6 V (both independent)
  • Programmable low-pass filter
  • On-chip FIFO buffer for up to 32 pressure samples
  • Programmable interrupts (e.g., pressure change detection)
  • 6 bytes of user-programmable non-volatile memory
  • Compact 8-pin metal-lid LGA package (typ. 3.25 × 3.25 mm², max. 1.96 mm height)
  • RoHS compliant, halogen, and lead-free
  • Media robustness:
    • No impact on performance and reliability by storage at 15 bar
    • No failure upon exposure to common household chemicals (chlorine bleach, acetic acid, acetone, oleic acid, and insect repellent)
    • Robustness to environmental stress factors (heat, moisture, mechanical forces)
    • Second Level design proposal available for system integration



Typical Applications:

BOSCH BMP585 Barometric Pressure Sensor application

GPS navigation (time-to-first-fix improvement, dead-reckoning, slope detection)

Indoor navigation (floor and elevator detection)

Outdoor navigation

Sports applications (calorie counting, fitness activity identification, water sports)

Emergency caller location

Weather forecast

Vertical velocity indication (e.g., rise/sink speed)

Altitude control for drones and flying toys

Target Devices:

Mobile phones, tablet PCs, GPS devices

Navigation systems

Portable healthcare devices

Home weather stations

Drones and flying toys

Smart watches

Virtual and augmented reality devices

If you want to know more about this sensor, visit the product’s official page and download the datasheet.

Since I am using the BMP585 Barometric Pressure Sensor for the first time, I thought I should try a development board first. That’s why I bought the BMP585 Shuttle Board 3.0.

BOSCH BMP585 Barometric Pressure Sensor shuttle board 3.0

It’s a small PCB with the BMP585 pressure and temperature sensor already placed on it. You can download the PDF file for this board from the product’s official page.

“https://www.bosch-sensortec.com/products/environmental-sensors/pressure-sensors/bmp585/“

BOSCH BMP585 Barometric Pressure Sensor schematic diagram

In this PDF file, you will also find the schematic, which will give you a clear idea of which resistors to use with the BMP585 and how to power it up. It also explains the pins in detail. Even though the BMP585 Shuttle Board 3.0 doesn’t have any labels, you can still easily figure out the pins by looking at the number of pins on each side. One side has 7 pins, and the other side has 9 pins. In the schematic above these are labeled as P1 and P2.

The pins on BMP585 Shuttle Board 3.0 are not breadboard-friendly, so if your soldering skills are not good, you might face some difficulty. To use the BMP585 Shuttle Board 3.0 with Arduino, ESP32, or any other controller, you will need to solder jumper wires to the pins of this board. During soldering the wires, I used my Andonstar Digital Microscope.



BOSCH BMP585 Barometric Pressure Sensor shuttle board 3.0 pins

The schematic has so many pins that it can be confusing to figure out which pin to use and where to connect it. I only understood it after studying the BMP585 sensor’s datasheet. To save you time, I have created this schematic for you.

BOSCH BMP585 Barometric Pressure Sensor with arduino circuit diagram

You only need 4 pins to connect the BMP585 to Arduino, ESP32, ESP8266, or any other controller: 3.3V and GND to power the sensor, and SDA and SCL for I2C communication.

BOSCH BMP585 Barometric Pressure Sensor pcb

I have designed my own PCB for this, which is completely breadboard-friendly.




Download the Schematic and PCB Files:

PCBWay:

PCBWay is a trusted leader in the PCB industry, offering custom-designed boards at competitive prices to suit projects of all sizes—from basic to highly specialized.

Whether you’re working with standard FR-4 or need advanced solutions like Rogers, HDI, or Flexible and Rigid-Flex boards, PCBWay provides high-quality options without the high cost. Get an instant quote at pcbway.com/orderonline.

Curious about what others are creating? Explore innovative projects and ideas from the PCB community on PCBWay’s open-source platform at pcbway.com/project/.

BOSCH BMP585 Barometric Pressure Sensor

As you can see, I have connected the BMP585 Shuttle Board 3.0 to the Arduino. According to the shuttle board schematic, connect pins 1 and 2, labeled as VDD and VDDIO, to 3.3V on the Arduino.

Connect pin 3 to the Arduino GND.

On the other side.

Connect CS or CSB that is the first pin to 3.3V. Let me tell you the BMP585 provides one serial interface to the host. It acts as a slave to the host. The serial interface is configurable to the interface protocols SPI, I3C and I2C. As per the datasheet, if the CSB is connected to 3.3 Volts during power-up and not changed, the primary interface works in I2C or I3C mode. So, for using I2C and I3C, it is recommended to hard-wire the CSB line to VDDIO or 3.3V. For details on Protocol Selection, see the Digital Interface section in the datasheet.

Connect pin 2 labeled as SCK/SCL to the A5 pin on the Arduino.

Connect pin 3 labeled as SDO to 3.3V for I2C Slave address selection.

Finally, connect pin 4 labeled as SDI/SDA to the Arduino A4 pin.



BMP585 interfacing with Arduino:

There shouldn’t be any issues with the connections because we wired the BMP585 Barometric Pressure sensor according to the datasheet. But just to be sure, let’s run an I2C scanner code to check if we can read the I2C address.

I2C Scanner Code:

Connect your Arduino board to the laptop and upload the above program. Once the program is successfully uploaded then open the Serial Monitor.

BOSCH BMP585 Barometric Pressure Sensor i2c address

As you can see, we successfully read the I2C address.



Programming the BMP585 sensor was a bit challenging for me because I couldn’t find its library in the Arduino IDE and even on the product’s official page. While researching data for the BMP585, I came across the BMP581 sensor. Its technical specifications were almost the same as the BMP585, but the BMP585 is better in terms of accuracy and a few other things.

BOSCH BMP585 Barometric Pressure Sensor library installation

Anyway, the Arduino library for the BMP581 was available, so I installed that library. Honestly, I was pretty sure this library would work with the BMP585 sensor. To confirm, I opened a basic example code, uploaded the program, and then opened the Serial Monitor; but it didn’t work.

As I mentioned, there are some common things between the BMP585 and BMP581. So, I decided that instead of creating a completely new library, it’s better to use the BMP581 library. This way, I could use some parts from the BMP581 library and write some of the code myself. But this was not as easy as it sounds.

I studied the datasheet for two days. I carefully read about all the registers, and finally, I was able to write the code successfully.



BOSCH BMP585 Arduino Code:




About the BMP585 Arduino Code:

You can see here that I am using the BMP581 library to create a new sensor object called pressureSensor.

After that, I went down to the bit level and configured each register according to my needs. I have added proper comments for every instruction, so you will not face any difficulty understanding the code. Right now, it might look a bit confusing, but when you compare it with the registers mentioned in the datasheet, everything will become clear.

In the loop() function, we simply get measurements from the sensor and send it to the Serial Monitor. The temperature will be printed in Celsius and the pressure will be printed in Pascals. If you have any questions regarding this program, let me know in a comment. Anyway, let’s go ahead and upload this program.

BOSCH BMP585 Barometric Pressure Sensor data display on arduino serial monitor

Right now, you can see the temperature is 32.83 degrees Celsius and the atmospheric pressure is 97102.58.




display BOSCH BMP585 Barometric Pressure Sensor data on arduino serial monitor

As you can see, when I lift the BMP585 sensor up, the value starts to decrease, and when I bring it down, the value starts to increase again.

BOSCH BMP585 Barometric Pressure Sensor with arduino

I have already confirmed that this pressure value is completely accurate. If you want a more stable value, you can go to the 0x36 register and set the Over-sampling rate (OSR) to 64x or 128x. Right now, I have already set it to 64x. During the practical demonstration it was set to 8x.

In the next project, we will find out which floor a person is on in a building. Let’s do it!



Height Measurement with BMP585:

To count the number of floors, I used the ground level pressure as a reference.

If you want to set any level as a reference point in real-time, you can also use a push button with the controller. So, whenever you press the push button, the current atmospheric pressure value will be saved in a variable. You can then use that saved value as a reference to measure the height.

I also defined two variables for measuring altitude in feet and floor number.

This time, to make the value more stable, I have set the Over-sampling rate (OSR) to 64x in the 0x36 register. Now, the value will be much more stable.

Using these instructions, I first convert the pressure into altitude, and then to find the floor number, I divide it by 10. The reason I divide by 10 is because, in our house, the distance from the floor to the ceiling is around 10 feet.

BOSCH BMP585 Barometric Pressure Sensor with laser rangefinder

For the distance measurement I used the Fnirsi Laser RangeFinder.

That’s why I used 10 for the division.

So, that’s all about the program. I have already uploaded this program and now let’s watch this in action.

height measurement using BOSCH BMP585 Barometric Pressure Sensor

Right now, you can see that the total height is 15 feet, and the floor number is 1. That’t because I am currently on the first floor, and my laptop and BMP585 sensor are on the table. To test this, I will first go to the ground floor, then come back to the first floor, then move up to the second floor, and finally, return to the first floor. I highly recommend that you watch the practical demonstration in the video given below. Anyway, here are some images.

person tracking in building height measurement using BOSCH BMP585 Barometric Pressure Sensor

As you saw, it successfully measured the height and also correctly identified which floor I was on. In the next video and article, I will use the BMP585 Barometric Pressure Sensor with the ESP32. So, that’s all for now!



Watch The Video Tutorial:

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

Related Articles

4 Comments

  1. Sorry newbie question, Is it possible to get pcbway.com to use your bmp585 design above above and get all of the parts and get them soldered onto the board, so it arrives ready for one to use?

  2. Not finding a Micropython driver, I wrote my own for Raspberry Pi at: https://github.com/bradcar/MicroPython_BMP58x, driver now also works for bmp585, bmp581, bmp390, and bmp280 in micropython. In the driver, one can set either altitude or nearest sea level pressure so it can be very accurate absolute altitude. Thanks to this youtube video I quickly hacked by shuttle board to write to my Raspberry Pi Pico 2. Likely the reason why the Arduino driver didn’t work in this video is that the device ID is different for bmp581 and bmp585. this should be easy to change. The bmp585 has almost the same registers and control.

Leave a Reply

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

Back to top button