EnvironmentSensorManager: add support for SHTC3 and LPS22HB
This commit is contained in:
@@ -24,6 +24,14 @@ static Adafruit_BME280 BME280;
|
|||||||
static Adafruit_BMP280 BMP280;
|
static Adafruit_BMP280 BMP280;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_SHTC3
|
||||||
|
#include <Adafruit_SHTC3.h>
|
||||||
|
static Adafruit_SHTC3 SHTC3;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_LPS22HB
|
||||||
|
#include <Arduino_LPS22HB.h>
|
||||||
|
#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
|
||||||
@@ -76,28 +84,48 @@ bool EnvironmentSensorManager::begin() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_SHTC3
|
||||||
|
if (SHTC3.begin()) {
|
||||||
|
MESH_DEBUG_PRINTLN("Found sensor: SHTC3");
|
||||||
|
SHTC3_initialized = true;
|
||||||
|
} else {
|
||||||
|
SHTC3_initialized = false;
|
||||||
|
MESH_DEBUG_PRINTLN("SHTC3 was not found at I2C address %02X", 0x70);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_LPS22HB
|
||||||
|
if (BARO.begin()) {
|
||||||
|
MESH_DEBUG_PRINTLN("Found sensor: LPS22HB");
|
||||||
|
LPS22HB_initialized = true;
|
||||||
|
} else {
|
||||||
|
LPS22HB_initialized = false;
|
||||||
|
MESH_DEBUG_PRINTLN("LPS22HB was not found at I2C address %02X", 0x5C);
|
||||||
|
}
|
||||||
|
#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);
|
||||||
MESH_DEBUG_PRINTLN("%04X %04X", INA3221.getDieID(), INA3221.getManufacturerID());
|
MESH_DEBUG_PRINTLN("%04X %04X", INA3221.getDieID(), INA3221.getManufacturerID());
|
||||||
|
|
||||||
for(int i = 0; i < 3; i++) {
|
for(int i = 0; i < 3; i++) {
|
||||||
INA3221.setShuntResistance(i, TELEM_INA3221_SHUNT_VALUE);
|
INA3221.setShuntResistance(i, TELEM_INA3221_SHUNT_VALUE);
|
||||||
}
|
}
|
||||||
INA3221_initialized = true;
|
INA3221_initialized = true;
|
||||||
} else {
|
} else {
|
||||||
INA3221_initialized = false;
|
INA3221_initialized = false;
|
||||||
MESH_DEBUG_PRINTLN("INA3221 was not found at I2C address %02X", TELEM_INA3221_ADDRESS);
|
MESH_DEBUG_PRINTLN("INA3221 was not found at I2C address %02X", TELEM_INA3221_ADDRESS);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENV_INCLUDE_INA219
|
#if ENV_INCLUDE_INA219
|
||||||
if (INA219.begin(&Wire)) {
|
if (INA219.begin(&Wire)) {
|
||||||
MESH_DEBUG_PRINTLN("Found INA219 at address: %02X", TELEM_INA219_ADDRESS);
|
MESH_DEBUG_PRINTLN("Found INA219 at address: %02X", TELEM_INA219_ADDRESS);
|
||||||
INA219_initialized = true;
|
INA219_initialized = true;
|
||||||
} else {
|
} else {
|
||||||
INA219_initialized = false;
|
INA219_initialized = false;
|
||||||
MESH_DEBUG_PRINTLN("INA219 was not found at I2C address %02X", TELEM_INA219_ADDRESS);
|
MESH_DEBUG_PRINTLN("INA219 was not found at I2C address %02X", TELEM_INA219_ADDRESS);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -139,6 +167,24 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_SHTC3
|
||||||
|
if (SHTC3_initialized) {
|
||||||
|
sensors_event_t humidity, temp;
|
||||||
|
SHTC3.getEvent(&humidity, &temp);
|
||||||
|
|
||||||
|
telemetry.addTemperature(TELEM_CHANNEL_SELF, temp.temperature);
|
||||||
|
telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, humidity.relative_humidity);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENV_INCLUDE_LPS22HB
|
||||||
|
if (LPS22HB_initialized) {
|
||||||
|
telemetry.addTemperature(TELEM_CHANNEL_SELF, BARO.readTemperature());
|
||||||
|
telemetry.addBarometricPressure(TELEM_CHANNEL_SELF, BARO.readPressure());
|
||||||
|
telemetry.addAltitude(TELEM_CHANNEL_SELF, BARO.readAltitude());
|
||||||
|
}
|
||||||
|
#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++) {
|
||||||
@@ -157,10 +203,10 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen
|
|||||||
|
|
||||||
#if ENV_INCLUDE_INA219
|
#if ENV_INCLUDE_INA219
|
||||||
if (INA219_initialized) {
|
if (INA219_initialized) {
|
||||||
telemetry.addVoltage(next_available_channel, INA219.getBusVoltage_V());
|
telemetry.addVoltage(next_available_channel, INA219.getBusVoltage_V());
|
||||||
telemetry.addCurrent(next_available_channel, INA219.getCurrent_mA() / 1000);
|
telemetry.addCurrent(next_available_channel, INA219.getCurrent_mA() / 1000);
|
||||||
telemetry.addPower(next_available_channel, INA219.getPower_mW() / 1000);
|
telemetry.addPower(next_available_channel, INA219.getPower_mW() / 1000);
|
||||||
next_available_channel++;
|
next_available_channel++;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ protected:
|
|||||||
bool BMP280_initialized = false;
|
bool BMP280_initialized = false;
|
||||||
bool INA3221_initialized = false;
|
bool INA3221_initialized = false;
|
||||||
bool INA219_initialized = false;
|
bool INA219_initialized = false;
|
||||||
|
bool SHTC3_initialized = false;
|
||||||
|
bool LPS22HB_initialized = false;
|
||||||
|
|
||||||
bool gps_detected = false;
|
bool gps_detected = false;
|
||||||
bool gps_active = false;
|
bool gps_active = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user