RumPi 1.0
A self-assembling C++ sensor & actuator library for the Raspberry Pi 5
BMP280.h
Go to the documentation of this file.
1#pragma once
2#include <stdio.h>
3#include <math.h>
4#include <wiringPiI2C.h>
5#include "BaseComponent.h"
6
7namespace RumPi
8{
9 //Average sea-level pressure in hPa (ISA standard). Double so it carries the .25 and matches BMP180_SEA_LEVEL.
10 constexpr double BMP280_SEA_LEVEL = 1013.25;
11
12 // Power mode
13 //0 // sleep mode
14 //1 // forced mode
15 //2 // forced mode
16 //3 // normal mode
17 constexpr int POWER_MODE = 3;
18
19 // Temperature resolution
20 //0 // skipped
21 //1 // 16 Bit
22 //2 // 17 Bit
23 //3 // 18 Bit
24 //4 // 19 Bit
25 //5 // 20 Bit
26 constexpr int OSRS_T = 5;
27
28 // Pressure resolution
29 //0 // pressure measurement skipped
30 //1 // 16 Bit ultra low power
31 //2 // 17 Bit low power
32 //3 // 18 Bit standard resolution
33 //4 // 19 Bit high resolution
34 //5 // 20 Bit ultra high resolution
35 constexpr int OSRS_P = 5;
36
37 // Filter settings (0 - 7)
38 constexpr int FILTER = 4;
39
40 // Standby settings
41 //0 // 000 0,5ms
42 //1 // 001 62.5 ms
43 //2 // 010 125 ms
44 //3 // 011 250ms
45 //4 // 100 500ms
46 //5 // 101 1000ms
47 //6 // 110 2000ms
48 //7 // 111 4000ms
49 constexpr int T_SB = 4;
50
51 constexpr int BMP280_REGISTER_DIG_T1 = 0x88;
52 constexpr int BMP280_REGISTER_DIG_T2 = 0x8A;
53 constexpr int BMP280_REGISTER_DIG_T3 = 0x8C;
54 constexpr int BMP280_REGISTER_DIG_P1 = 0x8E;
55 constexpr int BMP280_REGISTER_DIG_P2 = 0x90;
56 constexpr int BMP280_REGISTER_DIG_P3 = 0x92;
57 constexpr int BMP280_REGISTER_DIG_P4 = 0x94;
58 constexpr int BMP280_REGISTER_DIG_P5 = 0x96;
59 constexpr int BMP280_REGISTER_DIG_P6 = 0x98;
60 constexpr int BMP280_REGISTER_DIG_P7 = 0x9A;
61 constexpr int BMP280_REGISTER_DIG_P8 = 0x9C;
62 constexpr int BMP280_REGISTER_DIG_P9 = 0x9E;
63 constexpr int BMP280_REGISTER_CHIPID = 0xD0;
64 constexpr int BMP280_REGISTER_VERSION = 0xD1;
65 constexpr int BMP280_REGISTER_SOFTRESET = 0xE0;
66 constexpr int BMP280_REGISTER_CONTROL = 0xF4;
67 constexpr int BMP280_REGISTER_CONFIG = 0xF5;
68 constexpr int BMP280_REGISTER_STATUS = 0xF3;
69 constexpr int BMP280_REGISTER_TEMPDATA_MSB = 0xFA;
70 constexpr int BMP280_REGISTER_TEMPDATA_LSB = 0xFB;
71 constexpr int BMP280_REGISTER_TEMPDATA_XLSB = 0xFC;
72 constexpr int BMP280_REGISTER_PRESSDATA_MSB = 0xF7;
73 constexpr int BMP280_REGISTER_PRESSDATA_LSB = 0xF8;
74 constexpr int BMP280_REGISTER_PRESSDATA_XLSB = 0xF9;
75
82 class BMP280 : public BaseComponent
83 {
84 private:
85 int CONFIGS;
87
89
92
96
97 int myDigT1;
98 int myDigT2;
99 int myDigT3;
109
125 int WriteByteDataToRegister(const int reg, const int value);
126
141 int ReadByteDataFromRegister(const int reg);
142
157 int ReadWordDataFromRegisterUnsigned(const int reg);
158
173 int ReadWordDataFromRegisterSigned(const int reg);
174 public:
187 BMP280(const int bmpI2CAddress);
188
200 virtual ~BMP280();
201
213 virtual void TurnOn() override;
214
226 virtual void TurnOff() override;
227
240 virtual std::string ToString() const override;
241
253 virtual void ProcessRawValues() override;
254
267 int GetConfigsByte() const;
268
281 int GetCtrlMeasByte() const;
282
295 int GetFileDescriptor() const;
296
309 int GetChipID() const;
310
323 int GetChipVersion() const;
324
337 double GetTemperature() const;
338
351 double GetPressure() const;
352
365 double GetAltitude() const;
366
379 int GetDigT1() const;
380
393 int GetDigT2() const;
394
407 int GetDigT3() const;
408
421 int GetDigP1() const;
422
435 int GetDigP2() const;
436
449 int GetDigP3() const;
450
463 int GetDigP4() const;
464
477 int GetDigP5() const;
478
491 int GetDigP6() const;
492
505 int GetDigP7() const;
506
519 int GetDigP8() const;
520
533 int GetDigP9() const;
534
547 void SetTemperature(const double temp);
548
561 void SetPressure(const double pressure);
562
575 void SetAltitude(const double alt);
576 };
577} // namespace RumPi
BMP280 barometric temperature and pressure sensor (I2C), also deriving altitude from the measured pre...
Definition: BMP280.h:83
int myDigP1
Pressure calibration coefficient.
Definition: BMP280.h:100
int myDigP3
Pressure calibration coefficient.
Definition: BMP280.h:102
double GetTemperature() const
Gets the most recently calculated temperature, in Celsius.
Definition: BMP280.cpp:430
int WriteByteDataToRegister(const int reg, const int value)
Writes a byte to a register over I2C.
Definition: BMP280.cpp:171
int GetDigP6() const
Gets the DigP6 pressure calibration coefficient.
Definition: BMP280.cpp:617
void SetPressure(const double pressure)
Sets the cached pressure, in hPa.
Definition: BMP280.cpp:702
virtual void TurnOn() override
Reads the chip ID/version, soft-resets and configures the sensor, and reads its temperature/pressure ...
Definition: BMP280.cpp:86
virtual std::string ToString() const override
Serializes the most recently calculated temperature, pressure, and altitude to a string.
Definition: BMP280.cpp:146
int myDigP2
Pressure calibration coefficient.
Definition: BMP280.h:101
int myFileDescriptor
The open i2c device file descriptor.
Definition: BMP280.h:88
int GetDigP8() const
Gets the DigP8 pressure calibration coefficient.
Definition: BMP280.cpp:651
int myChipID
The sensor's chip ID.
Definition: BMP280.h:90
int myDigP4
Pressure calibration coefficient.
Definition: BMP280.h:103
virtual void TurnOff() override
No-op: the BMP280's only OS resource (the i2c file descriptor) is opened in the constructor and close...
Definition: BMP280.cpp:128
int ReadWordDataFromRegisterUnsigned(const int reg)
Reads an unsigned 16-bit word from a register over I2C.
Definition: BMP280.cpp:209
int myDigT2
Temperature calibration coefficient.
Definition: BMP280.h:98
int GetConfigsByte() const
Gets the computed register config byte.
Definition: BMP280.cpp:345
int GetDigT3() const
Gets the DigT3 temperature calibration coefficient.
Definition: BMP280.cpp:515
double myPressureInHPA
The most recently calculated pressure, in hPa.
Definition: BMP280.h:94
int ReadWordDataFromRegisterSigned(const int reg)
Reads a signed 16-bit word from a register over I2C, applying two's-complement sign correction.
Definition: BMP280.cpp:228
double myAltitudeInM
The most recently calculated altitude, in meters.
Definition: BMP280.h:95
double myTemperatureInC
The most recently calculated temperature, in Celsius.
Definition: BMP280.h:93
void SetAltitude(const double alt)
Sets the cached altitude, in meters.
Definition: BMP280.cpp:719
int GetDigP4() const
Gets the DigP4 pressure calibration coefficient.
Definition: BMP280.cpp:583
virtual ~BMP280()
Destroys the sensor, turning it off first.
Definition: BMP280.cpp:64
int GetChipID() const
Gets the sensor's chip ID.
Definition: BMP280.cpp:396
int myDigP9
Pressure calibration coefficient.
Definition: BMP280.h:108
BMP280(const int bmpI2CAddress)
Builds a BMP280 bound to the given I2C address, computing its config/ctrl_meas bytes and opening the ...
Definition: BMP280.cpp:19
double GetAltitude() const
Gets the most recently calculated altitude, in meters.
Definition: BMP280.cpp:464
int myDigT1
Temperature calibration coefficient.
Definition: BMP280.h:97
int ReadByteDataFromRegister(const int reg)
Reads a byte from a register over I2C.
Definition: BMP280.cpp:190
int GetDigP5() const
Gets the DigP5 pressure calibration coefficient.
Definition: BMP280.cpp:600
int GetDigT1() const
Gets the DigT1 temperature calibration coefficient.
Definition: BMP280.cpp:481
int myDigP6
Pressure calibration coefficient.
Definition: BMP280.h:105
int GetDigP7() const
Gets the DigP7 pressure calibration coefficient.
Definition: BMP280.cpp:634
int myDigP5
Pressure calibration coefficient.
Definition: BMP280.h:104
int CTRL_MEAS
Register ctrl_meas byte; computed in the ctor.
Definition: BMP280.h:86
double GetPressure() const
Gets the most recently calculated pressure, in hPa.
Definition: BMP280.cpp:447
virtual void ProcessRawValues() override
Reads the raw temperature and pressure registers and applies the Bosch datasheet compensation formula...
Definition: BMP280.cpp:251
int GetChipVersion() const
Gets the sensor's chip version.
Definition: BMP280.cpp:413
void SetTemperature(const double temp)
Sets the cached temperature, in Celsius.
Definition: BMP280.cpp:685
int CONFIGS
Register config byte; computed in the ctor.
Definition: BMP280.h:85
int GetFileDescriptor() const
Gets the open i2c device file descriptor.
Definition: BMP280.cpp:379
int myDigP8
Pressure calibration coefficient.
Definition: BMP280.h:107
int myDigT3
Temperature calibration coefficient.
Definition: BMP280.h:99
int myDigP7
Pressure calibration coefficient.
Definition: BMP280.h:106
int GetDigP9() const
Gets the DigP9 pressure calibration coefficient.
Definition: BMP280.cpp:668
int GetCtrlMeasByte() const
Gets the computed register ctrl_meas byte.
Definition: BMP280.cpp:362
int GetDigP1() const
Gets the DigP1 pressure calibration coefficient.
Definition: BMP280.cpp:532
int GetDigP3() const
Gets the DigP3 pressure calibration coefficient.
Definition: BMP280.cpp:566
int GetDigP2() const
Gets the DigP2 pressure calibration coefficient.
Definition: BMP280.cpp:549
int myChipVersion
The sensor's chip version.
Definition: BMP280.h:91
int GetDigT2() const
Gets the DigT2 temperature calibration coefficient.
Definition: BMP280.cpp:498
Abstract base class for every component (sensor, actuator, etc.) the library manages.
Definition: BaseComponent.h:60
RumPi is the library's top-level facade.
Definition: AlertManager.h:6
constexpr int POWER_MODE
Definition: BMP280.h:17
constexpr int OSRS_T
Definition: BMP280.h:26
constexpr int BMP280_REGISTER_DIG_P6
Definition: BMP280.h:59
constexpr int BMP280_REGISTER_PRESSDATA_MSB
Definition: BMP280.h:72
constexpr int BMP280_REGISTER_DIG_P3
Definition: BMP280.h:56
constexpr int BMP280_REGISTER_CHIPID
Definition: BMP280.h:63
constexpr int BMP280_REGISTER_TEMPDATA_MSB
Definition: BMP280.h:69
constexpr int BMP280_REGISTER_DIG_T1
Definition: BMP280.h:51
constexpr int BMP280_REGISTER_STATUS
Definition: BMP280.h:68
constexpr int BMP280_REGISTER_CONFIG
Definition: BMP280.h:67
constexpr int BMP280_REGISTER_TEMPDATA_XLSB
Definition: BMP280.h:71
constexpr int BMP280_REGISTER_DIG_P4
Definition: BMP280.h:57
constexpr int BMP280_REGISTER_DIG_T2
Definition: BMP280.h:52
constexpr double BMP280_SEA_LEVEL
Definition: BMP280.h:10
constexpr int BMP280_REGISTER_DIG_P8
Definition: BMP280.h:61
constexpr int BMP280_REGISTER_PRESSDATA_LSB
Definition: BMP280.h:73
constexpr int BMP280_REGISTER_DIG_P5
Definition: BMP280.h:58
constexpr int BMP280_REGISTER_DIG_T3
Definition: BMP280.h:53
constexpr int BMP280_REGISTER_CONTROL
Definition: BMP280.h:66
constexpr int BMP280_REGISTER_DIG_P7
Definition: BMP280.h:60
constexpr int BMP280_REGISTER_DIG_P9
Definition: BMP280.h:62
constexpr int T_SB
Definition: BMP280.h:49
constexpr int BMP280_REGISTER_DIG_P2
Definition: BMP280.h:55
constexpr int FILTER
Definition: BMP280.h:38
constexpr int OSRS_P
Definition: BMP280.h:35
constexpr int BMP280_REGISTER_VERSION
Definition: BMP280.h:64
constexpr int BMP280_REGISTER_SOFTRESET
Definition: BMP280.h:65
constexpr int BMP280_REGISTER_DIG_P1
Definition: BMP280.h:54
constexpr int BMP280_REGISTER_TEMPDATA_LSB
Definition: BMP280.h:70
constexpr int BMP280_REGISTER_PRESSDATA_XLSB
Definition: BMP280.h:74