supla-device
Loading...
Searching...
No Matches
BME280.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SENSOR_BME280_H_
5#define SRC_SUPLA_SENSOR_BME280_H_
6
7// Dependency: Adafruid BME280 library - use library manager to install it
8#include <Adafruit_BME280.h>
9
10#include "therm_hygro_press_meter.h"
11
12namespace Supla {
13namespace Sensor {
15 public:
16 explicit BME280(int8_t address = 0x77, float altitude = NAN)
17 : address(address), sensorStatus(false), altitude(altitude) {
18 }
19
20 double getTemp() {
21 float value = TEMPERATURE_NOT_AVAILABLE;
22 bool retryDone = false;
23 do {
24 if (!sensorStatus || isnan(value)) {
25 sensorStatus = bme.begin(address);
26 retryDone = true;
27 }
28 value = TEMPERATURE_NOT_AVAILABLE;
29 if (sensorStatus) {
30 value = bme.readTemperature();
31 }
32 } while (isnan(value) && !retryDone);
33 return value;
34 }
35
36 double getHumi() {
37 float value = HUMIDITY_NOT_AVAILABLE;
38 bool retryDone = false;
39 do {
40 if (!sensorStatus || isnan(value)) {
41 sensorStatus = bme.begin(address);
42 retryDone = true;
43 }
44 value = HUMIDITY_NOT_AVAILABLE;
45 if (sensorStatus) {
46 value = bme.readHumidity();
47 }
48 } while (isnan(value) && !retryDone);
49 return value;
50 }
51
52 double getPressure() {
53 float value = PRESSURE_NOT_AVAILABLE;
54 bool retryDone = false;
55 do {
56 if (!sensorStatus || isnan(value)) {
57 sensorStatus = bme.begin(address);
58 retryDone = true;
59 }
60 value = PRESSURE_NOT_AVAILABLE;
61 if (sensorStatus) {
62 value = bme.readPressure() / 100.0;
63 }
64 } while (isnan(value) && !retryDone);
65 if (!isnan(altitude)) {
66 value = bme.seaLevelForAltitude(altitude, value);
67 }
68 return value;
69 }
70
71 void onInit() {
72 sensorStatus = bme.begin(address);
73
74 pressureChannel.setNewValue(getPressure());
75 channel.setNewValue(getTemp(), getHumi());
76 }
77
78 void setAltitude(float newAltitude) {
79 altitude = newAltitude;
80 }
81
82 protected:
83 int8_t address;
84 bool sensorStatus;
85 float altitude;
86 Adafruit_BME280 bme; // I2C
87};
88
89}; // namespace Sensor
90}; // namespace Supla
91
92#endif // SRC_SUPLA_SENSOR_BME280_H_
Definition BME280.h:14
void onInit()
Third method called on element in SuplaDevice.begin()
Definition BME280.h:71
Definition therm_hygro_press_meter.h:13