diff --git a/platformio.ini b/platformio.ini index ba601c26c..099eba618 100644 --- a/platformio.ini +++ b/platformio.ini @@ -124,6 +124,7 @@ build_flags = -D ENV_INCLUDE_BME280=1 -D ENV_INCLUDE_BMP280=1 -D ENV_INCLUDE_SHTC3=1 + -D ENV_INCLUDE_SHT3X=1 -D ENV_INCLUDE_SHT4X=1 -D ENV_INCLUDE_LPS22HB=1 -D ENV_INCLUDE_INA3221=1 @@ -143,6 +144,7 @@ lib_deps = adafruit/Adafruit BME280 Library @ ^2.3.0 adafruit/Adafruit BMP280 Library @ ^2.6.8 adafruit/Adafruit SHTC3 Library @ ^1.0.1 + sensirion/Sensirion I2C SHT3x @ ^1.0.1 sensirion/Sensirion I2C SHT4x @ ^1.1.2 arduino-libraries/Arduino_LPS22HB @ ^1.0.2 adafruit/Adafruit MLX90614 Library @ ^2.1.5 diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 07807011d..088317cdd 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -50,6 +50,12 @@ static Adafruit_BMP280 BMP280(TELEM_WIRE); static Adafruit_SHTC3 SHTC3; #endif +#if ENV_INCLUDE_SHT3X +#define TELEM_SHT3X_ADDRESS 0x44 //Addresses with 0x44 (default) and 0x45 are possible +#include +static SensirionI2cSht3x SHT3X; +#endif + #if ENV_INCLUDE_SHT4X #define TELEM_SHT4X_ADDRESS 0x44 //0x44 - 0x46 #include @@ -228,6 +234,19 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_SHT3X + SHT3X.begin(*TELEM_WIRE, TELEM_SHT3X_ADDRESS); + uint16_t SHT3XStatusRegister = 0u; + int16_t sht3x_error; + sht3x_error = SHT3X.readStatusRegister(SHT3XStatusRegister); + if (sht3x_error == 0) { + MESH_DEBUG_PRINTLN("Found SHT3X at address: %02X", TELEM_SHT3X_ADDRESS); + SHT3X_initialized = true; + } else { + SHT3X_initialized = false; + MESH_DEBUG_PRINTLN("SHT3X was not found at I2C address %02X", TELEM_SHT3X_ADDRESS); + } + #endif #if ENV_INCLUDE_SHT4X SHT4X.begin(*TELEM_WIRE, TELEM_SHT4X_ADDRESS); @@ -394,6 +413,18 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_SHT3X + if (SHT3X_initialized) { + float sht3x_humidity, sht3x_temperature; + int16_t sht3x_error; + sht3x_error = SHT3X.measureSingleShot(REPEATABILITY_MEDIUM, false, sht3x_temperature, sht3x_humidity); + if (sht3x_error == 0) { + telemetry.addTemperature(TELEM_CHANNEL_SELF, sht3x_temperature); + telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, sht3x_humidity); + } + } + #endif + #if ENV_INCLUDE_SHT4X if (SHT4X_initialized) { float sht4x_humidity, sht4x_temperature; diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index f176a33f5..63fac5e23 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -19,6 +19,7 @@ class EnvironmentSensorManager : public SensorManager { bool LPS22HB_initialized = false; bool MLX90614_initialized = false; bool VL53L0X_initialized = false; + bool SHT3X_initialized = false; bool SHT4X_initialized = false; bool BME680_initialized = false; bool BMP085_initialized = false;