diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index 10a0699c7..114d40cf4 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -1,6 +1,7 @@ /* 5.10.0a * Add (experimental) support for sensor SHT3x - * Change ADS1115 default voltage range from +/-2V to +/-4V (#1289) + * Add (experimental) support for iTead SI7021 temperature and humidity sensor (#735) + * Change ADS1115 default voltage range from +/-2V to +/-6V (#1289) * Add multipress support and more user configurable options to Sonoff Dual R2 (#1291) * * 5.10.0 20171201 diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index ec58907e5..5ad6606fb 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -460,7 +460,7 @@ #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" -#define D_SENSOR_DHT22 "DHT22" +#define D_SENSOR_SI7021 "SI7021" #define D_SENSOR_DS18X20 "DS18x20" #define D_SENSOR_I2C_SCL "I2C SCL" #define D_SENSOR_I2C_SDA "I2C SDA" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index aff0af09e..517ab8ee3 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -460,7 +460,7 @@ #define D_SENSOR_NONE "None" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" -#define D_SENSOR_DHT22 "DHT22" +#define D_SENSOR_SI7021 "SI7021" #define D_SENSOR_DS18X20 "DS18x20" #define D_SENSOR_I2C_SCL "I2C SCL" #define D_SENSOR_I2C_SDA "I2C SDA" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index ce8939562..4053e5210 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -460,7 +460,7 @@ #define D_SENSOR_NONE "Geen" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" -#define D_SENSOR_DHT22 "DHT22" +#define D_SENSOR_SI7021 "SI7021" #define D_SENSOR_DS18X20 "DS18x20" #define D_SENSOR_I2C_SCL "I2C SCL" #define D_SENSOR_I2C_SDA "I2C SDA" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index 0e6b63018..71ccb7bcc 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -460,7 +460,7 @@ #define D_SENSOR_NONE "Brak" #define D_SENSOR_DHT11 "DHT11" #define D_SENSOR_AM2301 "AM2301" -#define D_SENSOR_DHT22 "DHT22" +#define D_SENSOR_SI7021 "SI7021" #define D_SENSOR_DS18X20 "DS18x20" #define D_SENSOR_I2C_SCL "I2C SCL" #define D_SENSOR_I2C_SDA "I2C SDA" diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index ec33d9ee3..d7af116d4 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -2376,34 +2376,36 @@ void SerialInput() serial_in_byte = Serial.read(); /*-------------------------------------------------------------------------------------------*\ - * Sonoff dual 19200 baud serial interface + * Sonoff dual and ch4 19200 baud serial interface \*-------------------------------------------------------------------------------------------*/ - - if (dual_hex_code) { - dual_hex_code--; + if ((SONOFF_DUAL == Settings.module) || (CH4 == Settings.module)) { if (dual_hex_code) { - dual_button_code = (dual_button_code << 8) | serial_in_byte; - serial_in_byte = 0; - } else { - if (serial_in_byte != 0xA1) { - dual_button_code = 0; // 0xA1 - End of Sonoff dual button code + dual_hex_code--; + if (dual_hex_code) { + dual_button_code = (dual_button_code << 8) | serial_in_byte; + serial_in_byte = 0; + } else { + if (serial_in_byte != 0xA1) { + dual_button_code = 0; // 0xA1 - End of Sonoff dual button code + } } } - } - if (0xA0 == serial_in_byte) { // 0xA0 - Start of Sonoff dual button code - serial_in_byte = 0; - dual_button_code = 0; - dual_hex_code = 3; + if (0xA0 == serial_in_byte) { // 0xA0 - Start of Sonoff dual button code + serial_in_byte = 0; + dual_button_code = 0; + dual_hex_code = 3; + } } /*-------------------------------------------------------------------------------------------*\ * Sonoff bridge 19200 baud serial interface \*-------------------------------------------------------------------------------------------*/ - - if (SonoffBridgeSerialInput()) { - serial_in_byte_counter = 0; - Serial.flush(); - return; + if (SONOFF_BRIDGE == Settings.module) { + if (SonoffBridgeSerialInput()) { + serial_in_byte_counter = 0; + Serial.flush(); + return; + } } /*-------------------------------------------------------------------------------------------*/ @@ -2424,7 +2426,6 @@ void SerialInput() /*-------------------------------------------------------------------------------------------*\ * Sonoff SC 19200 baud serial interface \*-------------------------------------------------------------------------------------------*/ - if (serial_in_byte == '\x1B') { // Sonoff SC status from ATMEGA328P serial_in_buffer[serial_in_byte_counter] = 0; // serial data completed SonoffScSerialInput(serial_in_buffer); @@ -2494,7 +2495,7 @@ void GpioInit() mpin -= (GPIO_PWM1_INV - GPIO_PWM1); } #ifdef USE_DHT - else if ((mpin >= GPIO_DHT11) && (mpin <= GPIO_DHT22)) { + else if ((mpin >= GPIO_DHT11) && (mpin <= GPIO_SI7021)) { if (DhtSetup(i, mpin)) { dht_flg = 1; mpin = GPIO_DHT11; diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index 89384d938..a250795b2 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -24,8 +24,8 @@ enum UserSelectablePins { GPIO_NONE, // Not used GPIO_DHT11, // DHT11 - GPIO_DHT21, // DHT21, AM2301 - GPIO_DHT22, // DHT22, AM2302, AM2321 + GPIO_DHT22, // DHT21, DHT22, AM2301, AM2302, AM2321 + GPIO_SI7021, // iTead SI7021 GPIO_DSB, // Single wire DS18B20 or DS18S20 GPIO_I2C_SCL, // I2C SCL GPIO_I2C_SDA, // I2C SDA @@ -85,7 +85,7 @@ const char kSensors[GPIO_SENSOR_END][9] PROGMEM = { D_SENSOR_NONE, D_SENSOR_DHT11, D_SENSOR_AM2301, - D_SENSOR_DHT22, + D_SENSOR_SI7021, D_SENSOR_DS18X20, D_SENSOR_I2C_SCL, D_SENSOR_I2C_SDA, diff --git a/sonoff/xsns_06_dht.ino b/sonoff/xsns_06_dht.ino index d98cf49bc..8af52efe1 100644 --- a/sonoff/xsns_06_dht.ino +++ b/sonoff/xsns_06_dht.ino @@ -1,5 +1,5 @@ /* - xsns_06_dht.ino - DHTxx and AM23xx temperature and humidity sensor support for Sonoff-Tasmota + xsns_06_dht.ino - DHTxx, AM23xx and SI7021 temperature and humidity sensor support for Sonoff-Tasmota Copyright (C) 2017 Theo Arends @@ -19,7 +19,7 @@ #ifdef USE_DHT /*********************************************************************************************\ - * DHT11, DHT21 (AM2301), DHT22 (AM2302, AM2321) - Temperature and Humidy + * DHT11, AM2301 (DHT21, DHT22, AM2302, AM2321), SI7021 - Temperature and Humidy * * Reading temperature or humidity takes about 250 milliseconds! * Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) @@ -85,7 +85,12 @@ void DhtRead(byte sensor) } pinMode(Dht[sensor].pin, OUTPUT); digitalWrite(Dht[sensor].pin, LOW); - delay(20); + + if (GPIO_SI7021 == Dht[sensor].type) { + delayMicroseconds(500); + } else { + delay(20); + } noInterrupts(); digitalWrite(Dht[sensor].pin, HIGH); @@ -153,24 +158,18 @@ boolean DhtReadTempHum(byte sensor, float &t, float &h) switch (Dht[sensor].type) { case GPIO_DHT11: h = dht_data[0]; - t = ConvertTemp(dht_data[2]); + t = dht_data[2]; break; case GPIO_DHT22: - case GPIO_DHT21: - h = dht_data[0]; - h *= 256; - h += dht_data[1]; - h *= 0.1; - t = dht_data[2] & 0x7F; - t *= 256; - t += dht_data[3]; - t *= 0.1; + case GPIO_SI7021: + h = ((dht_data[0] << 8) | dht_data[1]) * 0.1; + t = (((dht_data[2] & 0x7F) << 8 ) | dht_data[3]) * 0.1; if (dht_data[2] & 0x80) { t *= -1; } - t = ConvertTemp(t); break; } + t = ConvertTemp(t); if (!isnan(t)) { Dht[sensor].t = t; } diff --git a/sonoff/xsns_12_ads1115.ino b/sonoff/xsns_12_ads1115.ino index 411d9a4b3..da2bdd22b 100644 --- a/sonoff/xsns_12_ads1115.ino +++ b/sonoff/xsns_12_ads1115.ino @@ -32,8 +32,8 @@ * Setting these values incorrectly may destroy your ADC! * ADS1115 * ------- - * ADS1115_REG_CONFIG_PGA_6_144V // 2/3x gain +/- 6.144V 1 bit = 0.1875mV - * ADS1115_REG_CONFIG_PGA_4_096V // 1x gain +/- 4.096V 1 bit = 0.125mV (default) + * ADS1115_REG_CONFIG_PGA_6_144V // 2/3x gain +/- 6.144V 1 bit = 0.1875mV (default) + * ADS1115_REG_CONFIG_PGA_4_096V // 1x gain +/- 4.096V 1 bit = 0.125mV * ADS1115_REG_CONFIG_PGA_2_048V // 2x gain +/- 2.048V 1 bit = 0.0625mV * ADS1115_REG_CONFIG_PGA_1_024V // 4x gain +/- 1.024V 1 bit = 0.03125mV * ADS1115_REG_CONFIG_PGA_0_512V // 8x gain +/- 0.512V 1 bit = 0.015625mV @@ -75,9 +75,9 @@ CONFIG REGISTER #define ADS1115_REG_CONFIG_MUX_SINGLE_3 (0x7000) // Single-ended AIN3 #define ADS1115_REG_CONFIG_PGA_MASK (0x0E00) -#define ADS1115_REG_CONFIG_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3 +#define ADS1115_REG_CONFIG_PGA_6_144V (0x0000) // +/-6.144V range = Gain 2/3 (default) #define ADS1115_REG_CONFIG_PGA_4_096V (0x0200) // +/-4.096V range = Gain 1 -#define ADS1115_REG_CONFIG_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 (default) +#define ADS1115_REG_CONFIG_PGA_2_048V (0x0400) // +/-2.048V range = Gain 2 #define ADS1115_REG_CONFIG_PGA_1_024V (0x0600) // +/-1.024V range = Gain 4 #define ADS1115_REG_CONFIG_PGA_0_512V (0x0800) // +/-0.512V range = Gain 8 #define ADS1115_REG_CONFIG_PGA_0_256V (0x0A00) // +/-0.256V range = Gain 16 @@ -126,7 +126,7 @@ void Ads1115StartComparator(uint8_t channel, uint16_t mode) uint16_t config = mode | ADS1115_REG_CONFIG_CQUE_NONE | // Comparator enabled and asserts on 1 match ADS1115_REG_CONFIG_CLAT_NONLAT | // Non Latching mode - ADS1115_REG_CONFIG_PGA_4_096V | // ADC Input voltage range (Gain) + ADS1115_REG_CONFIG_PGA_6_144V | // ADC Input voltage range (Gain) ADS1115_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val) ADS1115_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val) ADS1115_REG_CONFIG_DR_6000SPS; // 6000 samples per second diff --git a/sonoff/xsns_12_ads1115_i2cdev.ino b/sonoff/xsns_12_ads1115_i2cdev.ino index 08db3cc63..0a85d305a 100644 --- a/sonoff/xsns_12_ads1115_i2cdev.ino +++ b/sonoff/xsns_12_ads1115_i2cdev.ino @@ -84,7 +84,7 @@ void Ads1115Detect() ADS1115 adc0(ads1115_address); if (adc0.testConnection()) { adc0.initialize(); - adc0.setGain(ADS1115_PGA_4P096); // Set the gain (PGA) +/-4.096V + adc0.setGain(ADS1115_PGA_6P144); // Set the gain (PGA) +/-6.144V adc0.setRate(ADS1115_RATE_860); adc0.setMode(ADS1115_MODE_CONTINUOUS); ads1115_type = 1;