Skip to main content

Barometer

Barometers measure air pressure to determine altitude. They are highly sensitive, responding to a breath of air, and are very temperature sensitive. Typically they incorporate accurate temperature sensors to provide compensation.

Betaflight uses Barometer data to help determine the altitude of the craft, relative to the take-off point, assist with altitude control in GPS Rescue.

In most cases, Betaflight should detect the barometer automatically.

Barometers are much more useful for relative altitude changes than for absolute altitude measurement. A modern barometer chip like the Infineon DPS368 can detect very small altitude changes (less than 10cm), with good noise suppression, and update those values at 40Hz.

The DPS310 chip is much better than the older BMP280, and the DPS368 is better again. Clones of both the DPS310 and the BMP280 are widely used, and these are less reliable, or have poorer temperature compensation, than the originals.

Betaflight zeroes the Barometer data soon after powering up, so that Barometer altitudes are relative to the power-up point. On arming, the zero value may be corrected to zero again.

Barometers that exposed to turbulent air, eg propwash, will return very noisy altitude values. The usual recommendation is that a baro should have soft foam over it to reduce this problem.

When the motors are activated, and the quad is on the ground, the positive pressure between the props and the ground may be interpreted as a negative altitude by the Barometer. This resolves on take-off.

note

Do not paint conformal coating over Barometer chips! Doing so can cover over the port by which they measure air pressure, causing incorrect altitude readings that drift a lot with temperature change.

Confirming that your Barometer is working properly

First ensure that Barometer is enabled in the Configurator's Configuration page.

The Barometer icon at the top should then light up. This means that the firmware included support for Baro, and a suitable driver was included.

Most barometers are powered up via USB, but some require LiPo power; if the icon does not light up, take props off and check to see what happens if you connect a battery or equivalent to the LiPo connector.

If the Barometer lights up, go to the Sensors tab, and choose Barometer at the top. You should then see baro altitude readings. Lifting the quad or flight controller about 1m up and down should show a change in the altitude reading of about 1m also. There will be some noise, and lag, that's normal.

Advanced checking

The debug mode Baro returns:

DebugData
0State (during initialization)
1pressure in hPa absolute
2temperature reported by baro, deg C * 100
3altitude estimate from Baro alone in cm

These values can be logged, or displayed in the graphs in Configurator's Sensors Tab. Check that the temperature reads accurately; a value of 2145 means 21.45 deg C. If it is very wrong, the chip is probably a clone of the DPS310, and temperature compensation may be poor.

Barometer vs GPS for Altitude estimation

Both the barometer and the GPS module report altitude data.

Barometers respond more quickly than GPS modules, but can be noisier. On the other hand, unless a GPS has a good hDOP indicator, the GPS altitude estimate can vary by several meters over a flight. Modern barometer chips, eg the DPS368, are typically faster and more accurate than most GPS modules.

The altitude_source DEFAULT method 'mixes' the two sources together, or, if there is only one source, uses whatever is available. The user can alternatively force BARO_ONLY or GPS_ONLY. With these the user can decide which provides better altitude control in a GPS Rescue.

tip

If a GPS Rescue is initiated with a return altitude of say 10m over a flat field, and the return flight observed Line of Sight, the stability of the altitude control, and the smoothness of the descent, are easily visualized. Test with Baro only vs GPS only. If both seem OK, alone, test the DEFAULT method. Usually DEFAULT delivers the best result.

When altitude_source = DEFAULT, the user can adjust the relative influence of Baro vs GPS on the final altitude reading.

When a GPS module is available, Betaflight gets the Horizontal Dilution of Precision (hDOP) value from the GPS. This estimates the precision of the GPS altitude estimate. We use hDOP to assign an internal gpsTrust value. The default value is 0.3, meaning that if Baro is available, GPS accounts for only 30% of the altitude, reading, but when the dDOP value indicates accurate GPS readings, the gpsTrust value can reach a maximum of 0.9.

The altitude_prefer_baro CLI setting further modifies the gpsTrust value when there is a large difference between the two readings. When altitude_prefer_baro = 100, the default, our trust in the GPS is unaffected if the difference between the two sensors is less than 1m, reduced by half if the difference is 2m, and reduced to 1/5th of normal when the difference is 5m. When set to 50, we need a difference of 4m before our trust in the GPS is reduced by half. When set to zero, our GPS trust estimate is not affected by the difference between the readings.

Hence, if e have both GPS and Baro, and if altitude_source is set to DEFAULT, the relative balance between Baro and GPS depends on the GPS's hDOP estimate of the accuracy of its altitude measurement, the magnitude of the difference between the two readings, and the user's altitude_prefer_baro setting. When altitude_prefer_baro is set to the default of 100, Baro readings will predominate, unless the error is low and the GPS hDOP suggests that GPS is accurate. At lower values of altitude_prefer_baro, GPS will have a greater relative influence.

Basically, if you've got a good Baro, especially a real Infineon DPS310 or DPS368, and probably a BMP280, you should probably accept the default altitude_prefer_baro value of 100, and use the DEFAULT mixing method.

tip

Use the Altitude debug for a detailed evaluation of GPS vs Baro readings

DebugData
0gpsTrust value
1baroAltitude, cm
2gpsAltitude, cm, zeroed on arming
3Vario

Barometer Firmware Support

In Betaflight 4.5 and higher, the Config file for the board automatically includes the base BARO code, and the drivers for whatever Baro chips the manufacturer uses on that board, the type of interface, pins used for the interface, etc.

That's why, in most cases, the Baro should work 'out of the box'.

If the board's config file has no Baro support, and you want to connect an external Barometer, in Betaflight 4.5 you must manually include the BARO code and the needed driver support into your firmware build.

This is achieved, for say a DPS310 baro, by entering BARO BARO_DPS310 in the Custom Defines part of Configurator's Firmware Flasher tab. The word BARO enables the base Barometer code, and the text BARO_DPS310 includes the DPS_310 driver code. For a BMP280, the string to use would be BARO BARO_BMP280.

In 4.4 and earlier, all Baro code and all drivers were included in all firmware builds.

Barometer Bus Connections

Barometers are nearly always connected with an i2c interface, though some use SPI. The board's config file should define the interface/bus details for Baro, and the pins used for the interface.

A flight controller may have one or two i2c buses, or 'devices'. The config file sets the baro_i2c_device setting for Baro automatically.

Boards that have no defined baro_i2c_device will have that value set to 0. When an external Baro is manually connected on an i2c interface, the user must configure the baro_i2c_device setting, manually, to either bus 1 or 2, depending which bus the Baro is connected to.

Barometer Hardware Support

As mentioned above, in Betaflight 4.5 or higher, the drivers for the barometer chips used on the board are defined in the config file. Drivers for additional or different barometer chips must be manually added using the Custom Defines part of Configurator's Firmware Flasher tab, as above.

Each barometer chip has a default i2c 'address'. Some Barometers can support alternate addresses, which sometimes confuses automatic detection.

By default, Betaflight's baro_i2c_address setting is 0, and Betaflight will search for supported barometers by their default address, and connect to whatever baro is found. Note that in 4.5 and above, only the baro drivers that were built into the firmware will be supported.

Barometerdefault i2c addressnotes
BMP085119same address as BMP180
MS5611119uncommon
BMP280118alternate is 119, which is the default address of the BMP180
QMP6988112uncommon
DPS310118alternate is 119 (which is suggested as default in the spec sheet)
SPL06118clone of BMP280, alternate is 119 so that it can appear like a BMP180
BMP388118same address as BMP280 and SPL06
2SMPB_02B112uncommon
LPS22DF93uncommon

If the baro_i2c_address is set to custom value, Betaflight will only search for barometers which respond on the specified i2c address.

The baro_hardware CLI command defaults to AUTO, meaning that Betaflight will attempt to automatically identify the correct Baro chip. Although many share the same i2c address, there should only be one baro present on any one i2c address at a time.

In some cases, it can be necessary to force Betaflight to only use the driver code for a specific chip, e.g. when you know for sure that a particular chip is being used. For example set baro_hardware = DPS310 will force Betaflight to use the driver for the DPS310 (obviously that driver must be included in the firmware in 4.5).

Betaflight's Github lists all supported barometers and their driver code, which includes the i2c address we search on, etc.

Note that nearly all barometer chips have the same i2c address. If it's not 118, the most common alternative option is (rarely) 119.

Barometer Not Identified

If, with the default baro_i2c_address = 0 setting, or automatic barometer detection, a supported Baro is not identified, the possible problems and solutions include:

ProblemSolution
Baro was not enabled in Configuration tabCheck that the switch is 'on' for Baro
baro chip is only powered from LiPotest with power on the LiPo input
The baro_i2c_device or bus value is incorrectit should be 1 or 2, and must match the physical bus/pins to which the barometer chip is soldered
Driver code for that barometer was not included in the firmwareextra drivers can be added using the Custom Defines part of Configurator's Firmware Flasher tab
the barometer chip address has been customisedtry manually configuring the baro_i2c_address from the list above
multiple barometer chip hardware drivers exist on the same i2c address and the wrong one is detectedif you know for sure which barometer is on your board, set baro_hardware to that barometer
the barometer chip is broken, or wired up incorrectlycheck the wiring / replace the chip

CLI Command Summary

  • Barometer related CLI variables
VariableRangeDescription
baro_bustypeNONE, I2C, SPISpecifies a type of bus a selected barometer device is connected.
baro_i2c_device0 ~ Max I2C bus ordinate for MCU type (1 origin, same as x in I2Cx expression in target.h)Specifies a bus ordinate of the I2C bus the device is connected when baro_bustype is I2C. 0 means "none".
baro_i2c_address0 ~ 119 (0x77)Specifies an I2C address of the device in 7-bit representation. 0 is a special value to specify "driver default address". Values 1~7 are invalid and behavior is unpredictable.
baro_spi_device0 ~ Max SPI bus ordinate for MCU type (1 origin, same as x in SPIx expression in target.h)Specifies a bus ordinate of the SPI bus the device is connected when baro_bustype is SPI. 0 means "none".
baro_hardwareNONE, AUTO, BMP280, MS5611, BMP085NONE = Barometer support disabled. AUTO = Firmware will determine device to use under pre-defined rule. BMP280, MS5611 and BMP085 = Explicitly specifies device to use.
  • If the device is SPI connected, CS (Chip Select) pin can be specified with the resource CLI command
Resource nameDescription
BARO_CSSpecifies CS (Chip Select) pin to enable the SPI connected barometer device.

Previous Documentation

See /docs/wiki/guides/archive/barometer-configuration for older documentation about the initial Baro code developments, which took place around 3.2.