Make BME280 usermod i2c address changeable

This commit is contained in:
Michael Bisbjerg 2024-05-10 22:43:55 +02:00
parent c016dedea4
commit 43d024fe42
2 changed files with 11 additions and 1 deletions

View File

@ -7,6 +7,7 @@ This Usermod is designed to read a `BME280` or `BMP280` sensor and output the fo
- Dew Point (`BME280` only)
Configuration is performed via the Usermod menu. There are no parameters to set in code! The following settings can be configured in the Usermod Menu:
- The i2c address in decimal. Set it to either 118 (0x76, the default) or 119 (0x77). **Requires reboot**.
- Temperature Decimals (number of decimal places to output)
- Humidity Decimals
- Pressure Decimals

View File

@ -28,6 +28,7 @@ private:
bool UseCelsius = true; // Use Celsius for Reporting
bool HomeAssistantDiscovery = false; // Publish Home Assistant Device Information
bool enabled = true;
BME280I2C::I2CAddr i2cAddress = BME280I2C::I2CAddr_0x76; // Default i2c address for BME280
// set the default pins based on the architecture, these get overridden by Usermod menu settings
#ifdef ESP8266
@ -48,7 +49,7 @@ private:
BME280I2C::I2CAddr_0x76 // I2C address. I2C specific. Default 0x76
};
BME280I2C bme{settings};
BME280I2C bme;
uint8_t sensorType;
@ -186,6 +187,9 @@ public:
{
if (i2c_scl<0 || i2c_sda<0) { enabled = false; sensorType = 0; return; }
settings.bme280Addr = i2cAddress;
bme = BME280I2C(settings);
if (!bme.begin())
{
sensorType = 0;
@ -399,6 +403,7 @@ public:
{
JsonObject top = root.createNestedObject(FPSTR(_name));
top[FPSTR(_enabled)] = enabled;
top[F("I2CAddress")] = i2cAddress;
top[F("TemperatureDecimals")] = TemperatureDecimals;
top[F("HumidityDecimals")] = HumidityDecimals;
top[F("PressureDecimals")] = PressureDecimals;
@ -426,6 +431,10 @@ public:
configComplete &= getJsonValue(top[FPSTR(_enabled)], enabled);
// A 3-argument getJsonValue() assigns the 3rd argument as a default value if the Json value is missing
uint8_t tmpI2cAddress;
configComplete &= getJsonValue(top[F("I2CAddress")], tmpI2cAddress, 0x76);
i2cAddress = static_cast<BME280I2C::I2CAddr>(tmpI2cAddress);
configComplete &= getJsonValue(top[F("TemperatureDecimals")], TemperatureDecimals, 1);
configComplete &= getJsonValue(top[F("HumidityDecimals")], HumidityDecimals, 0);
configComplete &= getJsonValue(top[F("PressureDecimals")], PressureDecimals, 0);