25 while ((retry++ < 5) && (chip_id != 0x60))
28#ifdef BMP280_DEBUG_PRINT
29 Serial.print(
"Read chip ID: ");
30 Serial.println(chip_id);
36 Serial.println(
"Read Chip ID fail!");
78 var1 = (((adc_T >> 3) - ((int32_t)(dig_T1 << 1))) *
82 var2 = (((((adc_T >> 4) - ((int32_t)dig_T1)) *
83 ((adc_T >> 4) - ((int32_t)dig_T1))) >>
89 float T = (t_fine * 5 + 128) >> 8;
95 int64_t var1, var2, p;
105 var1 = ((int64_t)t_fine) - 128000;
106 var2 = var1 * var1 * (int64_t)dig_P6;
107 var2 = var2 + ((var1 * (int64_t)dig_P5) << 17);
108 var2 = var2 + (((int64_t)dig_P4) << 35);
109 var1 = ((var1 * var1 * (int64_t)dig_P3) >> 8) + ((var1 * (int64_t)dig_P2) << 12);
110 var1 = (((((int64_t)1) << 47) + var1)) * ((int64_t)dig_P1) >> 33;
116 p = (((p << 31) - var2) * 3125) / var1;
117 var1 = (((int64_t)dig_P9) * (p >> 13) * (p >> 13)) >> 25;
118 var2 = (((int64_t)dig_P8) * p) >> 19;
119 p = ((p + var1 + var2) >> 8) + (((int64_t)dig_P7) << 4);
120 return (
float)(p / 256.0);
125 int32_t v_x1_u32r, adc_H;
134 v_x1_u32r = (t_fine - ((int32_t)76800));
135 v_x1_u32r = (((((adc_H << 14) - (((int32_t)dig_H4) << 20) - (((int32_t)dig_H5) * v_x1_u32r)) +
138 (((((((v_x1_u32r * ((int32_t)dig_H6)) >> 10) *
139 (((v_x1_u32r * ((int32_t)dig_H3)) >> 11) + ((int32_t)32768))) >>
141 ((int32_t)2097152)) *
145 v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((int32_t)dig_H1)) >> 4));
146 v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r);
147 v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
148 v_x1_u32r = v_x1_u32r >> 12;
149 float h = v_x1_u32r / 1024.0;
160 float A = pressure / 101325;
161 float B = 1 / 5.25588;
164 C =
C / 0.0000225577;
168uint8_t GroveI2C_BME280::BME280Read8(uint8_t reg)
171 _pWire->beginTransmission(_devAddr);
173 _pWire->endTransmission();
175 _pWire->requestFrom(_devAddr, 1);
177 if (
_pWire->available() < 1)
179 isTransport_OK =
false;
184 isTransport_OK =
true;
190uint16_t GroveI2C_BME280::BME280Read16(uint8_t reg)
194 _pWire->beginTransmission(_devAddr);
196 _pWire->endTransmission();
198 _pWire->requestFrom(_devAddr, 2);
200 if (
_pWire->available() < 2)
202 isTransport_OK =
false;
207 isTransport_OK =
true;
212 return (uint16_t)msb << 8 | lsb;
215uint16_t GroveI2C_BME280::BME280Read16LE(uint8_t reg)
217 uint16_t data = BME280Read16(reg);
218 return (data >> 8) | (data << 8);
221int16_t GroveI2C_BME280::BME280ReadS16(uint8_t reg)
223 return (int16_t)BME280Read16(reg);
226int16_t GroveI2C_BME280::BME280ReadS16LE(uint8_t reg)
228 return (int16_t)BME280Read16LE(reg);
231uint32_t GroveI2C_BME280::BME280Read24(uint8_t reg)
235 _pWire->beginTransmission(_devAddr);
237 _pWire->endTransmission();
239 _pWire->requestFrom(_devAddr, 3);
241 if (
_pWire->available() < 3)
243 isTransport_OK =
false;
246 else if (isTransport_OK ==
false)
248 isTransport_OK =
true;
249 if (!
begin(_devAddr))
251#ifdef BMP280_DEBUG_PRINT
252 Serial.println(
"Device not connected or broken!");
265void GroveI2C_BME280::writeRegister(uint8_t reg, uint8_t val)
268 _pWire->beginTransmission(_devAddr);
271 _pWire->endTransmission();
274void GroveI2C_BME280::i2cMUXSelect()
280 _pWire->endTransmission(1);
281 delayMicroseconds(300);
A library for interfacing with the BME280 sensor via I2C.
#define BME280_REG_DIG_H3
#define BME280_REG_DIG_P6
#define BME280_REG_DIG_P9
#define BME280_REG_DIG_H1
#define BME280_REG_DIG_H5
#define BME280_REG_DIG_P3
#define BME280_REG_CONTROLHUMID
#define BME280_REG_PRESSUREDATA
#define BME280_REG_CONTROL
#define BME280_REG_DIG_H4
#define BME280_REG_DIG_H6
#define BME280_REG_DIG_P4
#define BME280_REG_DIG_T3
#define BME280_REG_DIG_P2
#define BME280_REG_DIG_T1
#define BME280_REG_DIG_T2
#define BME280_REG_DIG_P7
#define BME280_REG_DIG_P5
#define BME280_REG_TEMPDATA
#define BME280_REG_DIG_H2
#define BME280_REG_HUMIDITYDATA
#define BME280_REG_DIG_P1
#define BME280_REG_DIG_P8
#define BME280_REG_CHIPID
float getTemperature(void)
Reads the temperature from the BME280 sensor.
bool begin(int i2c_addr=BME280_ADDRESS)
Initializes the BME280 sensor.
float calcAltitude(float pressure)
Calculates the altitude based on the pressure reading.
float getHumidity(void)
Reads the humidity from the BME280 sensor.
float getPressure(void)
Reads the pressure from the BME280 sensor.