add support for BMP280 temperature+pressure sensor

This commit is contained in:
recrof
2025-06-29 00:17:46 +02:00
parent 5fa6533291
commit 9530744ff4
5 changed files with 69 additions and 23 deletions

View File

@@ -15,6 +15,16 @@ static Adafruit_AHTX0 AHTX0;
static Adafruit_BME280 BME280; static Adafruit_BME280 BME280;
#endif #endif
#if ENV_INCLUDE_BMP280
#ifndef TELEM_BMP280_ADDRESS
#define TELEM_BMP280_ADDRESS 0x76 // BMP280 environmental sensor I2C address
#endif
#define TELEM_BMP280_SEALEVELPRESSURE_HPA (1013.25) // Athmospheric pressure at sea level
#include <Adafruit_BMP280.h>
static Adafruit_BMP280 BMP280;
#endif
#if ENV_INCLUDE_INA3221 #if ENV_INCLUDE_INA3221
#define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address #define TELEM_INA3221_ADDRESS 0x42 // INA3221 3 channel current sensor I2C address
#define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts #define TELEM_INA3221_SHUNT_VALUE 0.100 // most variants will have a 0.1 ohm shunts
@@ -55,6 +65,17 @@ bool EnvironmentSensorManager::begin() {
} }
#endif #endif
#if ENV_INCLUDE_BMP280
if (BMP280.begin(TELEM_BMP280_ADDRESS)) {
MESH_DEBUG_PRINTLN("Found BMP280 at address: %02X", TELEM_BMP280_ADDRESS);
MESH_DEBUG_PRINTLN("BMP sensor ID: %02X", BMP280.sensorID());
BMP280_initialized = true;
} else {
BMP280_initialized = false;
MESH_DEBUG_PRINTLN("BMP280 was not found at I2C address %02X", TELEM_BMP280_ADDRESS);
}
#endif
#if ENV_INCLUDE_INA3221 #if ENV_INCLUDE_INA3221
if (INA3221.begin(TELEM_INA3221_ADDRESS, &Wire)) { if (INA3221.begin(TELEM_INA3221_ADDRESS, &Wire)) {
MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", TELEM_INA3221_ADDRESS); MESH_DEBUG_PRINTLN("Found INA3221 at address: %02X", TELEM_INA3221_ADDRESS);
@@ -110,6 +131,14 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
} }
#endif #endif
#if ENV_INCLUDE_BMP280
if (BMP280_initialized) {
telemetry.addTemperature(TELEM_CHANNEL_SELF, BMP280.readTemperature());
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BMP280.readPressure());
telemetry.addAltitude(TELEM_CHANNEL_SELF, BME280.readAltitude(TELEM_BME280_SEALEVELPRESSURE_HPA));
}
#endif
#if ENV_INCLUDE_INA3221 #if ENV_INCLUDE_INA3221
if (INA3221_initialized) { if (INA3221_initialized) {
for(int i = 0; i < TELEM_INA3221_NUM_CHANNELS; i++) { for(int i = 0; i < TELEM_INA3221_NUM_CHANNELS; i++) {

View File

@@ -10,6 +10,7 @@ protected:
bool AHTX0_initialized = false; bool AHTX0_initialized = false;
bool BME280_initialized = false; bool BME280_initialized = false;
bool BMP280_initialized = false;
bool INA3221_initialized = false; bool INA3221_initialized = false;
bool INA219_initialized = false; bool INA219_initialized = false;

View File

@@ -19,6 +19,7 @@ build_flags =
-D SX126X_RX_BOOSTED_GAIN=1 -D SX126X_RX_BOOSTED_GAIN=1
-D ENV_INCLUDE_AHTX0=1 -D ENV_INCLUDE_AHTX0=1
-D ENV_INCLUDE_BME280=1 -D ENV_INCLUDE_BME280=1
-D ENV_INCLUDE_BMP280=1
-D ENV_INCLUDE_INA3221=1 -D ENV_INCLUDE_INA3221=1
-D ENV_INCLUDE_INA219=1 -D ENV_INCLUDE_INA219=1
-D ENV_INCLUDE_GPS=1 -D ENV_INCLUDE_GPS=1
@@ -35,6 +36,7 @@ lib_deps =
adafruit/Adafruit INA219 @ ^1.2.3 adafruit/Adafruit INA219 @ ^1.2.3
adafruit/Adafruit AHTX0 @ ^2.0.5 adafruit/Adafruit AHTX0 @ ^2.0.5
adafruit/Adafruit BME280 Library @ ^2.3.0 adafruit/Adafruit BME280 Library @ ^2.3.0
adafruit/Adafruit BMP280 Library@^2.6.8
stevemarple/MicroNMEA @ ^2.0.6 stevemarple/MicroNMEA @ ^2.0.6
[env:Heltec_v3_repeater] [env:Heltec_v3_repeater]

View File

@@ -17,6 +17,8 @@ build_flags =
-D P_LORA_MISO=19 ; SPI MISO -D P_LORA_MISO=19 ; SPI MISO
-D P_LORA_MOSI=27 ; SPI MOSI -D P_LORA_MOSI=27 ; SPI MOSI
-D P_LORA_TX_LED=2 ; LED pin for TX indication -D P_LORA_TX_LED=2 ; LED pin for TX indication
-D PIN_BOARD_SDA=21
-D PIN_BOARD_SCL=22
-D PIN_VBAT_READ=35 ; Battery voltage reading (analog pin) -D PIN_VBAT_READ=35 ; Battery voltage reading (analog pin)
-D PIN_USER_BTN=0 -D PIN_USER_BTN=0
-D ARDUINO_LOOP_STACK_SIZE=16384 -D ARDUINO_LOOP_STACK_SIZE=16384
@@ -25,11 +27,21 @@ build_flags =
-D WRAPPER_CLASS=CustomSX1276Wrapper -D WRAPPER_CLASS=CustomSX1276Wrapper
-D SX127X_CURRENT_LIMIT=120 -D SX127X_CURRENT_LIMIT=120
-D LORA_TX_POWER=20 -D LORA_TX_POWER=20
-D ENV_INCLUDE_AHTX0=1
-D ENV_INCLUDE_BME280=1
-D ENV_INCLUDE_BMP280=1
-D ENV_INCLUDE_INA3221=1
-D ENV_INCLUDE_INA219=1
build_src_filter = ${esp32_base.build_src_filter} build_src_filter = ${esp32_base.build_src_filter}
+<../variants/lilygo_tlora_v2_1> +<../variants/lilygo_tlora_v2_1>
+<helpers/sensors>
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}
adafruit/Adafruit SSD1306 @ ^2.5.13 adafruit/Adafruit SSD1306 @ ^2.5.13
adafruit/Adafruit INA3221 Library @ ^1.0.1
adafruit/Adafruit INA219 @ ^1.2.3
adafruit/Adafruit AHTX0 @ ^2.0.5
adafruit/Adafruit BME280 Library @ ^2.3.0
; === LILYGO T-LoRa V2.1-1.6 with SX1276 environments === ; === LILYGO T-LoRa V2.1-1.6 with SX1276 environments ===
[env:LilyGo_TLora_V2_1_1_6_Repeater] [env:LilyGo_TLora_V2_1_1_6_Repeater]

View File

@@ -1,7 +1,7 @@
[Faketec] [Faketec]
extends = nrf52840_base extends = nrf52_base
board = promicro_nrf52840 board = promicro_nrf52840
build_flags = ${nrf52840_base.build_flags} build_flags = ${nrf52_base.build_flags}
-I variants/promicro -I variants/promicro
-D FAKETEC -D FAKETEC
-D RADIO_CLASS=CustomSX1262 -D RADIO_CLASS=CustomSX1262
@@ -19,18 +19,20 @@ build_flags = ${nrf52840_base.build_flags}
-D ENV_INCLUDE_GPS=1 -D ENV_INCLUDE_GPS=1
-D ENV_INCLUDE_AHTX0=1 -D ENV_INCLUDE_AHTX0=1
-D ENV_INCLUDE_BME280=1 -D ENV_INCLUDE_BME280=1
-D ENV_INCLUDE_BMP280=1
-D ENV_INCLUDE_INA3221=1 -D ENV_INCLUDE_INA3221=1
-D ENV_INCLUDE_INA219=1 -D ENV_INCLUDE_INA219=1
build_src_filter = ${nrf52840_base.build_src_filter} build_src_filter = ${nrf52_base.build_src_filter}
+<helpers/nrf52/PromicroBoard.cpp> +<helpers/nrf52/PromicroBoard.cpp>
+<helpers/sensors> +<helpers/sensors>
+<../variants/promicro> +<../variants/promicro>
lib_deps= ${nrf52840_base.lib_deps} lib_deps= ${nrf52_base.lib_deps}
adafruit/Adafruit SSD1306 @ ^2.5.13 adafruit/Adafruit SSD1306 @ ^2.5.13
adafruit/Adafruit INA3221 Library @ ^1.0.1 adafruit/Adafruit INA3221 Library @ ^1.0.1
adafruit/Adafruit INA219 @ ^1.2.3 adafruit/Adafruit INA219 @ ^1.2.3
adafruit/Adafruit AHTX0 @ ^2.0.5 adafruit/Adafruit AHTX0 @ ^2.0.5
adafruit/Adafruit BME280 Library @ ^2.3.0 adafruit/Adafruit BME280 Library @ ^2.3.0
adafruit/Adafruit BMP280 Library@^2.6.8
stevemarple/MicroNMEA @ ^2.0.6 stevemarple/MicroNMEA @ ^2.0.6
[env:Faketec_Repeater] [env:Faketec_Repeater]
@@ -116,9 +118,9 @@ lib_deps = ${Faketec.lib_deps}
densaugeo/base64 @ ~1.4.0 densaugeo/base64 @ ~1.4.0
[ProMicroLLCC68] [ProMicroLLCC68]
extends = nrf52840_base extends = nrf52_base
board = promicro_nrf52840 board = promicro_nrf52840
build_flags = ${nrf52840_base.build_flags} build_flags = ${nrf52_base.build_flags}
-I variants/promicro -I variants/promicro
-D PROMICROLLCC68 -D PROMICROLLCC68
-D RADIO_CLASS=CustomLLCC68 -D RADIO_CLASS=CustomLLCC68
@@ -127,11 +129,11 @@ build_flags = ${nrf52840_base.build_flags}
-D SX126X_CURRENT_LIMIT=140 -D SX126X_CURRENT_LIMIT=140
-D SX126X_RX_BOOSTED_GAIN=1 -D SX126X_RX_BOOSTED_GAIN=1
build_src_filter = build_src_filter =
${nrf52840_base.build_src_filter} ${nrf52_base.build_src_filter}
+<helpers/nrf52/PromicroBoard.cpp> +<helpers/nrf52/PromicroBoard.cpp>
+<helpers/sensors> +<helpers/sensors>
+<../variants/promicro> +<../variants/promicro>
lib_deps= ${nrf52840_base.lib_deps} lib_deps= ${nrf52_base.lib_deps}
adafruit/Adafruit INA3221 Library @ ^1.0.1 adafruit/Adafruit INA3221 Library @ ^1.0.1
adafruit/Adafruit INA219 @ ^1.2.3 adafruit/Adafruit INA219 @ ^1.2.3
adafruit/Adafruit AHTX0 @ ^2.0.5 adafruit/Adafruit AHTX0 @ ^2.0.5