diff --git a/platformio.ini b/platformio.ini index a753cb854..01591153f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -90,4 +90,5 @@ lib_deps = adafruit/Adafruit MCP9808 Library@^2.0.0 adafruit/Adafruit INA260 Library@^1.5.0 adafruit/Adafruit INA219@^1.2.0 - adafruit/Adafruit SHTC3 Library@^1.0.0 \ No newline at end of file + adafruit/Adafruit SHTC3 Library@^1.0.0 + adafruit/Adafruit LPS2X@^2.0.4 \ No newline at end of file diff --git a/src/configuration.h b/src/configuration.h index feb0da1cd..9374c29d4 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -111,6 +111,8 @@ along with this program. If not, see . #define QMC6310_ADDR 0x1C #define QMI8658_ADDR 0x6B #define SHTC3_ADDR 0x70 +#define LPS22HB_ADDR 0x5C +#define LPS22HB_ADDR_ALT 0x5D // ----------------------------------------------------------------------------- // Security diff --git a/src/detect/i2cScan.h b/src/detect/i2cScan.h index f1c0fbdd5..6fc9d67d3 100644 --- a/src/detect/i2cScan.h +++ b/src/detect/i2cScan.h @@ -203,6 +203,10 @@ void scanI2Cdevice(void) DEBUG_MSG("SHTC3 sensor found at address 0x%x\n", (uint8_t)addr); nodeTelemetrySensorsMap[TelemetrySensorType_SHTC3] = addr; } + if (addr == LPS22HB_ADDR || addr == LPS22HB_ADDR_ALT) { + DEBUG_MSG("LPS22HB sensor found at address 0x%x\n", (uint8_t)addr); + nodeTelemetrySensorsMap[TelemetrySensorType_LPS22] = addr; + } } else if (err == 4) { DEBUG_MSG("Unknow error at address 0x%x\n", addr); } diff --git a/src/modules/Telemetry/EnvironmentTelemetry.cpp b/src/modules/Telemetry/EnvironmentTelemetry.cpp index ce1301dfe..c0e650d98 100644 --- a/src/modules/Telemetry/EnvironmentTelemetry.cpp +++ b/src/modules/Telemetry/EnvironmentTelemetry.cpp @@ -18,6 +18,7 @@ #include "Sensor/INA260Sensor.h" #include "Sensor/INA219Sensor.h" #include "Sensor/SHTC3Sensor.h" +#include "Sensor/LPS22HBSensor.h" BMP280Sensor bmp280Sensor; BME280Sensor bme280Sensor; @@ -26,6 +27,7 @@ MCP9808Sensor mcp9808Sensor; INA260Sensor ina260Sensor; INA219Sensor ina219Sensor; SHTC3Sensor shtc3Sensor; +LPS22HBSensor lps22hbSensor; #define FAILED_STATE_SENSOR_READ_MULTIPLIER 10 #define DISPLAY_RECEIVEID_MEASUREMENTS_ON_SCREEN true @@ -87,6 +89,9 @@ int32_t EnvironmentTelemetryModule::runOnce() result = ina219Sensor.runOnce(); if (shtc3Sensor.hasSensor()) result = shtc3Sensor.runOnce(); + if (lps22hbSensor.hasSensor()) { + result = lps22hbSensor.runOnce(); + } } return result; } else { @@ -204,6 +209,10 @@ bool EnvironmentTelemetryModule::sendOurTelemetry(NodeNum dest, bool wantReplies DEBUG_MSG("-----------------------------------------\n"); DEBUG_MSG("Environment Telemetry: Read data\n"); + if (lps22hbSensor.hasSensor()) + lps22hbSensor.getMetrics(&m); + if (shtc3Sensor.hasSensor()) + shtc3Sensor.getMetrics(&m); if (bmp280Sensor.hasSensor()) bmp280Sensor.getMetrics(&m); if (bme280Sensor.hasSensor()) @@ -216,8 +225,6 @@ bool EnvironmentTelemetryModule::sendOurTelemetry(NodeNum dest, bool wantReplies ina219Sensor.getMetrics(&m); if (ina260Sensor.hasSensor()) ina260Sensor.getMetrics(&m); - if (shtc3Sensor.hasSensor()) - shtc3Sensor.getMetrics(&m); DEBUG_MSG("Telemetry->time: %i\n", m.time); DEBUG_MSG("Telemetry->barometric_pressure: %f\n", m.variant.environment_metrics.barometric_pressure); diff --git a/src/modules/Telemetry/Sensor/LPS22HBSensor.cpp b/src/modules/Telemetry/Sensor/LPS22HBSensor.cpp new file mode 100644 index 000000000..1209c1435 --- /dev/null +++ b/src/modules/Telemetry/Sensor/LPS22HBSensor.cpp @@ -0,0 +1,36 @@ +#include "../mesh/generated/telemetry.pb.h" +#include "configuration.h" +#include "TelemetrySensor.h" +#include "LPS22HBSensor.h" +#include +#include + +LPS22HBSensor::LPS22HBSensor() : + TelemetrySensor(TelemetrySensorType_LPS22, "LPS22HB") +{ +} + +int32_t LPS22HBSensor::runOnce() { + DEBUG_MSG("Init sensor: %s\n", sensorName); + if (!hasSensor()) { + return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS; + } + status = lps22hb.begin_I2C(nodeTelemetrySensorsMap[sensorType]); + return initI2CSensor(); +} + +void LPS22HBSensor::setup() +{ + lps22hb.setDataRate(LPS22_RATE_10_HZ); +} + +bool LPS22HBSensor::getMetrics(Telemetry *measurement) { + sensors_event_t temp; + sensors_event_t pressure; + lps22hb.getEvent(&pressure, &temp); + + measurement->variant.environment_metrics.temperature = temp.temperature; + measurement->variant.environment_metrics.barometric_pressure = pressure.pressure; + + return true; +} \ No newline at end of file diff --git a/src/modules/Telemetry/Sensor/LPS22HBSensor.h b/src/modules/Telemetry/Sensor/LPS22HBSensor.h new file mode 100644 index 000000000..1ded032fb --- /dev/null +++ b/src/modules/Telemetry/Sensor/LPS22HBSensor.h @@ -0,0 +1,17 @@ +#include "../mesh/generated/telemetry.pb.h" +#include "TelemetrySensor.h" +#include +#include + +class LPS22HBSensor : virtual public TelemetrySensor { +private: + Adafruit_LPS22 lps22hb; + +protected: + virtual void setup() override; + +public: + LPS22HBSensor(); + virtual int32_t runOnce() override; + virtual bool getMetrics(Telemetry *measurement) override; +}; \ No newline at end of file