mirror of https://github.com/arendst/Tasmota.git
Refactored I2C drivers SHT3x and iAQ
This commit is contained in:
parent
a30f47a901
commit
d0d075a1b4
|
@ -15,7 +15,7 @@ All notable changes to this project will be documented in this file.
|
|||
### Breaking Changed
|
||||
|
||||
### Changed
|
||||
- Refactored I2C drivers HTU21, BH1750 and HYT
|
||||
- Refactored I2C drivers HTU21, BH1750, SHT3x, iAQ and HYT
|
||||
- Add command entered to command error and command unknown message
|
||||
- ESP32 platform update from 2024.08.11 to 2024.09.10 and Framework (Arduino Core) from v3.0.4 to v3.0.5 (#22163)
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
|
|||
- Add command entered to command error and command unknown message
|
||||
- Energy BL09xx command ``CurrentSet`` input changed from Ampere to milliAmpere
|
||||
- Energy force Apparent Power equals Active Power when (Calculated) Apparent Power is less than Active Power [#20653](https://github.com/arendst/Tasmota/issues/20653)
|
||||
- Refactored I2C drivers HTU21, BH1750 and HYT
|
||||
- Refactored I2C drivers HTU21, BH1750, SHT3x, iAQ and HYT
|
||||
|
||||
### Fixed
|
||||
- Crash when calling TasmotaSerial destructor when initialized with incorrect arguments [#22036](https://github.com/arendst/Tasmota/issues/22036)
|
||||
|
|
|
@ -69,7 +69,7 @@ uint8_t Sht3xComputeCrc(uint8_t data[], uint8_t len) {
|
|||
|
||||
bool Sht3xRead(uint32_t sensor) {
|
||||
if (sht3x_sensors[sensor].valid) { sht3x_sensors[sensor].valid--; }
|
||||
|
||||
/*
|
||||
TwoWire& myWire = I2cGetWire(sht3x_sensors[sensor].bus);
|
||||
if (&myWire == nullptr) { return false; } // No valid I2c bus
|
||||
uint32_t type = sht3x_sensors[sensor].type;
|
||||
|
@ -97,12 +97,43 @@ bool Sht3xRead(uint32_t sensor) {
|
|||
if (myWire.endTransmission() != 0) { // Stop I2C transmission
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
uint32_t type = sht3x_sensors[sensor].type;
|
||||
uint8_t i2c_address = sht3x_sensors[sensor].address;
|
||||
uint8_t i2c_bus = sht3x_sensors[sensor].bus;
|
||||
switch (type) {
|
||||
case SHT3X_TYPE_SHT3X:
|
||||
// TODO: Clock stretching is used for SHT3x but not for SHTC3. Why?
|
||||
if (!I2cWrite8(i2c_address, 0x2C, 0x06, i2c_bus)) { // Enable clock stretching / High repeatability measurement
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case SHT3X_TYPE_SHTCX:
|
||||
if (!I2cWrite8(i2c_address, 0x35, 0x17, i2c_bus)) { // Wake from sleep
|
||||
return false;
|
||||
}
|
||||
// TODO: Clock stretching is used for SHT3x but not for SHTC3. Why?
|
||||
if (!I2cWrite8(i2c_address, 0x78, 0x66, i2c_bus)) { // Disable clock stretching / Normal mode measurement
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case SHT3X_TYPE_SHT4X:
|
||||
if (!I2cWrite0(i2c_address, 0xFD, i2c_bus)) { // High repeatability measurement
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
delay(30); // Timing verified with logic analyzer (10 is too short)
|
||||
uint8_t data[6];
|
||||
/*
|
||||
myWire.requestFrom(i2c_address, (uint8_t)6); // Request 6 bytes of data
|
||||
for (uint32_t i = 0; i < 6; i++) {
|
||||
data[i] = myWire.read(); // temperature (MSB, LSB, CRC), humidity (MSB, LSB, CRC)
|
||||
};
|
||||
*/
|
||||
I2cReadBuffer0(i2c_address, data, 6, i2c_bus);
|
||||
|
||||
if ((Sht3xComputeCrc(&data[0], 2) != data[2]) || (Sht3xComputeCrc(&data[3], 2) != data[5])) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -47,6 +47,7 @@ struct {
|
|||
} iAQ;
|
||||
|
||||
bool IAQ_Read(void) {
|
||||
/*
|
||||
TwoWire& myWire = I2cGetWire(iAQ.i2c_bus);
|
||||
if (&myWire == nullptr) { return false; } // No valid I2c bus
|
||||
|
||||
|
@ -56,6 +57,11 @@ bool IAQ_Read(void) {
|
|||
for (uint32_t i = 0; i < 9; i++) {
|
||||
buf[i] = myWire.read();
|
||||
}
|
||||
*/
|
||||
uint8_t buf[9];
|
||||
buf[2] = IAQ_STATUS_I2C_ERR; // populate entry with error code
|
||||
I2cReadBuffer0(iAQ.i2c_address, buf, sizeof(buf), iAQ.i2c_bus);
|
||||
|
||||
// AddLog(LOG_LEVEL_DEBUG, "iAQ: buffer %x %x %x %x %x %x %x %x %x ", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8]);
|
||||
if (IAQ_STATUS_I2C_ERR == buf[2]) {
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue