diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a7f7be5..31bcb7cd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,8 @@ All notable changes to this project will be documented in this file. ## [13.2.0.1] ### Added - I2C bus2 support to iAQ core sensor (#19799) -- I2C bus2 support to HTU temperature sensor +- I2C bus2 support to HTU temperature and humidity sensor +- I2C bus2 support to BH1750 ambient light sensor ### Breaking Changed diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0f841b2db..7d6f02ca0 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -114,7 +114,8 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm ### Added - Experimental support for ESP32-C2 and ESP32-C6 using Arduino core v3 - I2C bus2 support to iAQ core sensor [#19799](https://github.com/arendst/Tasmota/issues/19799) -- I2C bus2 support to HTU temperature sensor +- I2C bus2 support to HTU temperature and humidity sensor +- I2C bus2 support to BH1750 ambient light sensor ### Breaking Changed diff --git a/tasmota/tasmota_xsns_sensor/xsns_10_bh1750.ino b/tasmota/tasmota_xsns_sensor/xsns_10_bh1750.ino index 521defe68..6f49bd450 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_10_bh1750.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_10_bh1750.ino @@ -62,6 +62,7 @@ struct { struct { uint8_t address; + uint8_t bus; uint8_t valid = 0; uint8_t mtreg = 69; // Default Measurement Time uint16_t illuminance = 0; @@ -78,29 +79,33 @@ uint8_t Bh1750Resolution(uint32_t sensor_index) { } bool Bh1750SetResolution(uint32_t sensor_index) { - Wire.beginTransmission(Bh1750_sensors[sensor_index].address); - Wire.write(Bh1750.resolution[Bh1750Resolution(sensor_index)]); - return (!Wire.endTransmission()); + TwoWire& myWire = I2cGetWire(Bh1750_sensors[sensor_index].bus); + myWire.beginTransmission(Bh1750_sensors[sensor_index].address); + myWire.write(Bh1750.resolution[Bh1750Resolution(sensor_index)]); + return (!myWire.endTransmission()); } bool Bh1750SetMTreg(uint32_t sensor_index) { - Wire.beginTransmission(Bh1750_sensors[sensor_index].address); + TwoWire& myWire = I2cGetWire(Bh1750_sensors[sensor_index].bus); + if (&myWire == nullptr) { return false; } // No valid I2c bus + myWire.beginTransmission(Bh1750_sensors[sensor_index].address); uint8_t data = BH1750_MEASUREMENT_TIME_HIGH | ((Bh1750_sensors[sensor_index].mtreg >> 5) & 0x07); - Wire.write(data); - if (Wire.endTransmission()) { return false; } - Wire.beginTransmission(Bh1750_sensors[sensor_index].address); + myWire.write(data); + if (myWire.endTransmission()) { return false; } + myWire.beginTransmission(Bh1750_sensors[sensor_index].address); data = BH1750_MEASUREMENT_TIME_LOW | (Bh1750_sensors[sensor_index].mtreg & 0x1F); - Wire.write(data); - if (Wire.endTransmission()) { return false; } + myWire.write(data); + if (myWire.endTransmission()) { return false; } return Bh1750SetResolution(sensor_index); } bool Bh1750Read(uint32_t sensor_index) { if (Bh1750_sensors[sensor_index].valid) { Bh1750_sensors[sensor_index].valid--; } - if (2 != Wire.requestFrom(Bh1750_sensors[sensor_index].address, (uint8_t)2)) { return false; } + TwoWire& myWire = I2cGetWire(Bh1750_sensors[sensor_index].bus); + if (2 != myWire.requestFrom(Bh1750_sensors[sensor_index].address, (uint8_t)2)) { return false; } - float illuminance = (Wire.read() << 8) | Wire.read(); + float illuminance = (myWire.read() << 8) | myWire.read(); illuminance *= 57.5 / (float)Bh1750_sensors[sensor_index].mtreg; // Fix #16022 if (1 == Bh1750Resolution(sensor_index)) { illuminance /= 2; @@ -114,13 +119,17 @@ bool Bh1750Read(uint32_t sensor_index) { /********************************************************************************************/ void Bh1750Detect(void) { - for (uint32_t i = 0; i < sizeof(Bh1750.addresses); i++) { - if (!I2cSetDevice(Bh1750.addresses[i])) { continue; } + for (uint32_t bus = 0; bus < 2; bus++) { + for (uint32_t i = 0; i < sizeof(Bh1750.addresses); i++) { + if (!I2cSetDevice(Bh1750.addresses[i], bus)) { continue; } - Bh1750_sensors[Bh1750.count].address = Bh1750.addresses[i]; - if (Bh1750SetMTreg(Bh1750.count)) { - I2cSetActiveFound(Bh1750_sensors[Bh1750.count].address, Bh1750.types); - Bh1750.count++; + Bh1750_sensors[Bh1750.count].address = Bh1750.addresses[i]; + Bh1750_sensors[Bh1750.count].bus = bus; + if (Bh1750SetMTreg(Bh1750.count)) { + I2cSetActiveFound(Bh1750_sensors[Bh1750.count].address, Bh1750.types, Bh1750_sensors[Bh1750.count].bus); + Bh1750.count++; + if (2 == Bh1750.count) { return; } + } } } }