Browse Source

add support for BMP280 temperature+pressure sensor

pull/456/head
recrof 1 year ago
parent
commit
9530744ff4
  1. 29
      src/helpers/sensors/EnvironmentSensorManager.cpp
  2. 1
      src/helpers/sensors/EnvironmentSensorManager.h
  3. 2
      variants/heltec_v3/platformio.ini
  4. 12
      variants/lilygo_tlora_v2_1/platformio.ini
  5. 18
      variants/promicro/platformio.ini

29
src/helpers/sensors/EnvironmentSensorManager.cpp

@ -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++) {

1
src/helpers/sensors/EnvironmentSensorManager.h

@ -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;

2
variants/heltec_v3/platformio.ini

@ -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]

12
variants/lilygo_tlora_v2_1/platformio.ini

@ -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]

18
variants/promicro/platformio.ini

@ -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

Loading…
Cancel
Save