20
20
#ifdef USE_I2C
21
21
#ifdef USE_SHT3X
22
22
/* ********************************************************************************************\
23
- * SHT3X - Temperature and Humidy
23
+ * SHT3X and SHTC3 - Temperature and Humidy
24
24
*
25
- * I2C Address: 0x44 or 0x45
25
+ * I2C Address: 0x44, 0x45 or 0x70 (SHTC3)
26
26
\*********************************************************************************************/
27
27
28
28
#define SHT3X_ADDR_GND 0x44 // address pin low (GND)
29
29
#define SHT3X_ADDR_VDD 0x45 // address pin high (VDD)
30
+ #define SHTC3_ADDR 0x70 // address for shtc3 sensor
31
+
32
+ const char kShtTypes [] PROGMEM = " SHT3X|SHT3X|SHTC3" ;
30
33
31
34
uint8_t sht3x_type = 0 ;
32
35
uint8_t sht3x_address;
33
- uint8_t sht3x_addresses[] = { SHT3X_ADDR_GND, SHT3X_ADDR_VDD };
36
+ uint8_t sht3x_addresses[] = { SHT3X_ADDR_GND, SHT3X_ADDR_VDD, SHTC3_ADDR };
37
+ char sht3x_types[6 ];
34
38
35
39
bool Sht3xRead (float &t, float &h)
36
40
{
@@ -40,8 +44,17 @@ bool Sht3xRead(float &t, float &h)
40
44
h = NAN;
41
45
42
46
Wire.beginTransmission (sht3x_address);
43
- Wire.write (0x2C ); // Enable clock stretching
44
- Wire.write (0x06 ); // High repeatability
47
+ if (SHTC3_ADDR == sht3x_address) {
48
+ Wire.write (0x35 ); // Wake from
49
+ Wire.write (0x17 ); // sleep
50
+ Wire.endTransmission ();
51
+ Wire.beginTransmission (sht3x_address);
52
+ Wire.write (0x78 ); // Dissable clock stretching ( I don't think that wire library support clock stretching )
53
+ Wire.write (0x66 ); // High resolution
54
+ } else {
55
+ Wire.write (0x2C ); // Enable clock stretching
56
+ Wire.write (0x06 ); // High repeatability
57
+ }
45
58
if (Wire.endTransmission () != 0 ) { // Stop I2C transmission
46
59
return false ;
47
60
}
@@ -69,7 +82,8 @@ void Sht3xDetect()
69
82
for (byte i = 0 ; i < sizeof (sht3x_addresses); i++) {
70
83
sht3x_address = sht3x_addresses[i];
71
84
if (Sht3xRead (t, h)) {
72
- snprintf_P (log_data, sizeof (log_data), S_LOG_I2C_FOUND_AT, " SHT3X" , sht3x_address);
85
+ GetTextIndexed (sht3x_types, sizeof (sht3x_types), i, kShtTypes );
86
+ snprintf_P (log_data, sizeof (log_data), S_LOG_I2C_FOUND_AT, sht3x_types, htu_address);
73
87
AddLog (LOG_LEVEL_DEBUG);
74
88
return ;
75
89
}
@@ -89,14 +103,14 @@ void Sht3xShow(boolean json)
89
103
dtostrfd (h, Settings.flag2 .humidity_resolution , humidity);
90
104
91
105
if (json) {
92
- snprintf_P (mqtt_data, sizeof (mqtt_data), JSON_SNS_TEMPHUM, mqtt_data, " SHT3X " , temperature, humidity);
106
+ snprintf_P (mqtt_data, sizeof (mqtt_data), JSON_SNS_TEMPHUM, mqtt_data, sht3x_types , temperature, humidity);
93
107
#ifdef USE_DOMOTICZ
94
108
DomoticzTempHumSensor (temperature, humidity);
95
109
#endif // USE_DOMOTICZ
96
110
#ifdef USE_WEBSERVER
97
111
} else {
98
- snprintf_P (mqtt_data, sizeof (mqtt_data), HTTP_SNS_TEMP, mqtt_data, " SHT3X " , temperature, TempUnit ());
99
- snprintf_P (mqtt_data, sizeof (mqtt_data), HTTP_SNS_HUM, mqtt_data, " SHT3X " , humidity);
112
+ snprintf_P (mqtt_data, sizeof (mqtt_data), HTTP_SNS_TEMP, mqtt_data, sht3x_types , temperature, TempUnit ());
113
+ snprintf_P (mqtt_data, sizeof (mqtt_data), HTTP_SNS_HUM, mqtt_data, sht3x_types , humidity);
100
114
#endif // USE_WEBSERVER
101
115
}
102
116
}
0 commit comments