#include #include "Adafruit_SGP30.h" Adafruit_SGP30 sgp; /* return absolute humidity [mg/m^3] with approximation formula * @param temperature [°C] * @param humidity [%RH] */ uint32_t getAbsoluteHumidity(float temperature, float humidity) { // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15 const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3] const uint32_t absoluteHumidityScaled = static_cast(1000.0f * absoluteHumidity); // [mg/m^3] return absoluteHumidityScaled; } void setup() { Serial.begin(9600); Serial.println("SGP30 test"); if (! sgp.begin()){ Serial.println("Sensor not found :("); while (1); } Serial.print("Found SGP30 serial #"); Serial.print(sgp.serialnumber[0], HEX); Serial.print(sgp.serialnumber[1], HEX); Serial.println(sgp.serialnumber[2], HEX); // If you have a baseline measurement from before you can assign it to start, to 'self-calibrate' //sgp.setIAQBaseline(0x8E68, 0x8F41); // Will vary for each sensor! } int counter = 0; void loop() { // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals //float temperature = 22.1; // [°C] //float humidity = 45.2; // [%RH] //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity)); if (! sgp.IAQmeasure()) { Serial.println("Measurement failed"); return; } Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t"); Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm"); if (! sgp.IAQmeasureRaw()) { Serial.println("Raw Measurement failed"); return; } Serial.print("Raw H2 "); Serial.print(sgp.rawH2); Serial.print(" \t"); Serial.print("Raw Ethanol "); Serial.print(sgp.rawEthanol); Serial.println(""); delay(1000); counter++; if (counter == 30) { counter = 0; uint16_t TVOC_base, eCO2_base; if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) { Serial.println("Failed to get baseline readings"); return; } Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX); Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX); } }