Skip to content

Commit 9530744

Browse files
committed
add support for BMP280 temperature+pressure sensor
1 parent 5fa6533 commit 9530744

File tree

5 files changed

+69
-23
lines changed

5 files changed

+69
-23
lines changed

src/helpers/sensors/EnvironmentSensorManager.cpp

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ static Adafruit_AHTX0 AHTX0;
1515
static Adafruit_BME280 BME280;
1616
#endif
1717

18+
#if ENV_INCLUDE_BMP280
19+
#ifndef TELEM_BMP280_ADDRESS
20+
#define TELEM_BMP280_ADDRESS 0x76 // BMP280 environmental sensor I2C address
21+
#endif
22+
#define TELEM_BMP280_SEALEVELPRESSURE_HPA (1013.25) // Athmospheric pressure at sea level
23+
#include <Adafruit_BMP280.h>
24+
static Adafruit_BMP280 BMP280;
25+
#endif
26+
27+
1828
#if ENV_INCLUDE_INA3221
1929
#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address
2030
#define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
@@ -55,6 +65,17 @@ bool EnvironmentSensorManager::begin() {
5565
}
5666
#endif
5767

68+
#if ENV_INCLUDE_BMP280
69+
if (BMP280.begin(TELEM_BMP280_ADDRESS)) {
70+
MESH_DEBUG_PRINTLN("Found BMP280 at address: %02X", TELEM_BMP280_ADDRESS);
71+
MESH_DEBUG_PRINTLN("BMP sensor ID: %02X", BMP280.sensorID());
72+
BMP280_initialized = true;
73+
} else {
74+
BMP280_initialized = false;
75+
MESH_DEBUG_PRINTLN("BMP280 was not found at I2C address %02X", TELEM_BMP280_ADDRESS);
76+
}
77+
#endif
78+
5879
#if ENV_INCLUDE_INA3221
5980
if (INA3221.begin(TELEM_INA3221_ADDRESS, &Wire)) {
6081
MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", TELEM_INA3221_ADDRESS);
@@ -97,7 +118,7 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
97118
sensors_event_t humidity, temp;
98119
AHTX0.getEvent(&humidity, &temp);
99120
telemetry.addTemperature(TELEM_CHANNEL_SELF, temp.temperature);
100-
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, humidity.relative_humidity);
121+
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, humidity.relative_humidity);
101122
}
102123
#endif
103124

@@ -110,6 +131,14 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
110131
}
111132
#endif
112133

134+
#if ENV_INCLUDE_BMP280
135+
if (BMP280_initialized) {
136+
telemetry.addTemperature(TELEM_CHANNEL_SELF, BMP280.readTemperature());
137+
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BMP280.readPressure());
138+
telemetry.addAltitude(TELEM_CHANNEL_SELF, BME280.readAltitude(TELEM_BME280_SEALEVELPRESSURE_HPA));
139+
}
140+
#endif
141+
113142
#if ENV_INCLUDE_INA3221
114143
if (INA3221_initialized) {
115144
for(int i = 0; i < TELEM_INA3221_NUM_CHANNELS; i++) {
@@ -152,7 +181,7 @@ int EnvironmentSensorManager::getNumSettings() const {
152181
const char* EnvironmentSensorManager::getSettingName(int i) const {
153182
#if ENV_INCLUDE_GPS
154183
return (gps_detected && i == 0) ? "gps" : NULL;
155-
#else
184+
#else
156185
return NULL;
157186
#endif
158187
}
@@ -184,7 +213,7 @@ bool EnvironmentSensorManager::setSettingValue(const char* name, const char* val
184213
void EnvironmentSensorManager::initBasicGPS() {
185214

186215
Serial1.setPins(PIN_GPS_TX, PIN_GPS_RX);
187-
216+
188217
#ifdef GPS_BAUD_RATE
189218
Serial1.begin(GPS_BAUD_RATE);
190219
#else
@@ -200,7 +229,7 @@ void EnvironmentSensorManager::initBasicGPS() {
200229
#ifndef PIN_GPS_EN
201230
MESH_DEBUG_PRINTLN("No GPS wake/reset pin found for this board. Continuing on...");
202231
#endif
203-
232+
204233
// Give GPS a moment to power up and send data
205234
delay(1000);
206235

@@ -226,7 +255,7 @@ void EnvironmentSensorManager::start_gps() {
226255
gps_active = true;
227256
#ifdef PIN_GPS_EN
228257
pinMode(PIN_GPS_EN, OUTPUT);
229-
digitalWrite(PIN_GPS_EN, HIGH);
258+
digitalWrite(PIN_GPS_EN, HIGH);
230259
return;
231260
#endif
232261

@@ -241,7 +270,7 @@ void EnvironmentSensorManager::stop_gps() {
241270
return;
242271
#endif
243272

244-
MESH_DEBUG_PRINTLN("Stop GPS is N/A on this board. Actual GPS state unchanged");
273+
MESH_DEBUG_PRINTLN("Stop GPS is N/A on this board. Actual GPS state unchanged");
245274
}
246275

247276
void EnvironmentSensorManager::loop() {

src/helpers/sensors/EnvironmentSensorManager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ class EnvironmentSensorManager : public SensorManager {
1010

1111
bool AHTX0_initialized = false;
1212
bool BME280_initialized = false;
13+
bool BMP280_initialized = false;
1314
bool INA3221_initialized = false;
1415
bool INA219_initialized = false;
15-
16+
1617
bool gps_detected = false;
1718
bool gps_active = false;
1819

@@ -31,7 +32,7 @@ class EnvironmentSensorManager : public SensorManager {
3132
EnvironmentSensorManager(){};
3233
#endif
3334
bool begin() override;
34-
bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override;
35+
bool querySensors(uint8_t requester_permissions, CayenneLPP& telemetry) override;
3536
#if ENV_INCLUDE_GPS
3637
void loop() override;
3738
#endif

variants/heltec_v3/platformio.ini

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,24 @@ build_flags =
1919
-D SX126X_RX_BOOSTED_GAIN=1
2020
-D ENV_INCLUDE_AHTX0=1
2121
-D ENV_INCLUDE_BME280=1
22+
-D ENV_INCLUDE_BMP280=1
2223
-D ENV_INCLUDE_INA3221=1
23-
-D ENV_INCLUDE_INA219=1
24+
-D ENV_INCLUDE_INA219=1
2425
-D ENV_INCLUDE_GPS=1
2526
-D PIN_GPS_RX=45
2627
-D PIN_GPS_TX=46
2728
-D PIN_GPS_EN=-1
2829
build_src_filter = ${esp32_base.build_src_filter}
2930
+<../variants/heltec_v3>
30-
+<helpers/sensors>
31+
+<helpers/sensors>
3132
lib_deps =
3233
${esp32_base.lib_deps}
3334
adafruit/Adafruit SSD1306 @ ^2.5.13
3435
adafruit/Adafruit INA3221 Library @ ^1.0.1
3536
adafruit/Adafruit INA219 @ ^1.2.3
3637
adafruit/Adafruit AHTX0 @ ^2.0.5
3738
adafruit/Adafruit BME280 Library @ ^2.3.0
39+
adafruit/Adafruit BMP280 Library@^2.6.8
3840
stevemarple/MicroNMEA @ ^2.0.6
3941

4042
[env:Heltec_v3_repeater]

variants/lilygo_tlora_v2_1/platformio.ini

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ build_flags =
1717
-D P_LORA_MISO=19 ; SPI MISO
1818
-D P_LORA_MOSI=27 ; SPI MOSI
1919
-D P_LORA_TX_LED=2 ; LED pin for TX indication
20+
-D PIN_BOARD_SDA=21
21+
-D PIN_BOARD_SCL=22
2022
-D PIN_VBAT_READ=35 ; Battery voltage reading (analog pin)
2123
-D PIN_USER_BTN=0
2224
-D ARDUINO_LOOP_STACK_SIZE=16384
@@ -25,11 +27,21 @@ build_flags =
2527
-D WRAPPER_CLASS=CustomSX1276Wrapper
2628
-D SX127X_CURRENT_LIMIT=120
2729
-D LORA_TX_POWER=20
30+
-D ENV_INCLUDE_AHTX0=1
31+
-D ENV_INCLUDE_BME280=1
32+
-D ENV_INCLUDE_BMP280=1
33+
-D ENV_INCLUDE_INA3221=1
34+
-D ENV_INCLUDE_INA219=1
2835
build_src_filter = ${esp32_base.build_src_filter}
2936
+<../variants/lilygo_tlora_v2_1>
37+
+<helpers/sensors>
3038
lib_deps =
3139
${esp32_base.lib_deps}
3240
adafruit/Adafruit SSD1306 @ ^2.5.13
41+
adafruit/Adafruit INA3221 Library @ ^1.0.1
42+
adafruit/Adafruit INA219 @ ^1.2.3
43+
adafruit/Adafruit AHTX0 @ ^2.0.5
44+
adafruit/Adafruit BME280 Library @ ^2.3.0
3345

3446
; === LILYGO T-LoRa V2.1-1.6 with SX1276 environments ===
3547
[env:LilyGo_TLora_V2_1_1_6_Repeater]

variants/promicro/platformio.ini

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[Faketec]
2-
extends = nrf52840_base
2+
extends = nrf52_base
33
board = promicro_nrf52840
4-
build_flags = ${nrf52840_base.build_flags}
4+
build_flags = ${nrf52_base.build_flags}
55
-I variants/promicro
66
-D FAKETEC
77
-D RADIO_CLASS=CustomSX1262
@@ -19,20 +19,22 @@ build_flags = ${nrf52840_base.build_flags}
1919
-D ENV_INCLUDE_GPS=1
2020
-D ENV_INCLUDE_AHTX0=1
2121
-D ENV_INCLUDE_BME280=1
22+
-D ENV_INCLUDE_BMP280=1
2223
-D ENV_INCLUDE_INA3221=1
2324
-D ENV_INCLUDE_INA219=1
24-
build_src_filter = ${nrf52840_base.build_src_filter}
25+
build_src_filter = ${nrf52_base.build_src_filter}
2526
+<helpers/nrf52/PromicroBoard.cpp>
26-
+<helpers/sensors>
27+
+<helpers/sensors>
2728
+<../variants/promicro>
28-
lib_deps= ${nrf52840_base.lib_deps}
29+
lib_deps= ${nrf52_base.lib_deps}
2930
adafruit/Adafruit SSD1306 @ ^2.5.13
3031
adafruit/Adafruit INA3221 Library @ ^1.0.1
3132
adafruit/Adafruit INA219 @ ^1.2.3
3233
adafruit/Adafruit AHTX0 @ ^2.0.5
33-
adafruit/Adafruit BME280 Library @ ^2.3.0
34+
adafruit/Adafruit BME280 Library @ ^2.3.0
35+
adafruit/Adafruit BMP280 Library@^2.6.8
3436
stevemarple/MicroNMEA @ ^2.0.6
35-
37+
3638
[env:Faketec_Repeater]
3739
extends = Faketec
3840
build_src_filter = ${Faketec.build_src_filter}
@@ -116,9 +118,9 @@ lib_deps = ${Faketec.lib_deps}
116118
densaugeo/base64 @ ~1.4.0
117119

118120
[ProMicroLLCC68]
119-
extends = nrf52840_base
121+
extends = nrf52_base
120122
board = promicro_nrf52840
121-
build_flags = ${nrf52840_base.build_flags}
123+
build_flags = ${nrf52_base.build_flags}
122124
-I variants/promicro
123125
-D PROMICROLLCC68
124126
-D RADIO_CLASS=CustomLLCC68
@@ -127,15 +129,15 @@ build_flags = ${nrf52840_base.build_flags}
127129
-D SX126X_CURRENT_LIMIT=140
128130
-D SX126X_RX_BOOSTED_GAIN=1
129131
build_src_filter =
130-
${nrf52840_base.build_src_filter}
132+
${nrf52_base.build_src_filter}
131133
+<helpers/nrf52/PromicroBoard.cpp>
132-
+<helpers/sensors>
134+
+<helpers/sensors>
133135
+<../variants/promicro>
134-
lib_deps= ${nrf52840_base.lib_deps}
136+
lib_deps= ${nrf52_base.lib_deps}
135137
adafruit/Adafruit INA3221 Library @ ^1.0.1
136138
adafruit/Adafruit INA219 @ ^1.2.3
137139
adafruit/Adafruit AHTX0 @ ^2.0.5
138-
adafruit/Adafruit BME280 Library @ ^2.3.0
140+
adafruit/Adafruit BME280 Library @ ^2.3.0
139141

140142
[env:ProMicroLLCC68_Repeater]
141143
extends = ProMicroLLCC68

0 commit comments

Comments
 (0)