diff --git a/platformio.ini b/platformio.ini index 69883271d..ba6e25b39 100644 --- a/platformio.ini +++ b/platformio.ini @@ -119,6 +119,7 @@ lib_deps = ${arduino_base.lib_deps} [sensor_base] build_flags = -D ENV_INCLUDE_GPS=1 + -D ENV_INCLUDE_DS18B20=1 -D ENV_INCLUDE_AHTX0=1 -D ENV_INCLUDE_BME280=1 -D ENV_INCLUDE_BMP280=1 @@ -149,3 +150,5 @@ lib_deps = stevemarple/MicroNMEA @ ^2.0.6 adafruit/Adafruit BME680 Library @ ^2.0.4 adafruit/Adafruit BMP085 Library @ ^1.2.4 + paulstoffregen/OneWire @ ^2.3.8 + milesburton/DallasTemperature @ ^4.0.6 \ No newline at end of file diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index a75d378c8..f559fb76c 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -27,6 +27,16 @@ static Adafruit_BMP085 BMP085; static Adafruit_AHTX0 AHTX0; #endif +#if ENV_INCLUDE_DS18B20 +#include +#include +#ifndef TELEM_DS18B20_PIN +#define TELEM_DS18B20_PIN 7 +#endif +OneWire oneWire(TELEM_DS18B20_PIN); +static DallasTemperature sensors(&oneWire); +#endif + #if ENV_INCLUDE_BME280 #ifndef TELEM_BME280_ADDRESS #define TELEM_BME280_ADDRESS 0x76 // BME280 environmental sensor I2C address @@ -179,6 +189,17 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_DS18B20 + sensors.begin(); + uint8_t resetResult = oneWire.reset(); + if (resetResult == 1) { + DS18B20_initialized = true; + } else { + DS18B20_initialized = false; + MESH_DEBUG_PRINTLN("OneWire bus is unresponsive!"); + } + #endif + #if ENV_INCLUDE_BME680 if (BME680.begin(TELEM_BME680_ADDRESS, TELEM_WIRE)) { MESH_DEBUG_PRINTLN("Found BME680 at address: %02X", TELEM_BME680_ADDRESS); @@ -352,6 +373,16 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_DS18B20 + if (DS18B20_initialized) { + sensors.requestTemperatures(); + for (uint8_t i = 0; i < sensors.getDeviceCount(); i++) { + telemetry.addTemperature(next_available_channel, sensors.getTempCByIndex(i)); + next_available_channel++; + } + } + #endif + #if ENV_INCLUDE_BME680 if (BME680_initialized) { if (BME680.performReading()) { diff --git a/src/helpers/sensors/EnvironmentSensorManager.h b/src/helpers/sensors/EnvironmentSensorManager.h index f176a33f5..292c2533a 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.h +++ b/src/helpers/sensors/EnvironmentSensorManager.h @@ -22,6 +22,7 @@ class EnvironmentSensorManager : public SensorManager { bool SHT4X_initialized = false; bool BME680_initialized = false; bool BMP085_initialized = false; + bool DS18B20_initialized = false; bool gps_detected = false; bool gps_active = false; diff --git a/variants/xiao_s3_wio/platformio.ini b/variants/xiao_s3_wio/platformio.ini index 22bb4090a..0d8969be1 100644 --- a/variants/xiao_s3_wio/platformio.ini +++ b/variants/xiao_s3_wio/platformio.ini @@ -228,6 +228,8 @@ build_flags = -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 -D ADMIN_PASSWORD='"password"' + -D ENV_INCLUDE_DS18B20=1 + -D TELEM_DS18B20_PIN=3 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 lib_deps =