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