From 6dec421b164b8093c18182f4413021c34a7f53f7 Mon Sep 17 00:00:00 2001 From: Petr Kracik Date: Tue, 7 Apr 2026 16:32:05 +0200 Subject: [PATCH] Added SHT3x temp sensor support --- platformio.ini | 2 ++ .../sensors/EnvironmentSensorManager.cpp | 31 +++++++++++++++++++ .../sensors/EnvironmentSensorManager.h | 1 + 3 files changed, 34 insertions(+) diff --git a/platformio.ini b/platformio.ini index 5f722e8923..5946b35fe3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -125,6 +125,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 @@ -144,6 +145,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 62980f25e7..ab04d0e7a9 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 //0x44 - 0x45 +#include +static SensirionI2cSht3x SHT3X; +#endif + #if ENV_INCLUDE_SHT4X #define TELEM_SHT4X_ADDRESS 0x44 //0x44 - 0x46 #include @@ -234,6 +240,19 @@ bool EnvironmentSensorManager::begin() { } #endif +#if ENV_INCLUDE_SHT3X + SHT3X.begin(*TELEM_WIRE, TELEM_SHT3X_ADDRESS); + uint16_t status = 0; + int16_t sht3x_error; + sht3x_error = SHT3X.readStatusRegister(status); + 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); @@ -411,6 +430,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 32413ebc03..a8deaf1f0d 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;