BMP585 - Bosch Sensor - For Fun! Helping Amateur Home Builders
Creative Fun Projects to help Amateur Builders - Raspberry Pi
Getting started with the BMP585 - high accuracy, rugged, and liquid resistance
- Getting this hard-to-find sensor:
- Tindie BMP585 (on sale NOW!)
- Bosch's shuttle board - $30 and breadboard unfriendly
- The latest information on using the BMP585 with the Raspberry Pi can be at GitHub link for MicroPython BMPXXX driver
- The driver also supports BMP585, BMP581, BMP390, and BMP280 sensors.
- If can't find a BMP585 sensor board, email me. Reminder our BMP585 sensor is 3.3v ONLY.
Creative uses for the BMP585
The high-accuracy and waterproof nature of the BMP585 should inspire makers to create a variety of different projects. Bosch also states it is resistant to alcohol, salt water, swimming pool chlorinated water, various solvents, and dusty environments. Below are some possible uses of this sensor to get you started:
Pressure Sensor Ideas - to get you started:
Sports (centimeter accuracy)
- Ski elevation tracking (GPS often fails)
- Wing foil jump height logger (water resistant)
- Kite board jump height logger (water resistant)
- Surfer ride height elevation tracker
- Surfer wave set buoy monitor with personal alert – detect patterns of incoming wave sets and then alert you to the best wave
- Pull-up or push-up counter
Nautical
- Boat wave tracker
- Tide and Wave height logger (on a float)
- Sail wind pressure differential logging
Home
- Water tank level monitor, but BMP585's top measured pressure limits to accuracy to about 3 feet (1 meter) depth
- Can use BMP585 with a different sensor that can measure at deeper water depths.
- Home furnace air filter replacement
- Leak detection
- Cooking time and recipe adjustment calculator
- Beer brewing fermenter monitor
- Door closing detector
Remote vehicle uses
- Drone and cctocopters
- Model rockets - altitude and pitot tube
- RC planes
Other Pressure Sensor uses
- Air flow speed monitor (ex: respiratory function) [calculator]
- Elevation corrections for better GPS signal accuracy [science]
- Surface smoothness air gauge - measure miniature peaks and valleys [Air Gaging]
- Drop detection
Our custom BMP585 Board
We wanted a small BMP585 sensor board (I2C) that was breadboard friendly and easy to waterproof, so we designed our own. We also wrote a MicroPython Driver for the Bosch BMP585, BMP581, BMP390, and BMP280 pressure sensors using I2C on Raspberry Pi Pico and Pico 2. It has the ability to set altitude at a known elevation for accurate future tracking. Alternatively one can set sea level pressure from a nearby airport for accurate altitude measurements.
Our sensor board is designed for 3.3v and is only 12.0 mm x 16.9 mm. One can apply waterproofing to this board for underwater pressure sensing. The only other BMP585 sensor board I could find is Bosch's Shuttle board which is not bread-board friendly. At the bottom of this page, I have directions for the strange pinout and hacking it or Raspberry Pi usage. Shout out to PCBway for PCB manufacturing and assembly.


Accurate Sensors Compared
The older sensors have significantly less accuracy. In addition, the new BMP585/BMP581 sensors draw 85% less current,have 80% less signal noise, and temperature coefficient offset is reduced by 33% compared to the older BMP390 sensor.
Table 1: Sensors compared and sources for purchase
Sensor | Cost | Board Size | Date | Height Resolution | Relative accuracy |
Absolute accuracy |
Environment | Technology |
---|---|---|---|---|---|---|---|---|
AIPerf BMP585 |
$26.95 | 12 mm x 16.9 mm |
2023 | few centimeters | +/-0.06 hPa | +/-0.5 hPa | Waterproof | MEMS |
Bosch BMP585 Shuttle Board |
$29.92 | 14 mm x 22 mm |
2023 | 10 centimeters | +/-0.065 hPa | +/-1.0 hPa | Waterproof | MEMS |
TE Connectivity MS5803-01BA |
$29.95 | 19 mm x 21 mm |
2017 | 10 centimeters | +/-0.065 hPa | +/-1.0 hPa | Waterproof | MEMS |
Sparkfun BMP581 |
$20.95 | 7.6 mm x 24.7 mm |
2023 | few centimeters | +/-0.06 hPa | +/-0.3 hPa | Not waterproof | Capacitive |
BMPxxx Driver Features - BMP585, BMP581, BMP390, and BMP280 sensors
Code includes:
- BMP585, BMP581, BMP390, BMP280,and BME280 sensors are supported
- I2C only, check I2C primary address and then checks secondary
- All pressures are in hPA.
- All temperatures are in Celsius.
- One can set altitude at a know location and accurately measure changes as one changes elevations.
- Code enables setting Pressure/Temperature OverSampling and IIR values.
- Altitude is based on the difference between sensor's pressure and the sea level pressure setting.
- One can adjust sea level pressure setting to known local measurements.
- One should set sea level pressure on each use to that of the nearest airport, for example: https://www.weather.gov/wrh/timeseries?site=KPDX
- Your local sea level pressure is NOT the pressure at your sensor; it is the pressure that would be measured if your altitude was sea level.
- The driver defaults to world-wide average sea level pressure of 1013.25 hPa. Weather causes sea level pressure to vary significantly (typ: 990 hPa to 1040 hPa).
- Altitude measurements may be inaccurate by over 1000' (500m) depending on the weather.
- Altitude calculations in this code use NSF's NCAR formula: https://ncar.github.io/aircraft_ProcessingAlgorithms/www/PressureAltitude.pdf
- BME280 sensor is also supported - driver has humidity and dew_point function for this sensor only. The Dew Point calculation uses Sonntag's 1990 formula which uses humidity, temp, and pressure.
- Various error checks are coded throughout the driver.
How to Hack a BMP585 Shuttle Board
Bosch makes the BMP585 shuttle board ($29.92 DigiKey), but it must be wired as below to use the I2C interface with Raspberry Pi. Unfortunately, the pins on the shuttle board are not typical breadboard spacing. Shuttle board pin details are hard to find, but can be found here.
- Shuttle board's 1.27mm pins are not bread board friendly (bread boards use 2.54mm spacing)
- 3.3v:
- vdd to 3.3v (pin 1 of 7-pin connector)
- vddio to 3.3v (pin 2 of 7-pin connector)
- GND:
- wire gnd to ground (pin 3 of 7-pin connector)
- CS for I2C mode:
- wire to 3.3v (pin 1 of 9-pin connector)
- SCK/SCL: I2C SCL (pin 2 of 9-pin connector)
- SDO for I2C mode:
- wire to 3.3v (pin 3 of 9-pin connector)
- SDI/SDA: I2C SDA (pin 4 of 9-pin connector)

