diff --git a/src/driver/drv_cht8305.c b/src/driver/drv_cht8305.c index 573a800c9..9552c5c2b 100644 --- a/src/driver/drv_cht8305.c +++ b/src/driver/drv_cht8305.c @@ -9,81 +9,99 @@ #include "drv_uart.h" #include "../httpserver/new_http.h" #include "../hal/hal_pins.h" - -#include "drv_cht8305.h" - - -#define CHT8305_I2C_ADDR (0x40 << 1) +#include "drv_cht83xx.h" static byte g_cht_secondsUntilNextMeasurement = 1, g_cht_secondsBetweenMeasurements = 1; static byte channel_temp = 0, channel_humid = 0; static float g_temp = 0.0, g_humid = 0.0; static softI2C_t g_softI2C; static float g_calTemp = 0, g_calHum = 0; -static uint16_t sensor_id=0; +static uint16_t sensor_id = 0; +static char* g_cht_sensor = "CHT8305"; - -static void CHT8305_ReadEnv(float* temp, float* hum) { +static void CHT83XX_ReadEnv(float* temp, float* hum) +{ uint8_t buff[4]; - unsigned int th, tl, hh, hl; - if(sensor_id==0x8215) + if(IS_CHT831X) { - //Make dymmy write to Oneshot register to trigger a measurement, sensor is otherwise sleeping - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); - Soft_I2C_WriteByte(&g_softI2C, 0x0F); - Soft_I2C_WriteByte(&g_softI2C, 0x00); + //Oneshot measurement + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x0F); + Soft_I2C_WriteByte(&g_softI2C, 0x00); Soft_I2C_WriteByte(&g_softI2C, 0x00); Soft_I2C_Stop(&g_softI2C); } - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); Soft_I2C_WriteByte(&g_softI2C, 0x00); Soft_I2C_Stop(&g_softI2C); rtos_delay_milliseconds(20); //give the sensor time to do the conversion - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR | 1); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR | 1); Soft_I2C_ReadBytes(&g_softI2C, buff, 4); Soft_I2C_Stop(&g_softI2C); //In case we have the new sensor 8310, overwrite humidity data reading it from 0x01, as it cannot be directrly read from 0x00, there is parity - if(sensor_id==0x8215) + if(IS_CHT831X) { - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); Soft_I2C_WriteByte(&g_softI2C, 0x01); Soft_I2C_Stop(&g_softI2C); - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR | 1); - Soft_I2C_ReadBytes(&g_softI2C, buff+2, 2); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR | 1); + Soft_I2C_ReadBytes(&g_softI2C, buff + 2, 2); Soft_I2C_Stop(&g_softI2C); - } - - th = buff[0]; - tl = buff[1]; - hh = buff[2]; - hl = buff[3]; - - if(sensor_id==0x8215) - { - (*temp)=((th << 8 | tl)>>1)/128.0+g_calTemp; - (*hum) = ((((hh << 8 | hl) & 0x7fff) / 32768.0 ) * 100.0)+ g_calHum; - } - else - { - (*temp) = ((th << 8 | tl) * 165.0 / 65535.0 - 40.0)+ g_calTemp; - (*hum) = ((hh << 8 | hl) * 100.0 / 65535.0)+ g_calHum; + int16_t temp_val = (buff[0] << 8 | buff[1]); + // >> 3 = 13bit resolution + (*temp) = (float)(temp_val >> 3) * 0.03125 + g_calTemp; + (*hum) = ((((buff[2] << 8 | buff[3]) & 0x7fff) / 32768.0) * 100.0) + g_calHum; + return; } + (*temp) = ((buff[0] << 8 | buff[1]) * 165.0 / 65535.0 - 40.0) + g_calTemp; + (*hum) = ((buff[2] << 8 | buff[3]) * 100.0 / 65535.0) + g_calHum; } -commandResult_t CHT_Calibrate(const void* context, const char* cmd, const char* args, int cmdFlags) { +void CHT831X_ConfigureAlert(float temp_diff, CHT_alert_freq freq, CHT_alert_fq fq) +{ + int16_t hight = (int)((g_temp - g_calTemp + temp_diff) / 0.03125) << 3; + int16_t lowt = (int)((g_temp - g_calTemp - temp_diff) / 0.03125) << 3; + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x05); + Soft_I2C_WriteByte(&g_softI2C, (uint8_t)((hight & 0xFF00) >> 8)); + Soft_I2C_WriteByte(&g_softI2C, (uint8_t)(hight & 0x00FF)); + Soft_I2C_Stop(&g_softI2C); + + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x06); + Soft_I2C_WriteByte(&g_softI2C, (uint8_t)((lowt & 0xFF00) >> 8)); + Soft_I2C_WriteByte(&g_softI2C, (uint8_t)(lowt & 0x00FF)); + Soft_I2C_Stop(&g_softI2C); + + uint8_t conf = 0x80 | (POL_AL << 5) | (SRC_TEMP_ONLY << 3) | (fq << 1) | 1; + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x03); + Soft_I2C_WriteByte(&g_softI2C, 0x08); + Soft_I2C_WriteByte(&g_softI2C, conf); + Soft_I2C_Stop(&g_softI2C); + + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x04); + Soft_I2C_WriteByte(&g_softI2C, (uint8_t)freq); + Soft_I2C_Stop(&g_softI2C); +} + +commandResult_t CHT83XX_Calibrate(const void* context, const char* cmd, const char* args, int cmdFlags) +{ Tokenizer_TokenizeString(args, TOKENIZER_ALLOW_QUOTES | TOKENIZER_DONT_EXPAND); // following check must be done after 'Tokenizer_TokenizeString', // so we know arguments count in Tokenizer. 'cmd' argument is // only for warning display - if (Tokenizer_CheckArgsCountAndPrintWarning(cmd, 2)) { + if(Tokenizer_CheckArgsCountAndPrintWarning(cmd, 2)) + { return CMD_RES_NOT_ENOUGH_ARGUMENTS; } g_calTemp = Tokenizer_GetArgFloat(0); @@ -94,10 +112,12 @@ commandResult_t CHT_Calibrate(const void* context, const char* cmd, const char* return CMD_RES_OK; } -commandResult_t CHT_cycle(const void* context, const char* cmd, const char* args, int cmdFlags) { - +commandResult_t CHT83XX_Cycle(const void* context, const char* cmd, const char* args, int cmdFlags) +{ Tokenizer_TokenizeString(args, TOKENIZER_ALLOW_QUOTES | TOKENIZER_DONT_EXPAND); - if (Tokenizer_CheckArgsCountAndPrintWarning(cmd, 1)) { + + if(Tokenizer_CheckArgsCountAndPrintWarning(cmd, 1)) + { return CMD_RES_NOT_ENOUGH_ARGUMENTS; } g_cht_secondsBetweenMeasurements = Tokenizer_GetArgInteger(0); @@ -106,70 +126,157 @@ commandResult_t CHT_cycle(const void* context, const char* cmd, const char* args return CMD_RES_OK; } -// startDriver CHT8305 -void CHT8305_Init() { + +commandResult_t CHT83XX_Alert(const void* context, const char* cmd, const char* args, int cmdFlags) +{ + Tokenizer_TokenizeString(args, TOKENIZER_ALLOW_QUOTES | TOKENIZER_DONT_EXPAND); + + if(Tokenizer_CheckArgsCountAndPrintWarning(cmd, 3)) + { + return CMD_RES_NOT_ENOUGH_ARGUMENTS; + } + if(!IS_CHT831X) + { + ADDLOG_ERROR(LOG_FEATURE_CMD, "ALERT is not supported on CHT8305"); + return CMD_RES_ERROR; + } + float diff = Tokenizer_GetArgFloat(0); + int tfreq = Tokenizer_GetArgInteger(1); + int tfq = Tokenizer_GetArgInteger(2); + CHT_alert_freq freq; + CHT_alert_fq fq; + switch(tfreq) + { + case 120: + freq = FREQ_120S; + tfreq = 120; + break; + case 60 ... 119: + freq = FREQ_60S; + tfreq = 60; + break; + case 10 ... 59: + freq = FREQ_10S; + tfreq = 10; + break; + case 5 ... 9: + freq = FREQ_5S; + tfreq = 5; + break; + default: + ADDLOG_WARN(LOG_FEATURE_CMD, "CHT83XX_Alert: Wrong freq"); + case 1 ... 4: + freq = FREQ_1S; + tfreq = 1; + break; + } + switch(tfq) + { + case 6: + fq = FQ_6; + tfq = 6; + break; + case 4 ... 5: + fq = FQ_4; + tfq = 4; + break; + case 2 ... 3: + fq = FQ_2; + tfq = 2; + break; + default: + ADDLOG_WARN(LOG_FEATURE_CMD, "CHT83XX_Alert: Wrong fq"); + case 1: + fq = FQ_1; + tfq = 1; + break; + } + ADDLOG_DEBUG(LOG_FEATURE_CMD, "freq:%i,fq:%i", tfreq, tfq); + CHT831X_ConfigureAlert(diff, freq, fq); + + return CMD_RES_OK; +} + +// startDriver CHT83XX +void CHT83XX_Init() +{ uint8_t buff[4]; g_softI2C.pin_clk = 9; g_softI2C.pin_data = 14; - g_softI2C.pin_clk = PIN_FindPinIndexForRole(IOR_CHT8305_CLK, g_softI2C.pin_clk); - g_softI2C.pin_data = PIN_FindPinIndexForRole(IOR_CHT8305_DAT, g_softI2C.pin_data); + g_softI2C.pin_clk = PIN_FindPinIndexForRole(IOR_CHT83XX_CLK, g_softI2C.pin_clk); + g_softI2C.pin_data = PIN_FindPinIndexForRole(IOR_CHT83XX_DAT, g_softI2C.pin_data); Soft_I2C_PreInit(&g_softI2C); - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); - Soft_I2C_WriteByte(&g_softI2C, 0xfe); //manufacturer ID 2 bytes + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0xfe); //manufacturer ID 2 bytes Soft_I2C_Stop(&g_softI2C); - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR | 1); + + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR | 1); Soft_I2C_ReadBytes(&g_softI2C, buff, 2); Soft_I2C_Stop(&g_softI2C); - //Read Sensor version separately on the last 2 bytes of the buffer - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); Soft_I2C_WriteByte(&g_softI2C, 0xff); Soft_I2C_Stop(&g_softI2C); - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR | 1); - Soft_I2C_ReadBytes(&g_softI2C, buff+2, 2); + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR | 1); + Soft_I2C_ReadBytes(&g_softI2C, buff + 2, 2); Soft_I2C_Stop(&g_softI2C); //Identify chip ID and keep if for later use - sensor_id=(buff[2] << 8 | buff[3]); + sensor_id = (buff[2] << 8 | buff[3]); - addLogAdv(LOG_INFO, LOG_FEATURE_SENSOR, "DRV_CHT8305_init: ID: %02X %02X %04X", buff[0], buff[1], sensor_id); + ADDLOG_INFO(LOG_FEATURE_SENSOR, "DRV_CHT83XX_Init: ID: %02X %02X %04X", buff[0], buff[1], sensor_id); - - if(sensor_id==0x8215) - {//it should be 8310 id is 0x8215, we enable low power mode, so only 50nA are drawn from sensor, - //but need to write something to one shot register to trigger new measurement - - Soft_I2C_Start(&g_softI2C, CHT8305_I2C_ADDR); - Soft_I2C_WriteByte(&g_softI2C, 0x03); //config register - Soft_I2C_WriteByte(&g_softI2C, 0x48); //enable shutdown default is 0x08 - //setting bit 6 enables low power mode, - //to get new measurement need to write to one shot register - Soft_I2C_WriteByte(&g_softI2C, 0x80); //as default 0x80 + if(IS_CHT831X) + { + //it should be 8310 id is 0x8215, we enable low power mode, so only 50nA are drawn from sensor, + //but need to write something to one shot register to trigger new measurement + Soft_I2C_Start(&g_softI2C, CHT83XX_I2C_ADDR); + Soft_I2C_WriteByte(&g_softI2C, 0x03); //config register + Soft_I2C_WriteByte(&g_softI2C, 0x48); //enable shutdown default is 0x08 + //setting bit 6 enables low power mode, + //to get new measurement need to write to one shot register + Soft_I2C_WriteByte(&g_softI2C, 0x80); //as default 0x80 Soft_I2C_Stop(&g_softI2C); + } + switch(sensor_id) + { + case 0x8215: + g_cht_sensor = "CHT8310"; + break; + case 0x8315: + g_cht_sensor = "CHT8315"; + break; + default: + g_cht_sensor = "CHT8305"; + break; } //cmddetail:{"name":"CHT_Calibrate","args":"[DeltaTemp][DeltaHumidity]", //cmddetail:"descr":"Calibrate the CHT Sensor as Tolerance is +/-2 degrees C.", //cmddetail:"fn":"CHT_Calibrate","file":"driver/drv_cht8305.c","requires":"", //cmddetail:"examples":"CHT_Calibrate -4 10
meaning -4 on current temp reading and +10 on current humidity reading"} - CMD_RegisterCommand("CHT_Calibrate", CHT_Calibrate, NULL); + CMD_RegisterCommand("CHT_Calibrate", CHT83XX_Calibrate, NULL); //cmddetail:{"name":"CHT_Cycle","args":"[IntervalSeconds]", //cmddetail:"descr":"This is the interval between measurements in seconds, by default 1. Max is 255.", //cmddetail:"fn":"CHT_cycle","file":"drv/drv_cht8305.c","requires":"", //cmddetail:"examples":"CHT_Cycle 60
measurement is taken every 60 seconds"} - CMD_RegisterCommand("CHT_Cycle", CHT_cycle, NULL); - + CMD_RegisterCommand("CHT_Cycle", CHT83XX_Cycle, NULL); + //cmddetail:{"name":"CHT_Alert","args":"[temp_diff][freq][fq]", + //cmddetail:"descr":"Enable alert pin. freq (time per measurement, in s) = 1, 5, 10, 60, 120, fq (fault queue number) = 1, 2, 4, 6", + //cmddetail:"fn":"CHT_Alert","file":"drv/drv_cht8305.c","requires":"", + //cmddetail:"examples":"CHT_Alert 0.5 5 2
will trigger alert pin, when temperature deviates for more than 0.5C, sensor measure every 5s with 2 fault queue number"} + CMD_RegisterCommand("CHT_Alert", CHT83XX_Alert, NULL); } - -void CHT8305_Measure() { - CHT8305_ReadEnv(&g_temp, &g_humid); +void CHT83XX_Measure() +{ + CHT83XX_ReadEnv(&g_temp, &g_humid); channel_temp = g_cfg.pins.channels[g_softI2C.pin_data]; channel_humid = g_cfg.pins.channels2[g_softI2C.pin_data]; @@ -178,24 +285,27 @@ void CHT8305_Measure() { CHANNEL_Set(channel_temp, (int)(g_temp * 10), 0); CHANNEL_Set(channel_humid, (int)(g_humid), 0); - addLogAdv(LOG_INFO, LOG_FEATURE_SENSOR, "DRV_CHT8304_readEnv: Temperature:%fC Humidity:%f%%", g_temp, g_humid); + ADDLOG_INFO(LOG_FEATURE_SENSOR, "DRV_CHT83XX_ReadEnv: Temperature:%fC Humidity:%f%%", g_temp, g_humid); } -void CHT8305_OnEverySecond() { - if (g_cht_secondsUntilNextMeasurement <= 0) { - CHT8305_Measure(); +void CHT83XX_OnEverySecond() +{ + if(g_cht_secondsUntilNextMeasurement <= 0) + { + CHT83XX_Measure(); g_cht_secondsUntilNextMeasurement = g_cht_secondsBetweenMeasurements; } - if (g_cht_secondsUntilNextMeasurement > 0) { + if(g_cht_secondsUntilNextMeasurement > 0) + { g_cht_secondsUntilNextMeasurement--; } } -void CHT8305_AppendInformationToHTTPIndexPage(http_request_t* request) +void CHT83XX_AppendInformationToHTTPIndexPage(http_request_t* request) { - hprintf255(request, "

CHT8305 Temperature=%f, Humidity=%f

", g_temp, g_humid); - if (channel_humid == channel_temp) { + hprintf255(request, "

%s Temperature=%f, Humidity=%f

", g_cht_sensor, g_temp, g_humid); + if(channel_humid == channel_temp) + { hprintf255(request, "WARNING: You don't have configured target channels for temp and humid results, set the first and second channel index in Pins!"); } } - diff --git a/src/driver/drv_cht8305.h b/src/driver/drv_cht8305.h deleted file mode 100644 index 4431376dd..000000000 --- a/src/driver/drv_cht8305.h +++ /dev/null @@ -1,5 +0,0 @@ - - - - -#define CHT8305_DELAY 4 \ No newline at end of file diff --git a/src/driver/drv_cht83xx.h b/src/driver/drv_cht83xx.h new file mode 100644 index 000000000..37bb3c296 --- /dev/null +++ b/src/driver/drv_cht83xx.h @@ -0,0 +1,40 @@ +#define CHT83XX_I2C_ADDR (0x40 << 1) +#define IS_CHT831X (sensor_id == 0x8215 || sensor_id == 0x8315) + +// sensor internal measurement frequency +typedef enum +{ + FREQ_120S = 0b000, + FREQ_60S = 0b001, + FREQ_10S = 0b010, + FREQ_5S = 0b011, + FREQ_1S = 0b100, + FREQ_500MS = 0b101, + FREQ_250MS = 0b110, + FREQ_125MS = 0b111, +} CHT_alert_freq; + +// alert source +typedef enum +{ + SRC_TEMP_OR_HUM = 0b00, + SRC_TEMP_ONLY = 0b01, + SRC_HUM_ONLY = 0b10, + SRC_TEMP_AND_HUM = 0b11, +} CHT_alert_src; + +// polarity, active low or active high +typedef enum +{ + POL_AL = 0b0, + POL_AH = 0b1, +} CHT_alert_pol; + +// alert fault queue +typedef enum +{ + FQ_1 = 0b00, + FQ_2 = 0b01, + FQ_4 = 0b10, + FQ_6 = 0b11, +} CHT_alert_fq; \ No newline at end of file diff --git a/src/driver/drv_local.h b/src/driver/drv_local.h index 84e36448c..386584548 100644 --- a/src/driver/drv_local.h +++ b/src/driver/drv_local.h @@ -95,9 +95,9 @@ void DRV_HTTPButtons_ProcessChanges(http_request_t* request); void DRV_HTTPButtons_AddToHtmlPage(http_request_t* request); void DRV_InitHTTPButtons(); -void CHT8305_Init(); -void CHT8305_OnEverySecond(); -void CHT8305_AppendInformationToHTTPIndexPage(http_request_t* request); +void CHT83XX_Init(); +void CHT83XX_OnEverySecond(); +void CHT83XX_AppendInformationToHTTPIndexPage(http_request_t* request); void SHT3X_Init(); void SHT3X_AppendInformationToHTTPIndexPage(http_request_t* request); diff --git a/src/driver/drv_main.c b/src/driver/drv_main.c index 3998210ad..030115bf6 100644 --- a/src/driver/drv_main.c +++ b/src/driver/drv_main.c @@ -298,12 +298,14 @@ static driver_t g_drivers[] = { //drvdetail:"requires":""} { "BMPI2C", BMPI2C_Init, BMPI2C_OnEverySecond, BMPI2C_AppendInformationToHTTPIndexPage, NULL, NULL, NULL, false }, #endif -#if defined(PLATFORM_BEKEN) || defined(WINDOWS) - //drvdetail:{"name":"CHT8305", +#if ENABLE_DRIVER_CHT83XX + //drvdetail:{"name":"CHT83XX", //drvdetail:"title":"TODO", - //drvdetail:"descr":"CHT8305 is a Temperature and Humidity sensor with I2C interface.", + //drvdetail:"descr":"CHT8305, CHT8310 and CHT8315 are a Temperature and Humidity sensors with I2C interface.", //drvdetail:"requires":""} - { "CHT8305", CHT8305_Init, CHT8305_OnEverySecond, CHT8305_AppendInformationToHTTPIndexPage, NULL, NULL, NULL, false }, + { "CHT83XX", CHT83XX_Init, CHT83XX_OnEverySecond, CHT83XX_AppendInformationToHTTPIndexPage, NULL, NULL, NULL, false }, +#endif +#if defined(PLATFORM_BEKEN) || defined(WINDOWS) //drvdetail:{"name":"MCP9808", //drvdetail:"title":"TODO", //drvdetail:"descr":"MCP9808 is a Temperature sensor with I2C interface and an external wakeup pin, see [docs](https://www.elektroda.pl/rtvforum/topic3988466.html).", @@ -644,7 +646,7 @@ bool DRV_IsMeasuringBattery() { bool DRV_IsSensor() { #ifndef OBK_DISABLE_ALL_DRIVERS - return DRV_IsRunning("SHT3X") || DRV_IsRunning("CHT8305") || DRV_IsRunning("SGP") || DRV_IsRunning("AHT2X"); + return DRV_IsRunning("SHT3X") || DRV_IsRunning("CHT83XX") || DRV_IsRunning("SGP") || DRV_IsRunning("AHT2X"); #else return false; #endif diff --git a/src/httpserver/json_interface.c b/src/httpserver/json_interface.c index fc1624214..6da678d1a 100644 --- a/src/httpserver/json_interface.c +++ b/src/httpserver/json_interface.c @@ -273,8 +273,8 @@ static int http_tasmota_json_SENSOR(void* request, jsonCb_t printer) { // close ENERGY block printer(request, "},"); } - if (DRV_IsRunning("CHT8305")) { - g_pin_1 = PIN_FindPinIndexForRole(IOR_CHT8305_DAT, g_pin_1); + if (DRV_IsRunning("CHT83XX")) { + g_pin_1 = PIN_FindPinIndexForRole(IOR_CHT83XX_DAT, g_pin_1); channel_1 = g_cfg.pins.channels[g_pin_1]; channel_2 = g_cfg.pins.channels2[g_pin_1]; @@ -282,7 +282,7 @@ static int http_tasmota_json_SENSOR(void* request, jsonCb_t printer) { chan_val2 = CHANNEL_GetFloat(channel_2); // writer header - printer(request, "\"CHT8305\":"); + printer(request, "\"CHT83XX\":"); // following check will clear NaN values printer(request, "{"); printer(request, "\"Temperature\": %.1f,", chan_val1); diff --git a/src/httpserver/new_http.c b/src/httpserver/new_http.c index a7e38f4e4..0c2e86937 100644 --- a/src/httpserver/new_http.c +++ b/src/httpserver/new_http.c @@ -441,8 +441,8 @@ const char* htmlPinRoleNames[] = { "DHT12", "DHT21", "DHT22", - "CHT8305_SDA", - "CHT8305_SCK", + "CHT83XX_SDA", + "CHT83XX_SCK", "SHT3X_SDA", "SHT3X_SCK", "SoftSDA", diff --git a/src/new_pins.c b/src/new_pins.c index cd3b828fa..4be86f7a2 100644 --- a/src/new_pins.c +++ b/src/new_pins.c @@ -334,7 +334,7 @@ int PIN_IOR_NofChan(int test){ return 2; } // Some roles don't need any channels - if (test == IOR_SGP_CLK || test == IOR_SHT3X_CLK || test == IOR_CHT8305_CLK || test == IOR_Button_ToggleAll || test == IOR_Button_ToggleAll_n + if (test == IOR_SGP_CLK || test == IOR_SHT3X_CLK || test == IOR_CHT83XX_CLK || test == IOR_Button_ToggleAll || test == IOR_Button_ToggleAll_n || test == IOR_BL0937_CF || test == IOR_BL0937_CF1 || test == IOR_BL0937_SEL || test == IOR_LED_WIFI || test == IOR_LED_WIFI_n || test == IOR_LED_WIFI_n || (test >= IOR_IRRecv && test <= IOR_DHT11) @@ -1550,7 +1550,7 @@ bool CHANNEL_ShouldBePublished(int ch) { if (role == IOR_Relay || role == IOR_Relay_n || role == IOR_LED || role == IOR_LED_n || role == IOR_ADC || role == IOR_BAT_ADC - || role == IOR_CHT8305_DAT || role == IOR_SHT3X_DAT || role == IOR_SGP_DAT + || role == IOR_CHT83XX_DAT || role == IOR_SHT3X_DAT || role == IOR_SGP_DAT || role == IOR_DigitalInput || role == IOR_DigitalInput_n || role == IOR_DoorSensorWithDeepSleep || role == IOR_DoorSensorWithDeepSleep_NoPup || role == IOR_DoorSensorWithDeepSleep_pd @@ -1564,7 +1564,7 @@ bool CHANNEL_ShouldBePublished(int ch) { return true; } // SGP, CHT8305 and SHT3X uses secondary channel for humidity - if (role == IOR_CHT8305_DAT || role == IOR_SHT3X_DAT || role == IOR_SGP_DAT) { + if (role == IOR_CHT83XX_DAT || role == IOR_SHT3X_DAT || role == IOR_SGP_DAT) { return true; } } diff --git a/src/new_pins.h b/src/new_pins.h index e601857fc..34d7b47c3 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -327,20 +327,20 @@ typedef enum ioRole_e { //iodetail:"file":"new_pins.h", //iodetail:"driver":""} IOR_DHT22, - //iodetail:{"name":"CHT8305_DAT", + //iodetail:{"name":"CHT83XX_DAT", //iodetail:"title":"TODO", - //iodetail:"descr":"DAT pin of CHT8305. Setting this pin role and saving will reveal two fields next to it. Set first field to 1 and second to 2. Those are related channel numbers to store temperature and humidity.", - //iodetail:"enum":"IOR_CHT8305_DAT", + //iodetail:"descr":"DAT pin of CHT83XX. Setting this pin role and saving will reveal two fields next to it. Set first field to 1 and second to 2. Those are related channel numbers to store temperature and humidity.", + //iodetail:"enum":"IOR_CHT83XX_DAT", //iodetail:"file":"new_pins.h", //iodetail:"driver":""} - IOR_CHT8305_DAT, - //iodetail:{"name":"CHT8305_CLK", + IOR_CHT83XX_DAT, + //iodetail:{"name":"CHT83XX_CLK", //iodetail:"title":"TODO", - //iodetail:"descr":"CLK pin of CHT8305 sensor", - //iodetail:"enum":"IOR_CHT8305_CLK", + //iodetail:"descr":"CLK pin of CHT83XX sensor", + //iodetail:"enum":"IOR_CHT83XX_CLK", //iodetail:"file":"new_pins.h", //iodetail:"driver":""} - IOR_CHT8305_CLK, + IOR_CHT83XX_CLK, //iodetail:{"name":"SHT3X_DAT", //iodetail:"title":"TODO", //iodetail:"descr":"Humidity/temperature sensor DATA pin. Driver will autostart if both required pins are set. See [SHT Sensor tutorial topic here](https://www.elektroda.com/rtvforum/topic3958369.html), also see [this sensor teardown](https://www.elektroda.com/rtvforum/topic3945688.html)", @@ -568,7 +568,7 @@ typedef enum ioRole_e { } ioRole_t; #define IS_PIN_DHT_ROLE(role) (((role)>=IOR_DHT11) && ((role)<=IOR_DHT22)) -#define IS_PIN_TEMP_HUM_SENSOR_ROLE(role) (((role)==IOR_SHT3X_DAT) || ((role)==IOR_CHT8305_DAT)) +#define IS_PIN_TEMP_HUM_SENSOR_ROLE(role) (((role)==IOR_SHT3X_DAT) || ((role)==IOR_CHT83XX_DAT)) #define IS_PIN_AIR_SENSOR_ROLE(role) (((role)==IOR_SGP_DAT)) typedef enum channelType_e { diff --git a/src/obk_config.h b/src/obk_config.h index 3d1fdb1ab..8f18132f7 100644 --- a/src/obk_config.h +++ b/src/obk_config.h @@ -95,6 +95,7 @@ #define ENABLE_TASMOTA_JSON 1 #define ENABLE_DRIVER_DDP 1 #define ENABLE_DRIVER_SSDP 1 +#define ENABLE_DRIVER_CHT83XX 1 #elif PLATFORM_BEKEN @@ -144,6 +145,7 @@ #define ENABLE_DRIVER_SSDP 1 #define ENABLE_DRIVER_IR2 0 #define ENABLE_DRIVER_DS1820 1 +#define ENABLE_DRIVER_CHT83XX 1 #elif PLATFORM_LN882H diff --git a/src/user_main.c b/src/user_main.c index 0a8599737..b0b5ff3df 100644 --- a/src/user_main.c +++ b/src/user_main.c @@ -1145,9 +1145,9 @@ void Main_Init_BeforeDelay_Unsafe(bool bAutoRunScripts) { DRV_StartDriver("DoorSensor"); #endif } - if (PIN_FindPinIndexForRole(IOR_CHT8305_CLK, -1) != -1 && PIN_FindPinIndexForRole(IOR_CHT8305_DAT, -1) != -1) { + if (PIN_FindPinIndexForRole(IOR_CHT83XX_CLK, -1) != -1 && PIN_FindPinIndexForRole(IOR_CHT83XX_DAT, -1) != -1) { #ifndef OBK_DISABLE_ALL_DRIVERS - DRV_StartDriver("CHT8305"); + DRV_StartDriver("CHT83XX"); #endif } if (PIN_FindPinIndexForRole(IOR_SHT3X_CLK, -1) != -1 && PIN_FindPinIndexForRole(IOR_SHT3X_DAT, -1) != -1) {