3.2.1. bmp280
— BMP280 temperature and pressure sensor¶
BMP280 is a temperature and pressure sensor from Bosch Sensortec.

This driver supports both I2C and SPI for device communication.
Datasheet: Datasheet BMP280
3.2.1.1. Example usage¶
This example illustrates how to initialize the driver with an I2C transport layer and then read temperature and pressure from the BMP280 device.
struct bmp280_driver_t bmp280;
struct i2c_driver_t i2c;
struct bmp280_transport_i2c_t transport;
float temperature;
float pressure;
float altitude;
/* Initialize and start a I2C driver. */
i2c_init(&i2c, &i2c_device[0], I2C_BAUDRATE_100KBPS, -1);
i2c_start(&i2c);
/* Initialize the BMP280 I2C transport layer. */
bmp280_transport_i2c_init(&transport,
&i2c,
BMP280_I2C_ADDRESS_AUTOMATIC);
/* Initialize and start the BMP280 driver with the I2C
transport layer. */
bmp280_init(&bmp280,
&transport.base,
bmp280_mode_normal_t,
bmp280_standby_time_500_us_t,
bmp280_filter_off_t,
bmp280_temperature_oversampling_1_t,
bmp280_pressure_oversampling_1_t);
bmp280_start(&bmp280);
/* Read temperature and pressure from the BMP280. */
bmp280_read(&bmp280, &temperature, &pressure);
/* Calculate the altitude from read pressure. */
altitude = science_pressure_to_altitude(
pressure,
SCIENCE_SEA_LEVEL_STANDARD_PRESSURE);
std_printf(OSTR("Temperature: %f\r\n"
"Pressure: %f\r\n"
"Altitude: %f\r\n"),
temperature,
pressure,
altitude);
Source code: src/drivers/sensors/bmp280.h, src/drivers/sensors/bmp280.c
Test code: tst/drivers/software/sensors/bmp280/main.c
Example code: examples/bmp280/main.c
Defines
-
BMP280_I2C_ADDRESS_0
¶ I2C address #0.
-
BMP280_I2C_ADDRESS_1
¶ I2C address #1.
-
BMP280_I2C_ADDRESS_AUTOMATIC
¶ Automatic I2C address detection.
-
BMP280_SPI_POLARITY
¶ Default SPI polarity and phase. Polarity 1 and phase 1 is also supported.
-
BMP280_SPI_PHASE
¶
Enums
-
enum
bmp280_standby_time_t
¶ Standby time in normal mode configuration.
Values:
-
bmp280_standby_time_500_us_t
= 0¶
-
bmp280_standby_time_62500_us_t
¶
-
bmp280_standby_time_125_ms_t
¶
-
bmp280_standby_time_250_ms_t
¶
-
bmp280_standby_time_500_ms_t
¶
-
bmp280_standby_time_1_s_t
¶
-
bmp280_standby_time_2_s_t
¶
-
bmp280_standby_time_4_s_t
¶
-
-
enum
bmp280_filter_t
¶ Filter configuration.
Values:
-
bmp280_filter_off_t
= 0¶
-
bmp280_filter_2_t
¶
-
bmp280_filter_4_t
¶
-
bmp280_filter_8_t
¶
-
bmp280_filter_16_t
¶
-
-
enum
bmp280_temperature_oversampling_t
¶ Temperature oversampling configuration.
Values:
-
bmp280_temperature_off_t
= 0¶
-
bmp280_temperature_oversampling_1_t
¶
-
bmp280_temperature_oversampling_2_t
¶
-
bmp280_temperature_oversampling_4_t
¶
-
bmp280_temperature_oversampling_8_t
¶
-
bmp280_temperature_oversampling_16_t
¶
-
Functions
-
int
bmp280_module_init
(void)¶ Initialize the bmp280 module. This function must be called before calling any other function in this module.
The module will only be initialized once even if this function is called multiple times.
- Return
- zero(0) or negative error code.
-
int
bmp280_init
(struct bmp280_driver_t *self_p, struct bmp280_transport_t *transport_p, enum bmp280_mode_t mode, enum bmp280_standby_time_t standby_time, enum bmp280_filter_t filter, enum bmp280_temperature_oversampling_t temperature_oversampling, enum bmp280_pressure_oversampling_t pressure_oversampling)¶ Initialize given driver object.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: Driver object to be initialized.transport_p
: Transport protocol to use. Reference to an I2C or SPI transport object.mode
: Normal or forced mode. In normal mode the device is periodically measuring temperature and pressure. In burst mode the device is in sleeping (low power consumption) and the MCU wakes it to request a measurement.standby_time
: Normal mode standby time.filter
: Filter configuration, normally only set when the device is in normal mode.temperature_oversampling
: Temperature oversampling.pressure_oversampling
: Pressure oversampling.
-
int
bmp280_start
(struct bmp280_driver_t *self_p)¶ Start given driver by entering normal mode (if mode is
bmp280_mode_normal_t
), and reading calibration data from the device.- Return
- zero(0) or negative error code.
- Parameters
self_p
: Driver object to start.
-
int
bmp280_stop
(struct bmp280_driver_t *self_p)¶ Stop given driver by resetting it.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: Driver object to stop.
-
int
bmp280_read
(struct bmp280_driver_t *self_p, float *temperature_p, float *pressure_p)¶ Read temperature and pressure from the device.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: Driver object.temperature_p
: Temperature in Celsius, or NULL.pressure_p
: Pressure in Pascal, or NULL.
-
int
bmp280_read_fixed_point
(struct bmp280_driver_t *self_p, long *temperature_p, long *pressure_p)¶ Read temperature and pressure from the device and return them as fixed point numbers with three decimal places.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: Driver object.temperature_p
: Temperature in milli-Celsius, or NULL.pressure_p
: Pressure in milli-Pascal, or NULL.
-
int
bmp280_transport_i2c_init
(struct bmp280_transport_i2c_t *self_p, struct i2c_driver_t *i2c_p, int i2c_address)¶ Initialize given I2C transport object.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: I2C transport object to be initialized.transport_p
: I2C driver to use.i2c_address
: Device I2C address, one ofBMP280_I2C_ADDRESS_0
,BMP280_I2C_ADDRESS_1
andBMP280_I2C_ADDRESS_AUTOMATIC
.
-
int
bmp280_transport_spi_init
(struct bmp280_transport_spi_t *self_p, struct spi_driver_t *spi_p)¶ Initialize given SPI transport object.
- Return
- zero(0) or negative error code.
- Parameters
self_p
: SPI transport object to be initialized.spi_p
: SPI driver to use.
-
struct
bmp280_driver_t
¶ - #include <bmp280.h>
The BMP280 driver struct.
Public Members
-
struct bmp280_transport_t *
transport_p
¶
-
uint8_t
ctrl_meas
¶
-
uint8_t
config
¶
-
int16_t
calibration
[12]¶
-
struct log_object_t
log
¶
-
struct bmp280_transport_t *
-
struct
bmp280_transport_i2c_t
¶
-
struct
bmp280_transport_spi_t
¶