Add support for CCS811

Add support for CCS811 sensor (#3309)
This commit is contained in:
Theo Arends 2018-07-23 17:42:12 +02:00
parent b7b87f5524
commit cdae4f3f46
7 changed files with 26 additions and 33 deletions

View File

@ -1,4 +1,5 @@
/* 6.1.1c /* 6.1.1c
* Add support for CCS811 sensor (#3309)
* Add command Timers 0/1 to globally disable or enable armed timers (#3270) * Add command Timers 0/1 to globally disable or enable armed timers (#3270)
* *
* 6.1.1b * 6.1.1b

View File

@ -188,6 +188,9 @@ uint8_t ntp_force_sync = 0; // Force NTP sync
StateBitfield global_state; StateBitfield global_state;
RulesBitfield rules_flag; RulesBitfield rules_flag;
uint8_t glob_humidity = 0;
sint16_t glob_temperature = -9999;
char my_version[33]; // Composed version string char my_version[33]; // Composed version string
char my_hostname[33]; // Composed Wifi hostname char my_hostname[33]; // Composed Wifi hostname
char mqtt_client[33]; // Composed MQTT Clientname char mqtt_client[33]; // Composed MQTT Clientname
@ -198,11 +201,6 @@ char log_data[LOGSZ]; // Logging
char web_log[WEB_LOG_SIZE] = {'\0'}; // Web log buffer char web_log[WEB_LOG_SIZE] = {'\0'}; // Web log buffer
String backlog[MAX_BACKLOG]; // Command backlog String backlog[MAX_BACKLOG]; // Command backlog
#ifdef USE_CCS811
uint8_t glob_humidity=0;
sint16_t glob_temperature=-9999;
#endif
/********************************************************************************************/ /********************************************************************************************/
char* Format(char* output, const char* input, int size) char* Format(char* output, const char* input, int size)

View File

@ -58,9 +58,6 @@ void KNX_CB_Action(message_t const &msg, void *arg);
* Provide an image with all supported sensors enabled * Provide an image with all supported sensors enabled
\*********************************************************************************************/ \*********************************************************************************************/
#define USE_CCS811 // Add I2C code for CCS811 sensor (+2k2 code)
#ifdef USE_ALL_SENSORS #ifdef USE_ALL_SENSORS
#define USE_ADC_VCC // Display Vcc in Power status. Disable for use as Analog input on selected devices #define USE_ADC_VCC // Display Vcc in Power status. Disable for use as Analog input on selected devices
@ -74,7 +71,6 @@ void KNX_CB_Action(message_t const &msg, void *arg);
#define USE_BMP // Add I2C code for BMP085/BMP180/BMP280/BME280 sensor (+4k code) #define USE_BMP // Add I2C code for BMP085/BMP180/BMP280/BME280 sensor (+4k code)
#define USE_BME680 // Add additional support for BME680 sensor using Bosch BME680 library (+4k code) #define USE_BME680 // Add additional support for BME680 sensor using Bosch BME680 library (+4k code)
#define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code) #define USE_SGP30 // Add I2C code for SGP30 sensor (+1k1 code)
#define USE_CCS811 // Add I2C code for CCS811 sensor (+2k2 code)
#define USE_BH1750 // Add I2C code for BH1750 sensor (+0k5 code) #define USE_BH1750 // Add I2C code for BH1750 sensor (+0k5 code)
#define USE_VEML6070 // Add I2C code for VEML6070 sensor (+0k5 code) #define USE_VEML6070 // Add I2C code for VEML6070 sensor (+0k5 code)
#define USE_TSL2561 // Add I2C code for TSL2561 sensor using library Adafruit TSL2561 Arduino (+1k2 code) #define USE_TSL2561 // Add I2C code for TSL2561 sensor using library Adafruit TSL2561 Arduino (+1k2 code)
@ -84,6 +80,7 @@ void KNX_CB_Action(message_t const &msg, void *arg);
#define USE_INA219 // Add I2C code for INA219 Low voltage and current sensor (+1k code) #define USE_INA219 // Add I2C code for INA219 Low voltage and current sensor (+1k code)
#define USE_MGS // Add I2C code for Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) #define USE_MGS // Add I2C code for Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code)
//#define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code) //#define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code)
//#define USE_CCS811 // Add I2C code for CCS811 sensor (+2k2 code)
#define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code) #define USE_MHZ19 // Add support for MH-Z19 CO2 sensor (+2k code)
#define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code) #define USE_SENSEAIR // Add support for SenseAir K30, K70 and S8 CO2 sensor (+2k3 code)
#ifndef CO2_LOW #ifndef CO2_LOW

View File

@ -290,6 +290,7 @@
// #define USE_APDS9960 // Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code) // #define USE_APDS9960 // Enable APDS9960 Proximity Sensor (I2C address 0x39). Disables SHT and VEML6070 (+4k7 code)
// #define USE_MCP230xx // Enable MCP23008/MCP23017 for GP INPUT ONLY (I2C addresses 0x20 - 0x27) providing command Sensor29 for configuration (+2k2 code) // #define USE_MCP230xx // Enable MCP23008/MCP23017 for GP INPUT ONLY (I2C addresses 0x20 - 0x27) providing command Sensor29 for configuration (+2k2 code)
// #define USE_MPR121 // Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code) // #define USE_MPR121 // Enable MPR121 controller (I2C addresses 0x5A, 0x5B, 0x5C and 0x5D) in input mode for touch buttons (+1k3 code)
// #define USE_CCS811 // Enable CCS811 sensor (I2C address 0x5A) (+2k2 code)
#endif // USE_I2C #endif // USE_I2C
// -- SPI sensors --------------------------------- // -- SPI sensors ---------------------------------

View File

@ -459,6 +459,9 @@ void BmpRead()
#endif // USE_BME680 #endif // USE_BME680
} }
if (bmp_temperature != 0.0) { bmp_temperature = ConvertTemp(bmp_temperature); } if (bmp_temperature != 0.0) { bmp_temperature = ConvertTemp(bmp_temperature); }
glob_humidity = bmp_humidity;
glob_temperature = bmp_temperature;
} }
void BmpEverySecond() void BmpEverySecond()
@ -495,12 +498,6 @@ void BmpShow(boolean json)
dtostrfd(bmp_gas_resistance, 2, gas_resistance); dtostrfd(bmp_gas_resistance, 2, gas_resistance);
#endif // USE_BME680 #endif // USE_BME680
#ifdef USE_CCS811
glob_humidity=bmp_humidity;
glob_temperature=(bmp_temperature*4);
#endif
if (json) { if (json) {
char json_humidity[40]; char json_humidity[40];
snprintf_P(json_humidity, sizeof(json_humidity), PSTR(",\"" D_JSON_HUMIDITY "\":%s"), humidity); snprintf_P(json_humidity, sizeof(json_humidity), PSTR(",\"" D_JSON_HUMIDITY "\":%s"), humidity);

View File

@ -102,12 +102,10 @@ void Sht3xShow(boolean json)
for (byte i = 0; i < sht3x_count; i++) { for (byte i = 0; i < sht3x_count; i++) {
if (Sht3xRead(t, h, sht3x_sensors[i].address)) { if (Sht3xRead(t, h, sht3x_sensors[i].address)) {
#ifdef USE_CCS811 if (0 == i) {
if (i==0) { glob_humidity = h;
glob_humidity=h; glob_temperature = t;
glob_temperature=(t*4);
} }
#endif
dtostrfd(t, Settings.flag2.temperature_resolution, temperature); dtostrfd(t, Settings.flag2.temperature_resolution, temperature);
dtostrfd(h, Settings.flag2.humidity_resolution, humidity); dtostrfd(h, Settings.flag2.humidity_resolution, humidity);

View File

@ -34,19 +34,20 @@ uint8_t CCS811_ready;
uint8_t CCS811_type; uint8_t CCS811_type;
uint16_t eCO2; uint16_t eCO2;
uint16_t TVOC; uint16_t TVOC;
uint8_t tcnt,ecnt; uint8_t tcnt = 0;
uint8_t ecnt = 0;
/********************************************************************************************/ /********************************************************************************************/
#define EVERYNSECONDS 5 #define EVERYNSECONDS 5
void CCS811Update() // Perform every n second void CCS811Update() // Perform every n second
{ {
tcnt+=1; tcnt++;
if (tcnt>=EVERYNSECONDS) { if (tcnt >= EVERYNSECONDS) {
tcnt=0; tcnt = 0;
CCS811_ready = 0; CCS811_ready = 0;
if (!CCS811_type) { if (!CCS811_type) {
sint8_t res=ccs.begin(CCS811_ADDRESS); sint8_t res = ccs.begin(CCS811_ADDRESS);
if (!res) { if (!res) {
CCS811_type = 1; CCS811_type = 1;
snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, "CCS811", 0x5A); snprintf_P(log_data, sizeof(log_data), S_LOG_I2C_FOUND_AT, "CCS811", 0x5A);
@ -58,19 +59,19 @@ void CCS811Update() // Perform every n second
} else { } else {
if (ccs.available()) { if (ccs.available()) {
if (!ccs.readData()){ if (!ccs.readData()){
TVOC=ccs.getTVOC(); TVOC = ccs.getTVOC();
eCO2=ccs.geteCO2(); eCO2 = ccs.geteCO2();
CCS811_ready = 1; CCS811_ready = 1;
if (glob_humidity!=0 && glob_temperature!=-9999) { if ((glob_humidity != 0) && (glob_temperature != -9999)) {
double gtmp=glob_temperature; double gtmp = glob_temperature * 4;
ccs.setEnvironmentalData(glob_humidity,gtmp/4); ccs.setEnvironmentalData(glob_humidity, gtmp / 4);
} }
ecnt=0; ecnt = 0;
} }
} else { } else {
// failed, count up // failed, count up
ecnt+=1; ecnt++;
if (ecnt>6) { if (ecnt > 6) {
// after 30 seconds, restart // after 30 seconds, restart
ccs.begin(CCS811_ADDRESS); ccs.begin(CCS811_ADDRESS);
} }