diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 2befdf04..0f3289b8 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -35,6 +35,12 @@ static Adafruit_BMP280 BMP280; static Adafruit_SHTC3 SHTC3; #endif +#if ENV_INCLUDE_SHT4X +#define TELEM_SHT4X_ADDRESS 0x44 //0x44 - 0x46 +#include +static SensirionI2cSht4x SHT4X; +#endif + #if ENV_INCLUDE_LPS22HB #include #endif @@ -136,6 +142,21 @@ bool EnvironmentSensorManager::begin() { } #endif + + #if ENV_INCLUDE_SHT4X + SHT4X.begin(*TELEM_WIRE, TELEM_SHT4X_ADDRESS); + uint32_t serialNumber = 0; + int16_t sht4x_error; + sht4x_error = SHT4X.serialNumber(serialNumber); + if (sht4x_error == 0) { + MESH_DEBUG_PRINTLN("Found SHT4X at address: %02X", TELEM_SHT4X_ADDRESS); + SHT4X_initialized = true; + } else { + SHT4X_initialized = false; + MESH_DEBUG_PRINTLN("SHT4X was not found at I2C address %02X", TELEM_SHT4X_ADDRESS); + } + #endif + #if ENV_INCLUDE_LPS22HB if (BARO.begin()) { MESH_DEBUG_PRINTLN("Found sensor: LPS22HB"); @@ -249,6 +270,18 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_SHT4X + if (SHT4X_initialized) { + float sht4x_humidity, sht4x_temperature; + int16_t sht4x_error; + sht4x_error = SHT4X.measureLowestPrecision(sht4x_temperature, sht4x_humidity); + if (sht4x_error == 0) { + telemetry.addTemperature(TELEM_CHANNEL_SELF, sht4x_temperature); + telemetry.addRelativeHumidity(TELEM_CHANNEL_SELF, sht4x_humidity); + } + } + #endif + #if ENV_INCLUDE_LPS22HB if (LPS22HB_initialized) { telemetry.addTemperature(TELEM_CHANNEL_SELF, BARO.readTemperature()); diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index cb26ab93..bb0fd2b9 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -18,6 +18,7 @@ protected: bool LPS22HB_initialized = false; bool MLX90614_initialized = false; bool VL53L0X_initialized = false; + bool SHT4X_initialized = false; bool gps_detected = false; bool gps_active = false; diff --git a/variants/rak4631/platformio.ini b/variants/rak4631/platformio.ini index 754837d3..ba4a8e2f 100644 --- a/variants/rak4631/platformio.ini +++ b/variants/rak4631/platformio.ini @@ -27,6 +27,7 @@ build_flags = ${nrf52_base.build_flags} -D ENV_INCLUDE_INA3221=1 -D ENV_INCLUDE_INA219=1 -D ENV_INCLUDE_INA260=1 + -D ENV_INCLUDE_SHT4X=1 build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak4631> + @@ -42,7 +43,8 @@ lib_deps = adafruit/Adafruit BMP280 Library @ ^2.6.8 adafruit/Adafruit SHTC3 Library @ ^1.0.1 adafruit/Adafruit INA260 Library @ ^1.5.3 - sparkfun/SparkFun u-blox GNSS Arduino Library@^2.2.27 + sparkfun/SparkFun u-blox GNSS Arduino Library @ ^2.2.27 + sensirion/Sensirion I2C SHT4x @ ^1.1.2 [env:RAK_4631_Repeater] extends = rak4631