From 98f09846f8a197b422ec0b27582327f51ffd4fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20St=C3=BCrmer?= Date: Fri, 13 Feb 2026 22:33:47 +0100 Subject: [PATCH 1/3] DS18B20 temperatur sensor --- platformio.ini | 3 +++ .../sensors/EnvironmentSensorManager.cpp | 19 +++++++++++++++++++ .../sensors/EnvironmentSensorManager.h | 1 + 3 files changed, 23 insertions(+) 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..872bd3648 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -27,6 +27,13 @@ static Adafruit_BMP085 BMP085; static Adafruit_AHTX0 AHTX0; #endif +#if ENV_INCLUDE_DS18B20 +#include +#include +OneWire oneWire(7); +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 +186,11 @@ bool EnvironmentSensorManager::begin() { } #endif + #if ENV_INCLUDE_DS18B20 + sensors.begin(); + DS18B20_initialized = true; + #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 +364,13 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen } #endif + #if ENV_INCLUDE_DS18B20 + if (DS18B20_initialized) { + sensors.requestTemperatures(); + telemetry.addTemperature(TELEM_CHANNEL_SELF, sensors.getTempCByIndex(0)); + } + #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; From 77dceba1a45c2acc80233c76531a5163d527e7e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20St=C3=BCrmer?= Date: Fri, 13 Feb 2026 22:49:08 +0100 Subject: [PATCH 2/3] support multiple devices --- src/helpers/sensors/EnvironmentSensorManager.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 872bd3648..16691fb1f 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -30,7 +30,10 @@ static Adafruit_AHTX0 AHTX0; #if ENV_INCLUDE_DS18B20 #include #include -OneWire oneWire(7); +#ifndef TELEM_DS18B20_PIN +#define TELEM_DS18B20_PIN 7 +#endif +OneWire oneWire(TELEM_DS18B20_PIN); static DallasTemperature sensors(&oneWire); #endif @@ -367,7 +370,10 @@ bool EnvironmentSensorManager::querySensors(uint8_t requester_permissions, Cayen #if ENV_INCLUDE_DS18B20 if (DS18B20_initialized) { sensors.requestTemperatures(); - telemetry.addTemperature(TELEM_CHANNEL_SELF, sensors.getTempCByIndex(0)); + for (uint8_t i = 0; i < sensors.getDeviceCount(); i++) { + telemetry.addTemperature(next_available_channel, sensors.getTempCByIndex(i)); + next_available_channel++; + } } #endif From 63b8b66324cfa3a87c1bf50365968820121d78a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20St=C3=BCrmer?= Date: Sat, 14 Feb 2026 14:24:13 +0100 Subject: [PATCH 3/3] check for devices before define initialize true --- src/helpers/sensors/EnvironmentSensorManager.cpp | 8 +++++++- variants/xiao_s3_wio/platformio.ini | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/helpers/sensors/EnvironmentSensorManager.cpp b/src/helpers/sensors/EnvironmentSensorManager.cpp index 16691fb1f..f559fb76c 100644 --- a/src/helpers/sensors/EnvironmentSensorManager.cpp +++ b/src/helpers/sensors/EnvironmentSensorManager.cpp @@ -191,7 +191,13 @@ bool EnvironmentSensorManager::begin() { #if ENV_INCLUDE_DS18B20 sensors.begin(); - DS18B20_initialized = true; + 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 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 =