Good barometers: the BMP388 and BMP390

Barometric pressure is considered to be one of the less interesting metrics to measure with a personal weather station. As a factor in global weather predictions it is very important, but in terms of current conditions we learn a lot more from our thermometers, anemometers, rain gauges and other sensors. Especially if we are considering how weather affects us humans.

Nevertheless, having an accurate barometer has always been an aim for me. My interest in proper barometric pressure readings was sparked further by the Tonga erruption in early 2022. The shockwave produced by the explosive eruption traveled the world several times. At the time I had 2 decent barometers taking measurements. A BMP280 and the Davis WeatherLink Live both detected a 3 hPa spiked just after 8 P.M. on January 15th. The second shockwave was also clearly visible in the data from around 3 A.M. on the 16th. How awesome is that!

It is surprisingly challenging to find a proper pressure sensor. Since before I started out with I have been trying various barometers. I recall looking at products from Oregon Scientific, one of which the datasheet specified a bizarre imprecision of 7 hPa. The Smartbedded Meteostick has an internal barometer, but it never gave me proper readings. It had too many unexplained spikes, which led me to try out a BMP180. My experience with this board is that from moment to moment it gives good results, but can oddly drift during longer periods. I would calibrate it against some reference and see it compare nicely for weeks, and then realize at some point that the sensor was reading 0.8 hPa lower than the reference.

This led to the improved BMP280 and the internal barometer of the Davis WeatherLink Live. For some time the latter was my primary sensor. But it seemed to jump up and down from time to time (suddenly output would be 0.3 hPa higher for a few hours before returning to ‘normal’). The internal API of the WeatherLink Live will only give periodic updates of the pressure value, which prevents me from calculating averages from repeated readings and filtering out noise that way. Also, because my Davis WeatherLink is located near a window for proper signal reception, it receives sunlight during parts of the day. This appears to have a large effect on readings as well.

Some time ago I added a BMP388 and BMP390 to my setup. The sensors themselves are made by Bosch, but they are mounted onto breakout boards by Adafruit, which make them easy to interface with.

As can be guessed from the presence of SCL and SDA pins, these boards support I2C. Additional pins facilitate communication using SPI as well.

Since they don’t need to be outside to get proper readings, no special hardware setups with enclosures and power supplies are required. I have mine inside a closet dangling from a few wires between my router and network disks.

The only thing I need to take into consideration as far as the location of the devices goes, is the elevation relative to sea level. This is relevant when converting absolute pressure to relative pressure. The latter is the value being produced by the sensor, while relative pressure is calculated based on elevation.

The I2C and SPI protocols allows for easy processing of readings with any Arduino compatible device. The Arduino IDE has ready to go libraries for the sensors, like this BMP388_DEV or the Adafruit BMP3xx library.

As is so often the case, Adafruit has a great tutorial available, so I will not repeat them here.

What I will share are my experiences with both the BMP388 and BMP390. Simply put, these are superb devices. I have been using them continuously since (let me check the database) February 2022 (BMP388) and August 2022 (BMP390). This is a chart for today.

For the first few hours, their output is virtually identical, later on the sensors deviate slightly. But we are talking 0.05 hPa. This is consistently the most they will disagree across the entire pressure range. Here is a chart from February 22nd this year, which is the lowest the pressure has been in 2024.

Arguably there are some moments where the sensors appear slightly noisy and they may diverge a little more than 0.1 hPa in those moments, but this is the worst it gets.

Here is January 9th, with the high pressure year to date.

Here again, the deviation rarely exceeds 0.05 hPa.

This is all in line with the datasheets specifying an relative accuracy (for all purposes and intents, precision) of 0.03 hPa for the BMP390 and 0.08 hPa for the BMP388. At the same time, absolute accuracy is said to be +/- 0.5 hPa. In other words, the readings from the sensor may be off by that much compared to the true air pressure value. This is also consistent with my experience. I needed offsets of as much as 0.4 hPa in the initial setup. Once you take that into account, both these sensors work like a charm and keep doing so for around 2 years for me now. The long term stability is listed as 0.33 hPa for the BMP388 and 0.16 hPa for the BMP390. This is not insignificant, but I cannot say this translates into my results. Unless both sensors have been drifting in exactly the same way.

This all does not mean I will not jump at the opportunity to try any improved successor to the BMP390, should it become available. But it will not be because I am looking to gain any measurable improvement. Perhaps a better absolute accuracy would be nice, but since a simple offset does the trick (unlike some other sensors, like thermistors) I do not consider it any issue.