From 9f2a77c92eaae99a8395df54dbcf6ac0864e2bc1 Mon Sep 17 00:00:00 2001 From: Mike Cochrane Date: Fri, 18 Jul 2025 18:51:00 +1200 Subject: [PATCH] Add Melexis Contact-less Infrared Sensor - MLX90614 to Heltec V3 Sensor --- .../sensors/EnvironmentSensorManager.cpp | 23 +++++++++++++++++++ .../sensors/EnvironmentSensorManager.h | 1 + variants/heltec_v3/platformio.ini | 2 ++ 3 files changed, 26 insertions(+) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index b9653248..7299b8fc 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -53,6 +53,12 @@ static Adafruit_INA3221 INA3221; static Adafruit_INA219 INA219(TELEM_INA219_ADDRESS); #endif +#if ENV_INCLUDE_MLX90614 +#define TELEM_MLX90614_ADDRESS 0x5A // MLX90614 IR temperature sensor I2C address +#include +static Adafruit_MLX90614 MLX90614; +#endif + #if ENV_INCLUDE_GPS && RAK_BOARD static uint32_t gpsResetPin = 0; static bool i2cGPSFlag = false; @@ -153,6 +159,16 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_MLX90614 + if (MLX90614.begin(TELEM_MLX90614_ADDRESS, TELEM_WIRE)) { + MESH_DEBUG_PRINTLN("Found MLX90614 at address: %02X", TELEM_MLX90614_ADDRESS); + MLX90614_initialized = true; + } else { + MLX90614_initialized = false; + MESH_DEBUG_PRINTLN("MLX90614 was not found at I2C address %02X", TELEM_MLX90614_ADDRESS); + } + #endif + return true; } @@ -233,6 +249,13 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_MLX90614 + if (MLX90614_initialized) { + telemetry.addTemperature(TELEM_CHANNEL_SELF, MLX90614.readObjectTempC()); + telemetry.addTemperature(TELEM_CHANNEL_SELF + 1, MLX90614.readAmbientTempC()); + } + #endif + } return true; diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index 2a2b209a..535d3d0f 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -15,6 +15,7 @@ protected: bool INA219_initialized = false; bool SHTC3_initialized = false; bool LPS22HB_initialized = false; + bool MLX90614_initialized = false; bool gps_detected = false; bool gps_active = false; diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini index 2c5c124e..a2670a94 100644 --- a/variants/heltec_v3/platformio.ini +++ b/variants/heltec_v3/platformio.ini @@ -157,6 +157,7 @@ build_flags = -D ADMIN_PASSWORD='"password"' -D ENV_PIN_SDA=33 -D ENV_PIN_SCL=34 + -D ENV_INCLUDE_MLX90614=1 -D DISPLAY_CLASS=SSD1306Display ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 @@ -166,6 +167,7 @@ build_src_filter = ${Heltec_lora32_v3.build_src_filter} lib_deps = ${Heltec_lora32_v3.lib_deps} ${esp32_ota.lib_deps} + adafruit/Adafruit MLX90614 Library @ ^2.1.5 [env:Heltec_WSL3_repeater] extends = Heltec_lora32_v3