123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /**
- * Ciastkolog.pl (https://github.com/ciastkolog)
- *
- */
- /**
- * The MIT License (MIT)
- * Copyright (c) 2016 sheinz (https://github.com/sheinz)
- * Copyright (c) 2020 Jinan Bosai Network Technology Co., Ltd.
- */
- #ifndef __BMP280_H__
- #define __BMP280_H__
- // #include "stm32f0xx_hal.h"
- #include <stdint.h>
- #include <stdbool.h>
- /**
- * BMP280 or BME280 address is 0x77 if SDO pin is high, and is 0x76 if
- * SDO pin is low.
- */
- #define BMP280_I2C_ADDRESS_0 0x76
- #define BMP280_I2C_ADDRESS_1 0x77
- #define BMP280_CHIP_ID 0x58 /* BMP280 has chip-id 0x58 */
- #define BME280_CHIP_ID 0x60 /* BME280 has chip-id 0x60 */
- /**
- * Mode of BMP280 module operation.
- * Forced - Measurement is initiated by user.
- * Normal - Continues measurement.
- */
- typedef enum {
- BMP280_MODE_SLEEP = 0,
- BMP280_MODE_FORCED = 1,
- BMP280_MODE_NORMAL = 3
- } BMP280_Mode;
- typedef enum {
- BMP280_FILTER_OFF = 0,
- BMP280_FILTER_2 = 1,
- BMP280_FILTER_4 = 2,
- BMP280_FILTER_8 = 3,
- BMP280_FILTER_16 = 4
- } BMP280_Filter;
- /**
- * Pressure oversampling settings
- */
- typedef enum {
- BMP280_SKIPPED = 0, /* no measurement */
- BMP280_ULTRA_LOW_POWER = 1, /* oversampling x1 */
- BMP280_LOW_POWER = 2, /* oversampling x2 */
- BMP280_STANDARD = 3, /* oversampling x4 */
- BMP280_HIGH_RES = 4, /* oversampling x8 */
- BMP280_ULTRA_HIGH_RES = 5 /* oversampling x16 */
- } BMP280_Oversampling;
- /**
- * Stand by time between measurements in normal mode
- */
- typedef enum {
- BMP280_STANDBY_05 = 0, /* stand by time 0.5ms */
- BMP280_STANDBY_62 = 1, /* stand by time 62.5ms */
- BMP280_STANDBY_125 = 2, /* stand by time 125ms */
- BMP280_STANDBY_250 = 3, /* stand by time 250ms */
- BMP280_STANDBY_500 = 4, /* stand by time 500ms */
- BMP280_STANDBY_1000 = 5, /* stand by time 1s */
- BMP280_STANDBY_2000 = 6, /* stand by time 2s BMP280, 10ms BME280 */
- BMP280_STANDBY_4000 = 7, /* stand by time 4s BMP280, 20ms BME280 */
- } BMP280_StandbyTime;
- /**
- * Configuration parameters for BMP280 module.
- * Use function bmp280_init_default_params to use default configuration.
- */
- typedef struct {
- BMP280_Mode mode;
- BMP280_Filter filter;
- BMP280_Oversampling oversampling_pressure;
- BMP280_Oversampling oversampling_temperature;
- BMP280_StandbyTime standby;
- } bmp280_params_t;
- typedef struct {
- uint16_t dig_T1;
- int16_t dig_T2;
- int16_t dig_T3;
- uint16_t dig_P1;
- int16_t dig_P2;
- int16_t dig_P3;
- int16_t dig_P4;
- int16_t dig_P5;
- int16_t dig_P6;
- int16_t dig_P7;
- int16_t dig_P8;
- int16_t dig_P9;
- /* Humidity compensation for BME280 */
- uint8_t dig_H1;
- int16_t dig_H2;
- uint8_t dig_H3;
- int16_t dig_H4;
- int16_t dig_H5;
- int8_t dig_H6;
- bmp280_params_t params;
- uint8_t id; /* Chip ID */
- } BMP280_HandleTypedef;
- /**
- * Initialize default parameters.
- * Default configuration:
- * mode: NORAML
- * filter: OFF
- * oversampling: x4
- * standby time: 250ms
- */
- void bmp280_init_default_params(bmp280_params_t *params);
- /**
- * Initialize BMP280 module, probes for the device, soft resets the device,
- * reads the calibration constants, and configures the device using the supplied
- * parameters. Returns true on success otherwise false.
- *
- * The I2C address is assumed to have been initialized in the dev, and
- * may be either BMP280_I2C_ADDRESS_0 or BMP280_I2C_ADDRESS_1. If the I2C
- * address is unknown then try initializing each in turn.
- *
- * This may be called again to soft reset the device and initialize it again.
- */
- bool bmp280_init(BMP280_HandleTypedef *dev, bmp280_params_t *params);
- /**
- * Start measurement in forced mode.
- * The module remains in forced mode after this call.
- * Do not call this method in normal mode.
- */
- bool bmp280_force_measurement(void);
- /**
- * Check if BMP280 is busy with measuring temperature/pressure.
- * Return true if BMP280 is busy.
- */
- bool bmp280_is_measuring(void);
- /**
- * Read compensated temperature and pressure data:
- *
- * Temperature in degrees Celsius times 100.
- *
- * Pressure in Pascals in fixed point 24 bit integer 8 bit fraction format.
- *
- * Humidity is optional and only read for the BME280, in percent relative
- * humidity as a fixed point 22 bit interger and 10 bit fraction format.
- */
- bool bmp280_read_fixed(BMP280_HandleTypedef *dev, int32_t *temperature,
- uint32_t *pressure);
- /**
- * Read compensated temperature and pressure data:
- * Temperature in degrees Celsius.
- * Pressure in Pascals.
- * Humidity is optional and only read for the BME280, in percent relative
- * humidity.
- */
- bool bmp280_read_float(BMP280_HandleTypedef *dev, float *temperature,
- float *pressure, float* asl);
- #endif // __BMP280_H__
|