From e4ed2439c428ccbd4da6e03b9f365b4653ce924b Mon Sep 17 00:00:00 2001 From: Craig Markwardt Date: Fri, 22 Mar 2019 11:15:07 -0400 Subject: [PATCH 1/2] sensors - allow a second BMX280 sensor --- code/espurna/config/sensors.h | 3 ++- code/espurna/sensor.ino | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/espurna/config/sensors.h b/code/espurna/config/sensors.h index f1d16825..fb127a7f 100644 --- a/code/espurna/config/sensors.h +++ b/code/espurna/config/sensors.h @@ -159,8 +159,9 @@ #endif #ifndef BMX280_ADDRESS -#define BMX280_ADDRESS 0x00 // 0x00 means auto +#define BMX280_ADDRESS 0x00 // 0x00 means auto (0x76 or 0x77 allowed) #endif +//#define BMX280_ADDRESS2 0x77 // Address of 2nd BMX (must not use auto for either if two are present) #define BMX280_MODE 1 // 0 for sleep mode, 1 or 2 for forced mode, 3 for normal mode #define BMX280_STANDBY 0 // 0 for 0.5ms, 1 for 62.5ms, 2 for 125ms diff --git a/code/espurna/sensor.ino b/code/espurna/sensor.ino index 8c2571d4..d380fede 100644 --- a/code/espurna/sensor.ino +++ b/code/espurna/sensor.ino @@ -481,6 +481,13 @@ void _sensorLoad() { BMX280Sensor * sensor = new BMX280Sensor(); sensor->setAddress(BMX280_ADDRESS); _sensors.push_back(sensor); + + #ifdef BMX280_ADDRESS2 + // Up to two BME sensors allowed on one bus + BMX280Sensor * sensor2 = new BMX280Sensor(); + sensor->setAddress(BMX280_ADDRESS2); + _sensors.push_back(sensor2); + #endif } #endif From b5748c9c263e789d8e5eb3b9293df4291201d8b9 Mon Sep 17 00:00:00 2001 From: Craig Markwardt Date: Tue, 26 Mar 2019 09:29:05 -0400 Subject: [PATCH 2/2] Up to two BMX280 sensors are allowed on a single I2C bus, with addresses 0x76 and 0x77. Currently espurna only supports one of them. This change adds a second sensor object to deal with two sensors, if BMX280_NUMBER == 2 --- code/espurna/config/sensors.h | 9 +++++++-- code/espurna/sensor.ino | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/code/espurna/config/sensors.h b/code/espurna/config/sensors.h index f1d16825..e0ac7e76 100644 --- a/code/espurna/config/sensors.h +++ b/code/espurna/config/sensors.h @@ -158,9 +158,14 @@ #define BMX280_SUPPORT 0 #endif -#ifndef BMX280_ADDRESS -#define BMX280_ADDRESS 0x00 // 0x00 means auto +#ifndef BMX280_NUMBER +#define BMX280_NUMBER 2 // Number of sensors present. Either 1 or 2 allowed #endif +#ifndef BMX280_ADDRESS +#define BMX280_ADDRESS 0x00 // 0x00 means auto (0x76 or 0x77 allowed) for sensor #0 +#endif // If (BMX280_NUMBER == 2) and + // (BMX280_ADDRESS == 0x00) then sensor #1 is auto-discovered + // (BMX280_ADDRESS != 0x00) then sensor #1 is the unnamed address #define BMX280_MODE 1 // 0 for sleep mode, 1 or 2 for forced mode, 3 for normal mode #define BMX280_STANDBY 0 // 0 for 0.5ms, 1 for 62.5ms, 2 for 125ms diff --git a/code/espurna/sensor.ino b/code/espurna/sensor.ino index 93d11e10..eb7c6cbd 100644 --- a/code/espurna/sensor.ino +++ b/code/espurna/sensor.ino @@ -484,6 +484,15 @@ void _sensorLoad() { BMX280Sensor * sensor = new BMX280Sensor(); sensor->setAddress(BMX280_ADDRESS); _sensors.push_back(sensor); + + #if (BMX280_NUMBER == 2) + // Up to two BME sensors allowed on one I2C bus + BMX280Sensor * sensor2 = new BMX280Sensor(); + // For second sensor, if BMX280_ADDRESS is 0x00 then auto-discover + // otherwise choose the other unnamed sensor address + sensor->setAddress( (BMX280_ADDRESS == 0x00) ? 0x00 : (0x76 + 0x77 - BMX280_ADDRESS)); + _sensors.push_back(sensor2); + #endif } #endif