#include "VOC_sensor.h" Adafruit_SGP30 sgp; uint8_t VOC_samples = 3600 / g_pms_report_period; #define VOC_MIN 0 #define VOC_MAX 10000 #define VOC_RAW_MAX 30000 #define VOC_INTERVAL 120000 //ms uint32_t lastVOCtime = 0; //sensors AQSSensor SGP30_tvoc("TVOC", SGP30_TVOC, "ppb", device_name, VOC_samples, VOC_MIN, VOC_MAX); AQSSensor SGP30_eco2("eCO2", SGP30_eCO2, "ppm", device_name, VOC_samples, VOC_MIN, VOC_MAX); AQSSensor SGP30_rawh2("Raw_H2", SGP30_rawH2, "#", device_name, VOC_samples, VOC_MIN, VOC_RAW_MAX); AQSSensor SGP30_rawethanol("Raw_Ethanol", SGP30_rawEthanol, "#", device_name, VOC_samples, VOC_MIN, VOC_RAW_MAX); void initVOCsensor(void) { Serial.println("VOCSensor: Init SGP30: "); if (!sgp.begin()) { Serial.println("VOCSensor: Init Failed (SGP30 not found)"); } else { Serial.printf("VOCSensor: serial =0x%X%X%X\n", sgp.serialnumber[0], sgp.serialnumber[1], sgp.serialnumber[2]); addSensorToList(&SGP30_tvoc); addSensorToList(&SGP30_eco2); addSensorToList(&SGP30_rawh2); addSensorToList(&SGP30_rawethanol); sgp.IAQmeasure(); sgp.IAQmeasureRaw(); Serial.println("VOCSensor: Init OK"); } } void handleVOCsensor(void) { uint32_t timenow = millis(); if ((timenow - lastVOCtime > VOC_INTERVAL) || !lastVOCtime) { if (!sgp.IAQmeasure()) { Serial.println("VOCSensor: Measurement failed"); return; } SGP30_tvoc.set(sgp.TVOC); SGP30_eco2.set(sgp.eCO2); SGP30_tvoc.publish(); SGP30_eco2.publish(); if (!sgp.IAQmeasureRaw()) { Serial.println("VOCSensor: Raw Measurement failed"); return; } SGP30_rawethanol.set(sgp.rawEthanol); SGP30_rawh2.set(sgp.rawH2); SGP30_rawethanol.publish(); SGP30_rawh2.publish(); lastVOCtime = timenow; } }