From 856f2f9589789b75489c70283d761393e1a425fe Mon Sep 17 00:00:00 2001 From: Ric Letson <78682404+RicInNewMexico@users.noreply.github.com> Date: Tue, 8 Feb 2022 10:03:34 -0700 Subject: [PATCH] MCP9808 sensor implementation (#1188) * MCP9808 Sensor Implementation Initial Test --- platformio.ini | 1 + .../EnvironmentalMeasurementPlugin.cpp | 9 ++++++ .../Sensor/MCP9808Sensor.cpp | 28 +++++++++++++++++++ .../Sensor/MCP9808Sensor.h | 15 ++++++++++ 4 files changed, 53 insertions(+) create mode 100644 src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.cpp create mode 100644 src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.h diff --git a/platformio.ini b/platformio.ini index 0b7006eb9..946a4d063 100644 --- a/platformio.ini +++ b/platformio.ini @@ -116,6 +116,7 @@ lib_deps = robtillaart/DS18B20@^0.1.11 adafruit/Adafruit BME280 Library@^2.2.2 adafruit/Adafruit BME680 Library@^2.0.1 + adafruit/Adafruit MCP9808 Library@^2.0.0 ; Common settings for ESP targes, mixin with extends = esp32_base [esp32_base] diff --git a/src/plugins/EnvironmentalMeasurement/EnvironmentalMeasurementPlugin.cpp b/src/plugins/EnvironmentalMeasurement/EnvironmentalMeasurementPlugin.cpp index 2c9ae442e..51b1501e6 100644 --- a/src/plugins/EnvironmentalMeasurement/EnvironmentalMeasurementPlugin.cpp +++ b/src/plugins/EnvironmentalMeasurement/EnvironmentalMeasurementPlugin.cpp @@ -14,11 +14,13 @@ #include "Sensor/BME680Sensor.h" #include "Sensor/DHTSensor.h" #include "Sensor/DallasSensor.h" +#include "Sensor/MCP9808Sensor.h" BME280Sensor bme280Sensor; BME680Sensor bme680Sensor; DHTSensor dhtSensor; DallasSensor dallasSensor; +MCP9808Sensor mcp9808Sensor; #define FAILED_STATE_SENSOR_READ_MULTIPLIER 10 #define DISPLAY_RECEIVEID_MEASUREMENTS_ON_SCREEN true @@ -88,6 +90,8 @@ int32_t EnvironmentalMeasurementPlugin::runOnce() return bme280Sensor.runOnce(); case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_BME680: return bme680Sensor.runOnce(); + case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MCP9808: + return mcp9808Sensor.runOnce(); default: DEBUG_MSG("EnvironmentalMeasurement: Invalid sensor type selected; Disabling plugin"); return (INT32_MAX); @@ -137,6 +141,8 @@ int32_t EnvironmentalMeasurementPlugin::runOnce() case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_BME280: case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_BME680: return (BME_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); + case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MCP9808: + return (MCP_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); default: return (DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); } @@ -267,6 +273,9 @@ bool EnvironmentalMeasurementPlugin::sendOurEnvironmentalMeasurement(NodeNum des case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_BME680: bme680Sensor.getMeasurement(&m); break; + case RadioConfig_UserPreferences_EnvironmentalMeasurementSensorType_MCP9808: + mcp9808Sensor.getMeasurement(&m); + break; default: DEBUG_MSG("EnvironmentalMeasurement: Invalid sensor type selected; Disabling plugin"); return false; diff --git a/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.cpp b/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.cpp new file mode 100644 index 000000000..3634677e5 --- /dev/null +++ b/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.cpp @@ -0,0 +1,28 @@ +#include "../mesh/generated/environmental_measurement.pb.h" +#include "configuration.h" +#include "EnvironmentalMeasurementSensor.h" +#include "MCP9808Sensor.h" +#include + +MCP9808Sensor::MCP9808Sensor() : EnvironmentalMeasurementSensor {} { +} + +int32_t MCP9808Sensor::runOnce() { + unsigned mcp9808Status; + // Default i2c address for MCP9808 + mcp9808Status = mcp9808.begin(0x18); + if (!mcp9808Status) { + DEBUG_MSG("Could not find a valid MCP9808 sensor, check wiring, address, sensor ID!"); + } else { + DEBUG_MSG("EnvironmentalMeasurement: Opened MCP9808 on default i2c bus"); + // Reduce resolution from 0.0625 degrees (precision) to 0.125 degrees (high). + mcp9808.setResolution(2); + } + return (MCP_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS); +} + +bool MCP9808Sensor::getMeasurement(EnvironmentalMeasurement *measurement) { + measurement->temperature = mcp9808.readTempC(); + + return true; +} \ No newline at end of file diff --git a/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.h b/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.h new file mode 100644 index 000000000..eb868e652 --- /dev/null +++ b/src/plugins/EnvironmentalMeasurement/Sensor/MCP9808Sensor.h @@ -0,0 +1,15 @@ +#include "../mesh/generated/environmental_measurement.pb.h" +#include "EnvironmentalMeasurementSensor.h" +#include + +#define MCP_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS 1000 + +class MCP9808Sensor : virtual public EnvironmentalMeasurementSensor { +private: + Adafruit_MCP9808 mcp9808; + +public: + MCP9808Sensor(); + virtual int32_t runOnce() override; + virtual bool getMeasurement(EnvironmentalMeasurement *measurement) override; +}; \ No newline at end of file